SOGO論壇
  登入   註冊   找回密碼
查看: 642|回覆: 0
列印 上一主題 下一主題

[技術文章] GNU 組合語言 [複製連結]

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-9 09:32:22 |只看該作者 |倒序瀏覽
我們利用 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 等環境,開發組合語言程式。
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-11-5 16:09

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部