繁体   English   中英

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

[英]Translate C code to assembly code?

我必须将此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 ),唯一支持的寄存器有: eaxecxedxebxesiediespebp

您正在请求不存在的寄存器( efx等)。

irmov也用于将立即数操作数(读取的数值为常数)移入寄存器操作数,而您的irmov1 %eax, %efx有两个寄存器操作数。

最后,在计算机软件中,代表数字“一”的字符与代表字母“ L”的字符之间存在巨大差异。 记住你的1和l。 我的意思是irmov1 vs irmovl

延,

首先,Y86没有任何efx,egx和ehx寄存器,这就是为什么当您通过YAS注入代码时得到无效行的原因。

其次,通过使用subl指令减去两个寄存器,并通过jxx指令跳转到Y86 ALU设置的条件代码,可以进行条件分支。

有关详细信息,请访问http://y86tutoring.wordpress.com查看我的博客。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM