我从键盘读取一个数字并将其存储在一个名为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'这行没有效果。
答案 0 :(得分:3)
在行add bx, ax
中,似乎尚未定义高位字节ah
。我建议将ax
或ah
设置为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。