gpt4 book ai didi

c - 将 C 代码转换为汇编代码?

转载 作者:行者123 更新时间:2023-12-04 18:17:14 41 4
gpt4 key购买 nike

我必须将此 C 代码转换为汇编代码:

 #include <stdio.h>

int main(){

int a, b,c;
scanf("%d",&a);
scanf("%d",&b);
if (a == b){
b++;
}
if (a > b){
c = a;
a = b;
b = c;
}
printf("%d\n",b-a);
return 0;
}

我的代码在下面,并且不完整。
    rdint %eax        # reading a
rdint %ebx # reading b
irmovl $1, %edi

subl %eax,%ebx
addl %ebx, %edi
je Equal


irmov1 %eax, %efx #flagged as invalid line
irmov1 %ebx, %egx
irmov1 %ecx, %ehx
irmovl $0, %eax
irmovl $0, %ebx
irmovl $0, %ecx

addl %eax, %efx #flagged as invalid line
addl %ebx, %egx
addl %ecx, %ehx



halt

基本上我认为它已经完成了,但是当我尝试运行它时,我在两行标记为无效的旁边发表了评论,但我不确定它们为什么无效。我也不确定如何为 a > b 做一个 if 语句。我可以使用了解 y86 汇编语言的人的任何建议。

最佳答案

从我可以在网上找到的( 12 ),唯一支持的寄存器是:eax , ecx , edx , ebx , esi , edi , esp , 和 ebp .

您正在请求不存在的寄存器(efx 及更多)。

还有irmov用于将立即操作数(读取:常量数值)移动到寄存器操作数中,而您的 irmov1 %eax, %efx有两个寄存器操作数。

最后,在计算机软件中,表示数字“一”的字符和表示字母“L”的字符之间存在巨大差异。注意你的 1 和 l。我的意思是 irmov1对比 irmovl .

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

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