计算汇编中数组元素的数量

时间:2013-05-22 16:10:01

标签: arrays assembly x86

我从键盘读取一个数字并将其存储在一个名为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'这行没有效果。

2 个答案:

答案 0 :(得分:3)

在行add bx, ax中,似乎尚未定义高位字节ah。我建议将axah设置为0

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

答案 1 :(得分:1)

我错误地使用了MUL指令。 修改了程序,它可以工作:

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和BX寄存器改变了它们的含义。 AX将存储号码,BX仅用于MUL。