2009-10-28 59 views
1

我有一个数字存储在DL中,我需要这个数字最多三位数字?这是数字0-9的工作代码。DOS程序集简单的数学

WriteNumber: 
;; print out number in dl 
push ax 
push dx 
add dl,"0" 
mov ah,02h ; printing one char 
int 21h 
pop dx 
pop ax 
ret 

例如,两位数字。我可以采取dl/10。然后打印出结果,其余的打印出不同的字符。但是我得到了一个错误,因为这个数字需要在DIV的AX寄存器中。

我需要这样做:

MOV AX,DL

但是,这是行不通的?

回答

1

我不认为你可以做

mov ax,dl

因为斧头和DL的大小不同。你应该能够做到

mov ax, dx

或GJ:

movzx ax, dl

然后只是参考DL和人,如果你想只是最后一个字节。

+0

我怎么能做到这一点时,INT21读取字符并将其放在一个8位寄存器,DIV只有16位? – Algific 2009-10-28 17:16:17

+0

那么寄存器实际上是32位的,但是你可以通过使用ax,al,ah(而不​​是整个eax)来引用它的一些部分。所以如果你用8位值填充ax寄存器,你应该没问题。 – mrduclaw 2009-10-28 17:21:20

+0

Ahhhh。谢谢。 – Algific 2009-10-28 17:25:30

0

我需要这样做:

MOV AX,DL

但是,这是行不通的?

mov将工作,如果寄存器具有相同的大小,无论是8位或16位或32位。

例子:

mov EAX, EDX 
; or 
mov AX, DX 
; or 
mov AL, DL