Пытаюсь сделать процедуру вывода числа в десят. представлении на экран. Делю, кладу в стек, достаю в обратном порядке. Проблема в том, что при запуске из TurboDebugger'a при делении в ax почему-то 0 ,а в dx вообще ерунда какая-то.
use16
org 100h
mov ax,4321
call WPrint
mov ax,4c00h
int 21h
;----------------------------------------------------------
WPrint: ; ax:выводимое слово или байт
push ax ; \
push cx ; | сохранение регистров которые будут использоваться
push dx ; /
Divizion:
xor dx,dx
div word[10]
push dx
inc cx
cmp ax,0
jnz Divizion
mov ah,02h ; подготовка прерывания
Print:
pop dx
add dl,48
int 21h
loop Print
pop dx ; \
pop cx ; | восстановление регистров
pop ax ; /
ret
;----------------------------------------------------------
При делении в ax пишется частное, в dx пишется остаток.
Вот тут посмотри реализацию: http://forum.pascalnet.ru/index.php?s=&showtopic=22881&view=findpost&p=127930 (там все прокомментировано, что куда и зачем, под FASM прекрасно собирается)
Cпасибо, с делением разобрался. Подскажите только как результат на экран вывести. Я пробовал mov ah,08h
int 21h и int 29h в TD оба нормально, а вот в Windows либо виснет, либо вообще не запускается.
Что именно не запускается? Ты как запускаешь? Вот это:
, например, прекрасно работает. Под windows. Но из консоли... Вызывается - вот так:
use16
org 100h
mov ax,4321
call writeDEC
mov ax, 4c00h
int 21h
Готово. Надо было просто обнулить сх в начале программы.