Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Вывод числа на FASM из 16 битного регистра.


Автор: KPEHDEL 10.11.2010, 18:22
Здравствуйте. Написал программу на fasm которая делит число 1234 из регистров и посимвольно выволит:
Код

org 0x100

mov ax,1234
mov ch,10

l1:
div ch   ;Делим
mov bh,al      ;Кладём в bh

mov dl,ah
add dl,48      ;Прибовляем 0
mov ah,2
int 0x21


mov al,bh
mov ah,0
cmp al,0
ja l1


mov ah,8
int 21h
mov ah,0x4c
int 21h

msg db 10 dup ?,'$' ;отводим пустые байты                               

Теперь задача такова, нужно написать 16 битное деление, то есть сейчас используется 8 битный регистр, и программа не выведит число более 2300. Для этого нам нужно использовать деление dx:ax.
Пишу так:
Код

org 0x100

mov dx,1234
mov ax,10

l1:
div ax   ;Делим
mov bh,al      ;Кладём в bh

mov dl,ah
add dl,48      ;Прибовляем 0
mov ah,2
int 0x21


mov al,bh
mov ah,0
cmp al,0
ja l1


mov ah,8
int 21h
mov ah,0x4c
int 21h

msg db 10 dup ?,'$' ;отводим пустые байты                               

Это не правильный вариант, пожалуйста помогите написать правильно и понять.

Автор: tester3000 21.11.2010, 16:52
div помещает в ax частное а в dx остаток 
Код

mov ax,1234h ; делимое
mov bx,10h     ; делитель 
cdq                  ; обнуляем dx
div bx              ; результат в dx:ax  (ax=0123h dx=0004h)   



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)