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

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

Форум «Всё о Паскале» _ Задачи _ idiv asm-вставка

Автор: sheka 12.01.2012 21:40

Каким образом можно получить результат

idiv bl
в переменную
f: float;
т.е. как его "собрать" из частей?

Автор: IUnknown 12.01.2012 23:37

Что такое переменная типа Float? Нет в Паскале такого типа... smile.gif

Приводи чуть больше кода, что за операнды, что на что ты делишь и почему надо собирать из частей, когда можно либо потом перенести число в вещественную переменную, либо сразу задействовать сопроцессор и работать с вещественной переменной?

Автор: sheka 13.01.2012 0:08

Тяжелый вопрос. Все что могу сказать, так это то, что некоторое число (у меня оно хранится в ах) мне нужно поделить на другое число (не больше 8 бит). После выполнения деления хотелось бы сделать

mov f, регистр
, но так же делать нельзя, ведь
Алгоритм работы idiv: (Показать/Скрыть)

Автор: 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

Это я, видите ли, захотел, чтобы мне остаток писало в десятичном виде, цифрами после запятой. smile.gif

А все же, как записать полученный результат в переменную типа Real? Это же можно как-то сделать?

Автор: IUnknown 13.01.2012 2:50

Можно. Делить не в целочисленных регистрах, а в сопроцессоре:

fild делимое_целое
fidiv делитель_целое
fstp f