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

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

Форум «Всё о Паскале» _ Ассемблер _ Вывод Числа На Экран

Автор: Игорь 29.09.2010 19:21

Пытаюсь сделать процедуру вывода числа в десят. представлении на экран. Делю, кладу в стек, достаю в обратном порядке. Проблема в том, что при запуске из 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
;----------------------------------------------------------

Автор: TarasBer 29.09.2010 20:52

При делении в ax пишется частное, в dx пишется остаток.

Автор: volvo 29.09.2010 21:52

Вот тут посмотри реализацию: http://forum.pascal.net.ru/index.php?s=&showtopic=22881&view=findpost&p=127930 (там все прокомментировано, что куда и зачем, под FASM прекрасно собирается)

Автор: Игорь 29.09.2010 23:34

Cпасибо, с делением разобрался. Подскажите только как результат на экран вывести. Я пробовал mov ah,08h
int 21h и int 29h в TD оба нормально, а вот в Windows либо виснет, либо вообще не запускается.

Автор: volvo 29.09.2010 23:41

Что именно не запускается? Ты как запускаешь? Вот это:
Прикрепленное изображение
, например, прекрасно работает. Под windows. Но из консоли... Вызывается - вот так:

use16
org 100h
mov ax,4321
call writeDEC
mov ax, 4c00h
int 21h

Автор: Игорь 30.09.2010 17:01

Готово. Надо было просто обнулить сх в начале программы.