Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从数组';装配中的s元素_Arrays_Assembly_X86 - Fatal编程技术网

Arrays 从数组';装配中的s元素

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

我从键盘上读取一个数字,并将其存储在一个名为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”无效。

在行
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的乘法没有效果。