免費電子書 -- 組合語言

組合語言

簡介

處理器

BIOS

啟動程式

微軟

組譯器

組合語言

DOS

Windows

VisualStudio

GNU

GNU 組譯器

C 轉組語

連結 C 語言

嵌入 C 語言

訊息

相關網站

參考文獻

最新修改

簡體版

English

在電腦越來越發達的時代,程式設計師與組合語言的距離就越來越遠了,這往往讓我們不知道如何在個人電腦上撰寫組合語言。對於那些曾經碰過 DOS 系統的人而言,撰寫組合語言是常見的事情,但是自從 Windows 加入保護功能之後,這些 DOS 的組合語言就再也不能執行了,要在 Windows 系統下撰寫組合語言,成了一種很少人會的絕技。

其實,要在個人電腦的 MS. Windows 系統上撰寫組合語言,並不是那麼困難的,只要您善用組合語言的開發工具,像是微軟的 ml.exe (俗稱 MASM),以及 GNU 的 gcc、as 等程式,就可以在 MS. Windows 系統中撰寫 x86 平台的組合語言了。

但必須注意的是,在 MS. Windows 系統上撰寫組合語言時,不要再採用過去在 DOS 當中所使用的方式,用 int 10h 呼叫 BIOS 中斷,或者用 int 21h 執行 DOS 的系統呼叫,這些都是不正確的方式。如果您採用微軟的 ml 組譯器,請連結微軟系統中的 LIBCMT 函式庫,其中有 C 語言所使用的 printf 函數,直接透過這個函數進行輸出入即可,以下是筆者所撰寫的組合語言程式,可以計算並印出 1+2+…+10 的結果。

範例一:計算 1+2+…+10

.386
.model    flat
INCLUDELIB LIBCMT
printf PROTO C, format:PTR BYTE, args:VARARG
.data
sum DWORD 0
formatStr BYTE "sum=%d", 0dh, 0ah, 0
PUBLIC    _main
.code
_main    PROC
    MOV eax, 1
FOR1:
    ADD sum, eax
    ADD eax, 1
    CMP eax, 10
    JLE FOR1
    INVOKE printf, ADDR formatStr, sum
    ret    0
_main    ENDP
END

執行結果

D:\code\ASM>ml sum.asm
Microsoft (R) Macro Assembler Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

 Assembling: sum.asm
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

/OUT:sum.exe
sum.obj

D:\code\ASM>sum
sum=55

結語

這樣撰寫組合語言,其實就相當的輕鬆愉快了,學習組合語言也不再是一個神祕的技巧,只要拋棄過去在 DOS 時代所養成的習慣就行了。在 MS Windows 系統當中,不要再堅持自己用 int 10h 等中斷呼叫進行輸出入了,如此反而能真正學習到組合語言的精神與技巧,不是嗎?

陳鍾誠 於 金門大學 2010 年 10 月 12 日

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License