Помощь - Поиск - Пользователи - Календарь
Полная версия: idiv asm-вставка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sheka
Каким образом можно получить результат
idiv bl
в переменную
f: float;
т.е. как его "собрать" из частей?
IUnknown
Что такое переменная типа Float? Нет в Паскале такого типа... smile.gif

Приводи чуть больше кода, что за операнды, что на что ты делишь и почему надо собирать из частей, когда можно либо потом перенести число в вещественную переменную, либо сразу задействовать сопроцессор и работать с вещественной переменной?
sheka
Тяжелый вопрос. Все что могу сказать, так это то, что некоторое число (у меня оно хранится в ах) мне нужно поделить на другое число (не больше 8 бит). После выполнения деления хотелось бы сделать
mov f, регистр
, но так же делать нельзя, ведь
Алгоритм работы idiv: (Показать/Скрыть)
IUnknown
Цитата
некоторое число (у меня оно хранится в ах) мне нужно поделить на другое число (не больше 8 бит).
Поделил. Частное - в AL, остаток - в AH... Что именно надо занести в f, остаток или частное? Это все-таки целочисленное деление, не забыл? Еще раз: какого типа f? Я не знаю, что такое Float. Real - есть, Single/Double/Extended - есть. Больше ничего нет.
sheka
f типа Real. занести полностью дробное число.

Вот пытался просто вывести на экран:
q,w: shortint;
..
idiv cl
mov q, al
mov w, ah
..
writeln('result= ', q, '.', w);

выводит неправильный остаток
IUnknown
Цитата(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
Это я, видите ли, захотел, чтобы мне остаток писало в десятичном виде, цифрами после запятой. smile.gif

А все же, как записать полученный результат в переменную типа Real? Это же можно как-то сделать?
IUnknown
Можно. Делить не в целочисленных регистрах, а в сопроцессоре:

fild делимое_целое
fidiv делитель_целое
fstp f
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.