2

我在将 8 位寄存器移动到 16 位寄存器时遇到问题。

我想要做的是将一个数字反复除以 10 直到它小于 10,并且,在每个除法时间内,我尝试将除法的剩余部分从 AH 寄存器中移出,将 48 添加到它,然后我可以有它的 Ascii 代码,然后我尝试在屏幕上显示我得到的数字。

 Num1 DW 255
 DIVISION :
        CMP NUM1,10
            Jl DIVEND
            
        MOV AX,10
        DIV NUM1
        MOV NUM1,AL    ;*  Operand types do not match
    
        
        ADD AH,48
        MOV DL,AH; 
        MOV AH,02H
        INT 21H
        
    JMP DIVISION

但是,当我试图组装它时,它会Operand types do not match在 *.

我正在使用 turbo 汇编器 V4.1 ...

4

2 回答 2

2

至于标题中更一般的问题:您对无符号值使用movzx(移动零扩展),对有符号值使用movsx(移动符号扩展)。

于 2013-10-15T00:56:51.860 回答
0

你是那个意思吗?

mov bx, Offset Num1 
mov [bx], al

您得到的错误是因为您声明了一个单词但将其作为一个字节来处理。如果你做了 Num1 db 它也可以。

使用 TASM 4.1 测试

于 2013-05-04T10:13:32.080 回答