2009-10-28 87 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