- 註冊時間
- 2006-10-8
- 最後登錄
- 2019-6-20
- 主題
- 查看
- 積分
- 1306
- 閱讀權限
- 110
- 文章
- 1393
- 相冊
- 0
- 日誌
- 1
狀態︰
離線
|
我們利用 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 等環境,開發組合語言程式。 |
|