Что такое переменная типа Float? Нет в Паскале такого типа...
Приводи чуть больше кода, что за операнды, что на что ты делишь и почему надо собирать из частей, когда можно либо потом перенести число в вещественную переменную, либо сразу задействовать сопроцессор и работать с вещественной переменной?
Автор: sheka 13.01.2012 0:08
Тяжелый вопрос. Все что могу сказать, так это то, что некоторое число (у меня оно хранится в ах) мне нужно поделить на другое число (не больше 8 бит). После выполнения деления хотелось бы сделать
mov f, регистр
, но так же делать нельзя, ведь
Алгоритм работы idiv: (Показать/Скрыть)
Цитата
Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно, и размер его зависит от размера делителя, местонахождение которого указывается в команде: если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah; если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx; если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx;
Автор: IUnknown 13.01.2012 1:28
Цитата
некоторое число (у меня оно хранится в ах) мне нужно поделить на другое число (не больше 8 бит).
Поделил. Частное - в AL, остаток - в AH... Что именно надо занести в f, остаток или частное? Это все-таки целочисленное деление, не забыл? Еще раз: какого типа f? Я не знаю, что такое Float. Real - есть, Single/Double/Extended - есть. Больше ничего нет.
Автор: sheka 13.01.2012 2:00
f типа Real. занести полностью дробное число.
Вот пытался просто вывести на экран:
q,w: shortint; .. idiv cl mov q, al mov w, ah .. writeln('result= ', q, '.', w);
выводит неправильный остаток
Автор: IUnknown 13.01.2012 2:22
Цитата(sheka @ 12.01.2012 21:00)
выводит неправильный остаток
"Не верю" (С)
var q,w: shortint; begin asm xor ax, ax mov ax, 121 mov cl, 10
idiv cl mov q, al mov w, ah end;; writeln('result= ', q, '.', w); end.
Как и ожидалось, "result= 12.1", если поменять делитель на 11 - то выведет "result= 11.0". Что не так?
Проверяй остальные этапы. Здесь все нормально.
Автор: sheka 13.01.2012 2:43
Это я, видите ли, захотел, чтобы мне остаток писало в десятичном виде, цифрами после запятой.
А все же, как записать полученный результат в переменную типа Real? Это же можно как-то сделать?
Автор: IUnknown 13.01.2012 2:50
Можно. Делить не в целочисленных регистрах, а в сопроцессоре: