2

我从键盘读取了一个数字并将其存储在一个名为 buf 的数组中。我在 len 变量中也有数组的长度。

我现在正在尝试从该数组中计算数字。我的代码是这样的:

   xor si, si
   xor bx, bx ; made them 0 
   start_for:
    cmp si, len
    je end_for
    mul bx, 10 ; I think here is the problem! 
    mov al, buff[si]  
    sub al, '0'
    add bx, ax
    inc si
    jmp start_for

   end_for:

问题是什么?

我在调试时注意到 'mul bx, 10' 行没有效果。

4

2 回答 2

3

在该行add bx, ax中,似乎ah尚未定义高字节。我建议设置axah0

此外,i86 可能不会将“mul”产品放在您认为的位置。即使使用 BX 操作数,乘积也可能在 DX:AX 中。建议在您的代码中交换使用 AX 和 BX。让 AX 成为您的最终产品,并 bx 您的个位数价值。

于 2013-05-22T16:14:47.070 回答
1

I was incorrectly using the MUL instruction. Modified the program and it works:

xor si, si
xor ax, ax        

   start_for:
    cmp si, len
    je end_for 
    mov bx, 10
    mul bx ; This means AX = AX * BX (for 8 bit operands)
    mov bh, 0 
    mov bl, buff[si]  
    sub bl, '0'
    add ax, bx
    inc si
    jmp start_for

   end_for:  

AX and BX registers changed their meaning. AX will store the number and BX is used only for MUL.

于 2013-05-22T16:45:08.103 回答