zoukankan      html  css  js  c++  java
  • 2017-2018-1 20179202第三周汇编混合编程分析总结

    sum.c 文件为:

    #include<stdio.h>
    int sum(int N,int arr[])
    {
            int s=0;
            int i;
            for(i=0;i<N;i++)
               s+=arr[i];
            return s;
    }
    

    用objdump -d sum.o 反汇编 sum.o:

    嵌入汇编实现:

    注:addl %%ecx,%%ebx 实现的是 %%ebx+=%%ecx,即s+=arr[i]

    上述代码是把输入先放到寄存器中,过程有些复杂,将代码改进如下:

    遇到的问题及解决:
    课堂上没有做出来是因为题目要求在 main.c 中通过汇编调用 sum,根据之前所学用 int 0x80 实现系统调用,我一直在想怎么用汇编实现跳转 sum,然后我傻到自己修改了 eip 的值:

    asm volatile(
            "movl %2,%%ecx
    	"
            "movl %1,%%ebx
    	"
            "movl $8b450c,%%eip"
    	"
    		:"=a"(s) 
    		:"b"(s),"c"(argc)
    		);
    	}
    

    下课后杨森同学指出了我的错误,然后我又开始思考如何把 for 循环用汇编实现,很遗憾,此问题没有得到解决。我现在能做的,就是将 s=s+arr[i] 用汇编实现。

    如何跳转 sum 函数以及 如何写 for 循环,希望老师能帮忙解决一下。

  • 相关阅读:
    第三次博客作业
    多项式求导--三次作业小结
    Python实现批量修改文件名
    汉字编程 —— 第一次个人编程作业
    PAT甲级代码仓库
    谈谈自己 —— 第一次博客作业
    爬取豆瓣网图书TOP250的信息
    HDU1862
    HDU1408
    HDU1302
  • 原文地址:https://www.cnblogs.com/Jspo/p/7822914.html
Copyright © 2011-2022 走看看