Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2012, 18:25   #11
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Работайте в вещественными числами через сопроцессор. Это проще и удобнее.

Следующая программа вычисляет квадратный корень числа и выводи результат на экран:

Код:
; А.Крупник "Изучаем Ассемблер" листинг 7.1
.386
.model  flat, stdcall
option  casemap:none

include    c:\masm32\include\windows.inc
include    c:\masm32\include\kernel32.inc
include    c:\masm32\include\fpu.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\fpu.lib

BSIZE     equ  30

.data
sqroot    dt  ?
digit     dd  17
stdout    dd  ?
cWritten  dd  ?
buf       db BSIZE dup (?)

.code
start:
main proc
    invoke  GetStdHandle, STD_OUTPUT_HANDLE
    mov stdout, eax
    fild digit      ;загружаем целое в регистр
    fsqrt           ;вычисляем корень
    fstp sqroot     ;сохраняем в 80-ти битах
    invoke  FpuFLtoA, ADDR sqroot, 10, \
                      ADDR buf, SRC1_REAL or SRC2_DIMM
    invoke  WriteConsoleA, stdout, ADDR buf, \
                           BSIZE, ADDR cWritten, NULL
    invoke  ExitProcess, 0
main endp
end start
8Observer8 вне форума Ответить с цитированием
Старый 26.04.2012, 22:31   #12
Аделинкка
Пользователь
 
Аватар для Аделинкка
 
Регистрация: 24.03.2012
Сообщений: 68
По умолчанию

А мне предложили через использование 2х переменных,в одну записать целую часть в другую дробную,но у меня так не получается что-то((

Код:
  .386
        .model flat,stdcall
  option   casemap:none
                        include C:\masm32\INCLUDE\WINDOWS.INC
                        include C:\masm32\INCLUDE\KERNEL32.INC 
                        include C:\masm32\INCLUDE\USER32.INC
                        include C:\masm32\INCLUDE\ADVAPI32.INC                                                  
                                                                     
                        includelib C:\masm32\lib\comctl32.lib
                        includelib C:\masm32\lib\user32.lib
                        includelib C:\masm32\lib\gdi32.lib
                        includelib C:\masm32\lib\kernel32.lib                
                        includelib C:\masm32\lib\user32.lib
                        includelib C:\masm32\lib\advapi32.lib                 
;###########################################################
;data--data--data--data--data--data--data--data--data--data--     PROC
;------------------------------------------------------------
.DATA
format db '%d.%d',0
title_1                      DB     "((a+b)*c-24)/ac-1",0
R  db 12 dup (0)
Res  db 12 dup (0)

;##############################################################
;code--code--code--code--code--code--code--code--code--code-- PROC
;---------------------------------------------------------------------------------------------------
.CODE
START:  
mov    eax,20
add    eax,30
imul   eax,40
sub    eax,24
mov   ebx,20
imul   ebx,40
sub    ebx,1
xor    edx,edx
div      ebx
mov R,eax
mov Res ,edx
invoke wsprintf,addr R,addr format,R,addr format,Res     
invoke	MessageBox, 0, addr R, addr title_1,MB_OK                    
 
             invoke               ExitProcess        ,       0

;++++++++++++++++++++++++++++++++++++++++++++
END  START
Нет,не блондинка!!

Последний раз редактировалось rpy3uH; 03.05.2012 в 14:35.
Аделинкка вне форума Ответить с цитированием
Старый 27.04.2012, 08:26   #13
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Аделинкка, дробная часть и остаток - это одно и тоже? Может, учебники стоит почитать?
vadimych вне форума Ответить с цитированием
Старый 02.05.2012, 16:10   #14
Аделинкка
Пользователь
 
Аватар для Аделинкка
 
Регистрация: 24.03.2012
Сообщений: 68
По умолчанию

Я знаю,что это одно и тоже.
Нет,не блондинка!!
Аделинкка вне форума Ответить с цитированием
Старый 02.05.2012, 16:53   #15
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
А мне предложили через использование 2х переменных,в одну записать целую часть в другую дробную,но у меня так не получается что-то((
там для получения результата нужно правильно расширять исходные данные, например, для n-разрядного числа с n/2-целой и n/2-дробной частями:

1. увеличить дробную часть числителя на n- разрядов
2. увеличить целую часть знаменателя на n-разрядов (в зависимости от знака числа)
3. произвести деление обычных целых 2n-разрядных чисел и в результате получим число с n-целыми и n-дробными разрядами.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 02.05.2012, 22:03   #16
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Я знаю,что это одно и тоже.
У вас устаревшие данные. Уже давно доказано, что это совершенно разные вещи. И в учебниках об этом уже пишут. Да, да, это так.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 03.05.2012, 13:25   #17
Аделинкка
Пользователь
 
Аватар для Аделинкка
 
Регистрация: 24.03.2012
Сообщений: 68
По умолчанию

Спасибо за новость.

Код:
.386
        .model flat,stdcall
  option   casemap:none
                        include C:\masm32\INCLUDE\WINDOWS.INC
                        include C:\masm32\INCLUDE\KERNEL32.INC 
                        include C:\masm32\INCLUDE\USER32.INC
                        include C:\masm32\INCLUDE\ADVAPI32.INC                                                  
                                                                     
                        includelib C:\masm32\lib\comctl32.lib
                        includelib C:\masm32\lib\user32.lib
                        includelib C:\masm32\lib\gdi32.lib
                        includelib C:\masm32\lib\kernel32.lib                
                        includelib C:\masm32\lib\user32.lib
                        includelib C:\masm32\lib\advapi32.lib                 
;###########################################################
;data--data--data--data--data--data--data--data--data--data--     PROC
;------------------------------------------------------------
.DATA
format db '%d.%d',0
title_1                      DB     "((a+b)*c-24)/ac-1",0
R  db 12 dup (0)
octatok dd 0
ot dd 20

;##############################################################
;code--code--code--code--code--code--code--code--code--code-- PROC
;---------------------------------------------------------------------------------------------------
.CODE
START:  
mov    eax,ot
add    eax,30
imul   eax,40
sub    eax,24
mov   ebx,20
imul   ebx,40
sub    ebx,1
xor    edx,edx
div      ebx
mov    octatok ,edx
mov ot,eax
invoke wsprintf,addr R,addr format,ot  ,octatok    
invoke	MessageBox, 0, addr R, addr title_1,MB_OK                    
 
             invoke               ExitProcess        ,       0

;++++++++++++++++++++++++++++++++++++++++++++
END  START


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
Нет,не блондинка!!

Последний раз редактировалось Stilet; 05.05.2012 в 11:51.
Аделинкка вне форума Ответить с цитированием
Старый 03.05.2012, 23:45   #18
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

((20+30)*40-24)/(20*40-1)=2.473 а не 2.378
Но я так понимаю, что это вас не особенно настораживает.

А DiemonStar вам там распинался, про расширение исходных данных луч света почти уже забрезжил. Оказывается вас смущало всего то навсего, что программа не компилировалась. Печально.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 05.05.2012, 00:51   #19
Аделинкка
Пользователь
 
Аватар для Аделинкка
 
Регистрация: 24.03.2012
Сообщений: 68
По умолчанию

Аааа....
Я вручную даже не считала.
упс...не учла этого факта...
сейчас что-нибудь подумаю...
просто я уже слишком долго сижу на такой фигне (как мне кажется),и чего то не понимаю.
Нет,не блондинка!!
Аделинкка вне форума Ответить с цитированием
Старый 05.05.2012, 01:24   #20
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
упс...не учла этого факта...
сейчас что-нибудь подумаю...
просто я уже слишком долго сижу на такой фигне (как мне кажется),и чего то не понимаю.
Конечно не понимаете.
Давайте на яблоках. Вот у вас есть 11 яблок и их надо поделить между двумя человеками. Как это сделать, используя только целочисленную арифметику. Правильно, поделить то что делится и оставить остаток. Получается, что каждому человеку достанется по пять яблок и одно останется в остатке. Заметьте, если бы у вас был ножик (числа с плавающей точкой), то каждому досталось бы по 5.5 яблок. Вот теперь вы видите разницу между остатком от целочисленного деления и дробной частью числа. И теперь вы должны понимать, что остаток от целочисленного деления нельзя записывать через запятую как дробную часть числа.
Что же делать?
Вариант первый:
Можно расширить входные данные. Скажем, что наши 11 яблок, это не одиннадцать, а 11000. Тогда каждому из двух человеков достанется по 5500 яблок, а так как входные данные мы домножали на 1000, то ответ соответственно надо делить на 1000. И вот уже в итоге этого деления в остатке мы получим 500. И сможем с почти полной уверенностью сказать, что это тысячные части результата деления и их мы можем записать ч.з. запятую, как дробную часть числа.
Вариант второй:
взять сопроцессор.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод результата Илья- Общие вопросы C/C++ 0 16.11.2011 17:29
Вывод результата блоками nervniy Паскаль, Turbo Pascal, PascalABC.NET 1 28.05.2011 20:26
Вывод результата Delphi Nikita++ Помощь студентам 5 20.12.2010 15:48
Ассемблер вывод результата. SickUSP Помощь студентам 0 28.01.2010 18:13