2013-05-04 161 views
2

我想知道的是很明顯的話題。 我有問題移動8位寄存器到16位寄存器。 我想要做的是,將一個數字永久除以10,直到它低於10, ,並且在每個分割時間內,我嘗試從ah寄存器中移出餘下的部分,添加48到它,然後我可以有它的Ascii代碼,然後我試着在屏幕上顯示我的數字。 這裏是代碼:彙編,將一個8位寄存器移到一個16位寄存器,怎麼樣?

Num1 DW 255 
DIVISION : 
     CMP NUM1,10 
      Jl DIVEND 

     MOV AX,10 
     DIV NUM1 
     MOV NUM1,AL ;* 


     ADD AH,48 
     MOV DL,AH; 
     MOV AH,02H 
     INT 21H 

    JMP DIVISION 

但是,當我嘗試組裝它,它說,操作數類型不匹配由*指示線。 即時通訊使用turbo彙編程序V4.1 ... 我該怎麼辦?

+0

從Turbo Assembler中不能記得很多東西,但是你試過'MOV BYTE NUM1,AL'嗎? – 2013-05-04 08:34:26

+1

我不明白你在做什麼MOV NUM1,AL正在將AL的內容移動到NUM1中?這不可能發生嗎? – 2013-05-04 08:36:47

+0

@PreetSangha對,我錯過了完全只看語法:) – 2013-05-04 08:37:53

回答

0

你的意思是?

mov bx, Offset Num1 
mov [bx], al 

你得到的錯誤是因爲你聲明瞭一個單詞,但將它作爲一個字節來處理。如果你做Num1分貝它也可以。

測試與TASM 4.1

+0

謝謝,它工作... – user1547062 2013-05-04 14:52:51

2

至於標題更普遍的問題:您使用movzx(移動零擴展)無符號值和符號值movsx(移動符號擴展)。

相關問題