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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 19:35   #1
***Виталия***
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 15
Восклицание Мне нужно узнать как получившееся выражение разделить на пи...заранее спасибо))

Здравствуйте всем!!)))
Помогите пожалуйста дописать программу,мне дано выражение f(a,b)=((a-a mod b)div 16 - 8*(a div b))*2,сначала нужно вычислить его значение,это я сделала))))
а затем получившееся значение поделить на пи,вот в это вопрос и заключается,как мне поделить на пи,подскажите пожалуйста..!!)))


.MODEL large, PASCAL
.CODE
;
kr2_40 PROC FAR a:WORD,b:WORD
PUBLIC kr2_40
mov si,ds



mov ax,a
mov bx,b
xor dx,dx
div bx
mov ax,dx
mov bx,ax
mov ax,a
sub ax,bx
shr ax,4
mov bx,ax
mov ax,a
mov cx,b
xor dx,dx
div cx
shl ax,3
mov cx,ax
mov ax,bx
sub ax,cx
shl ax,1 тут заканчивается вычисление выражения

mov a,ax
finit
fild a
fldpi
fdiv


mov ds,si
ret
kr2_40 ENDP
END
***Виталия*** вне форума Ответить с цитированием
Старый 01.06.2010, 22:26   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

fpu поможет
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 01.06.2010, 22:57   #3
***Виталия***
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 15
По умолчанию

можете мне сказать что именно там нужно писать чтобы выражение делилось на пи??

Последний раз редактировалось ***Виталия***; 02.06.2010 в 00:21.
***Виталия*** вне форума Ответить с цитированием
Старый 02.06.2010, 01:36   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код:
fldpi
fld f
fdiv
fstp res
p51x вне форума Ответить с цитированием
Старый 02.06.2010, 04:22   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

***Виталия***
если без использования FPU то
Код:
.data
pi dw 31416
.code
mov ax,результат
mov bx,10000; точность вычисления 4 знака после запятой
mul bx
div pi
если с использованием FPU, но требуется целочисленный результат, то как написал p51x, только последняя команда fistp res
Mikl___ вне форума Ответить с цитированием
Старый 02.06.2010, 13:19   #6
***Виталия***
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 15
По умолчанию

вот я сделала как вы и сказали,только при проверке на Паскале он выдает ошибку Invalid floating point operation. Что это значит?Можете посмотреть код,может я что-то неправильно написала...
PHP код:
      .MODEL  largePASCAL
      
.data
      pi dw 31416
      
.CODE
;      
kr2_40 PROC FAR a:WORD,b:WORD 
      
PUBLIC kr2_40
      mov    si
,ds         сохранить DS
                           
;   Турбо Паскаля


      mov ax
,a
      mov bx
,b
      
xor dx,dx
      div bx
      mov ax
,dx
      mov bx
,ax
      mov ax
,a
      sub ax
,bx
      shr ax
,4
      mov bx
,ax
      mov ax
,a
      mov cx
,b
      
xor dx,dx
      div cx
      shl ax
,3
      mov cx
,ax
      mov ax
,bx
      sub ax
,cx
      shl ax
,1
     
      mov bx
,10000точность вычисления 4 знака после запятой
      mul bx
      
xor dx,dx
      div pi

     
;
      
mov  ds,si         
      
ret
kr2_40 ENDP
      END 
***Виталия*** вне форума Ответить с цитированием
Старый 02.06.2010, 13:41   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

***Виталия***
в AX результат
mov bx,10000
mul bx; теперь результат в DX:AX
; xor DX,DX <-- этого делать не нужно,
; обнуление DX приведет к искажению результата при делении
DIV pi; делим DX:AX на 31416
в AX частное, в DX остаток
Mikl___ вне форума Ответить с цитированием
Старый 02.06.2010, 13:45   #8
***Виталия***
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 15
По умолчанию

Вот так именно я и написала,только вы написали чтобы в ax занести результат,а он же и так у меня в ax...

Но Паскаль выдает ошибку...как ее исправить(((???
***Виталия*** вне форума Ответить с цитированием
Старый 02.06.2010, 13:49   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

***Виталия***
Закомментируй кусок в котором умножается на 10000 и делится на 31416
В AX какое число? Выведи его на экран
Mikl___ вне форума Ответить с цитированием
Старый 02.06.2010, 13:50   #10
***Виталия***
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 15
По умолчанию

закоментировала,выводится если а = 300
b=300 то с = 20

Последний раз редактировалось ***Виталия***; 02.06.2010 в 13:54.
***Виталия*** вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать команду перехода? Заранее спасибо! Andbuba Microsoft Office Excel 6 15.01.2009 06:30
Помогите исправить задачу. Заранее спасибо Liver Помощь студентам 1 20.12.2008 09:47