zoukankan      html  css  js  c++  java
  • 2.4 OpenEuler中C语言中的函数调用测试(选做)

    一、任务详情

    1.  在X86_64架构下实践2.4中的内容
    2. 通过GDB查看寄存器的内容,把教材中的图填入具体的值
    3. 把2.4的C代码在OpenEuler中重新实践一遍,绘制出ARM64的逻辑框图
    4. 实验内容要经过答辩才能得到相应分数

    二、具体实现

    • 2.4.1
    • #include <stdio.h>
      main()
      {
      int a,b,c;
      a=1;b=2;c=3;
      c=sub(a,b);
      printf("c=%d\n",c);
      }
      int sub(int x,int y)
      {
      int u,v;
      u=4;v=5;
      return x+y+u+v;
      }

    • 运行结果:
    • 使用gcc -g sub.s -o sub将sub.s进行编译,可以通过cgdb sub直接对汇编代码进行调试,查看。

       gdb:

    •  教材里的图:

    •  这个时候,PC为0x55555555517e,SP为0x7fffffffe020                                                                                                      

    • 2.4.2
    • #include<stdio.h>
      #include<setjmp.h>
      jmp_buf env;

      int main()
      {
      int r,a=100;
      printf("call setjmp to save environmen\n");
      if((r=setjmp(env))==0){
      A();
      printf("normal return\n");
      }
      else
      printf("back to main() via long jump,r=%d,a=%d",r,a);
      }

      int A()
      {
      printf("enter A()\n");
      B();
      printf("exit A()\n");

      }

      int B()
      {
      printf("enter B()\n");
      printf("long jump?(y|n) ");
      if(getchar()=='y')
      longjmp(env,1234);
      printf("exit B()\n");
      }

    • 运行结果
    • gdb:

    •  教材中的图

    •  此时,PC为0x5555555551f4,SP为0x7fffffffe020

      • 2.4.3
      • #include <stdio.h>
        int sub(int a, int b, int c, int d, int e, int f, int g, int h)
        {
        int u, v, w;
        u = 9;
        v = 10;
        w= 11;
        return a+g+u+v;
        }

        int main()
        {
        int a, b, c, d, e,f, g, h,i;
        a = 1;
        b = 2;
        c = 3;
        d = 4;
        e = 5;
        f = 6;
        g = 7;
        h = 8;
        i = sub(a,b,c,d,e,f,g,h);
        }

      • 编译t.c并生成64位汇编的t.s文件并删除非必要行:
  • 相关阅读:
    BZOJ 1002 轮状病毒
    poj_1952最大下降子序列,统计个数
    poj_3468线段树成段更新求区间和
    hdu_4707
    uva_644暴力加字典树解法
    正则表达式:处理文本内容中特定的字符串
    grep:文本搜索工具
    分析文本的工具:wc,sort,uniq,diff和patch
    按列抽取文本cut和合并文件paste
    显示文本前或后行内容:head,tail
  • 原文地址:https://www.cnblogs.com/lxhs/p/15712827.html
Copyright © 2011-2022 走看看