Arrays 从数组';装配中的s元素
我从键盘上读取一个数字,并将其存储在一个名为buf的数组中。在len变量中还有数组的长度 我现在正试图从这个数组中计算出这个数。我的代码是:Arrays 从数组';装配中的s元素,arrays,assembly,x86,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' a
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”无效。在行
add bx,ax
中,上层字节ah
似乎尚未定义。我建议将ax
或ah
设置为0
此外,i86可能不会将“mul”产品放在您认为的位置。即使使用BX操作数,乘积也可以是DX:AX格式。建议在代码中交换使用AX和BX。让AX作为最终产品,bx作为一位数值。在添加bx,AX行中,似乎还没有定义高位字节
ah
。我建议将ax
或ah
设置为0
此外,i86可能不会将“mul”产品放在您认为的位置。即使使用BX操作数,乘积也可以是DX:AX格式。建议在代码中交换使用AX和BX。让AX为最终产品,bx为单位数字值。我没有正确使用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。我使用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。照此,您的号码在溢出之前只能增长到65535-这是您遇到的问题吗?您的代码是否适用于较小的数字?不,它不适用于数组中任何数量的条目。下面答案中的ah问题也是一个很好的提示。照此,您的数字在溢出之前只能增长到65535-这就是您遇到的问题吗?您的代码是否适用于较小的数字?不,它不适用于数组中任何数量的条目。下面答案中的ah问题也是一个很好的提示。我定义了它,但它仍然不起作用。它只计算元素的和,bx的乘法没有效果。我定义了它,但它仍然不起作用。它只计算元素的和,bx的乘法没有效果。