SOGO論壇
標題:
GNU 組合語言
[列印本頁]
作者:
mm117777
時間:
2012-7-9 09:32:22
標題:
GNU 組合語言
我們利用 main.c 這個主程式,呼叫組合語言中的 asmMain() 函數,然後利用 gcc 將兩者連結為執行檔,以便能印出組合語言的執行結果。
C 語言主程式: main.c
#include <stdio.h>
int main(void) {
printf("eax=%d\n", asmMain());
}
組合語言程式: gnu_add.s
.text
.globl _asmMain
.def _asmMain; .scl 2; .type 32; .endef
_asmMain:
movl $1, %eax
addl $4, %eax
subl $2, %eax
ret
編譯與執行過程
C:\ccc\SP\code\ch03>gcc main.c gnu_add.s -o add
C:\ccc\SP\code\ch03>add
asmMain()=3
如果我們將組合語言換成下列的 sum.s 程式,那麼就可以印出 1+2+…+10 的結果。
.data
sum: .long 0
.text
.globl _asmMain
.def _asmMain; .scl 2; .type 32; .endef
_asmMain:
mov $1, %eax
FOR1:
addl %eax, sum
addl $1, %eax
cmpl $10,%eax
jle FOR1
movl sum, %eax
ret
結語
本文示範了如何使用 C 語言呼叫組合語言函數的方法,並利用此種方法繞過了直接組合語言的困難,讓組合語言的撰寫者可以在微軟的視窗系統上,利用 Cygwin 或 MinGW 等環境,開發組合語言程式。
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM