【问题标题】:Computing the number from array's elements in assembly从汇编中的数组元素计算数字
【发布时间】:2013-05-22 16:10:01
【问题描述】:

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

【问题讨论】:

  • 按原样,您的号码在溢出之前只能增长到 65535 - 这是您遇到的问题吗?您的代码是否适用于较小的数字?
  • 不,它不适用于数组中的任意数量的条目。
  • 下面答案中的啊问题也是一个很好的提示。

标签: arrays assembly x86


【解决方案1】:

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

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

【讨论】:

  • 我定义了它,但它仍然不起作用。它只计算元素的和,bx 的乘法没有效果。
【解决方案2】:

我错误地使用了 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多