gpt4 book ai didi

c - IA32 到 Y86 汇编代码转换

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:07 27 4
gpt4 key购买 nike

我的任务是将 IA32 代码转换为 Y86。原始程序是用 C 语言编写的,旨在获取一个整数数组,其中偶数位置的值调用三个函数之一,奇数位置的值在该函数内进行操作。这些函数包括数字的否定、数字的平方以及从 1 到提供的数字的总和。

大多数指令很容易从 IA32 转换为 Y86,但有一些指令让我很难过。

0000001e <negation>:
1e: 55 push %ebp
1f: 89 e5 mov %esp,%ebp
21: 8b 45 08 mov 0x8(%ebp),%eax
24: f7 d8 neg %eax
26: 5d pop %ebp
27: c3 ret

neg 指令不是 Y86 中的有效指令。这是我在 Y86 中的内容:

# int Negation(int x)
Negation:
pushl %ebp
pushl %esi
rrmovl %esp,%ebp
mrmovl 0x8(%ebp),%eax
irmovl %esi,$0
subl %eax, %esi
rrmovl %esi, %eax
popl %esi
popl %ebp
ret

这是解决这个问题的正确方法吗?

另一条指令是我的 square 函数中的 imul 指令:

00000028 <square>:
28: 55 push %ebp
29: 89 e5 mov %esp,%ebp
2b: 8b 45 08 mov 0x8(%ebp),%eax
2e: 0f af c0 imul %eax,%eax
31: 5d pop %ebp
32: c3 ret

有谁知道在这种情况下如何转换“imul”指令?

感谢您的帮助!任何有关 IA32/Y86 转换的提示也将不胜感激。

最佳答案

为了实现 imul,您可能想看看使用 shift 和 add 例程来实现 mul 例程:

然后对于 imul 只需使用以下步骤:

  • 找出结果应该有什么符号
  • 将操作数转换为绝对值(使用您的取反例程)
  • 对正值调用您的 mul 例程
  • 必要时将结果转换为负值

关于c - IA32 到 Y86 汇编代码转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com