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:code

嵌入彙編實現:blog

注:addl %%ecx,%%ebx 實現的是 %%ebx+=%%ecx,即s+=arr[i]ip

上述代碼是把輸入先放到寄存器中,過程有些複雜,將代碼改進以下:io

遇到的問題及解決:
課堂上沒有作出來是由於題目要求在 main.c 中經過彙編調用 sum,根據以前所學用 int 0x80 實現系統調用,我一直在想怎麼用匯編實現跳轉 sum,而後我傻到本身修改了 eip 的值:asm

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

下課後楊森同窗指出了個人錯誤,而後我又開始思考如何把 for 循環用匯編實現,很遺憾,此問題沒有獲得解決。我如今能作的,就是將 s=s+arr[i] 用匯編實現。循環

如何跳轉 sum 函數以及 如何寫 for 循環,但願老師能幫忙解決一下。gc

相關文章
相關標籤/搜索