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