Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ сложение и деление вещественных чисел

Автор: amega 6.01.2010 1:56

Добрый день!
помогите с идеей а то сосвсем чет туплю, как мне реализовать 1/5+(1/5)^2?
вместо 5 может быть любое число от 1 до 65535.

Автор: volvo 6.01.2010 2:27

    fild i ; грузим целое число
fld1 ; грузим единицу
fdivr ; делим 1 на i
fld st(0) ; дублируем результат
fmul st(0) ; возводим 1/i в квадрат
fadd ; складываем 1/i и (1/i)^2
fst f ; сохраняем результат
?

Автор: amega 6.01.2010 3:14

м забыл про сопроцесор совсем, написал


.8087
.model small
.stack 100h
.data
f dw ?
i dw 5
.code
start:
mov ax,@data
mov ds,ax

fild i ; грузим целое число
fld1 ; грузим единицу
fdivr ; делим 1 на i
fld st(0) ; дублируем результат
fld st(1) ; дублируем результат
fmul ; возводим 1/i в квадрат
fadd ; складываем 1/i и (1/i)^2
fst f ; сохраняем результат

mov ah,4Ch
int 21h
end start



выдает ошибку что ф не тго типа поменял на дд получилось в ст(0)=0.24 а в ф не то число совсе, я так понял это из за того что разный тип, но как эт исправить ?
Прикрепленное изображение






Автор: volvo 6.01.2010 4:49

Цитата
но как эт исправить ?
В каком смысле "исправить"? Посмотреть на содержимое переменной F? Не проблема: запустил программу, дошел до строки FST f, выполнил ее, выбрал в меню Дебаггера View->Dump, в его контекстном меню - сначала Display As -> Float, потом GoTo -> название переменной, то есть F... Результат - на скриншоте:
Прикрепленное изображение
... Все нормально, значение правильное, что еще надо?

Автор: amega 9.01.2010 15:58

спасибо, разобрался!