2013-05-04 193 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(移动符号扩展)。