【问题标题】:Return 64 bits by sum of 32 bits variable通过 32 位变量的总和返回 64 位
【发布时间】:2015-10-17 17:54:06
【问题描述】:

我正在与 assebmly IA32 合作,由于我没有经验,因此对此我有一些疑问。 我想做这样的事情: A + B(均为 32 位)。 该函数重新生成一个 64 位的值。 请不要让我很难理解这一点。 谢谢!!!!

【问题讨论】:

  • movl a, %eax; addl b, %eax; subb %edx, %edx; negl %edx; ret; 应该为unsigned 做。签名留给您作为练习。
  • 先展示你的尝试。如果它不能正常工作,我们会帮助您修复它。
  • 完成,对此感到抱歉:D

标签: assembly x86


【解决方案1】:

我这样做了(我真的不认为这是正确的),抱歉 cmets 是葡萄牙语 .section .data

.global op1
.global op2

.section .text

.global soma

soma:

    movl op1, %eax  # move op1 para o registo %eax

    movl op2, %ebx # move op2 para o registo %ebx

    addl %ebx, %eax # adiciona %ebx a %eax e guarda em %eax

    movl $0, %edx;

    # jump if carry
    jc output_com_carry

    jmp fim

output_com_carry:

    movl $1, %edx

    jmp fim

fim:


ret

【讨论】:

  • 您的解决方案是正确的,但为了清楚起见,您可以简化代码。如果指令movl $1, %edx 上没有没有进位,则跳转。跳到紧随其后的标签也有点多余。而且您不必将 op2 放入 EBX 寄存器中。您可以直接将op2添加到EAX寄存器中。
猜你喜欢
  • 2016-01-12
  • 2020-06-18
  • 1970-01-01
  • 2016-09-30
  • 2012-10-26
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多