32組合語言程式說明 第乙個組合語言程式

2021-10-14 16:15:17 字數 1262 閱讀 8587

組合語言以隱晦難懂而著名,但是本教程從另乙個角度來看它——它是一種幾乎提供了全部資訊的語言。程式設計師可以看到正在發生的所有事情,甚至包括 cpu 中的暫存器和標誌!但是,在擁有這種能力的同時,程式設計師必須負責處理資料表示的細節和指令的格式。程式設計師工作在乙個具有大量詳細資訊的層次。現在以乙個簡單的組合語言程式為例,來了解其工作過程。程式執行兩個數相加,並將結果儲存在暫存器中。程式名稱為 addtwo:

main proc    mov eax, 5               ;將數字 5 送入 eax 暫存器    add eax, 6               ;eax 暫存器加 6    invoke exitprocess, 0    ;程式結束main endp
現在按照一次一行**的方法來仔細檢視這段程式:大家可能已經注意到了程式中包含的注釋,它總是用分號開頭。程式的頂部省略了一些宣告,稍後會予以說明,不過從本質上說,這是乙個可以用的程式。它不會將全部資訊顯示在螢幕上,但是借助工具程式偵錯程式的執行,程式設計師可以按一次一行**的方式執行程式, 並檢視暫存器的值。

新增乙個變數

現在讓這個程式變得有趣些,將加法運算的結果儲存在變數 sum 中。要實現這一點,需要增加一些標記,或宣告,用來標識程式的**和資料區:

.data                          ;此為資料區sum dword 0                    ;定義名為sum的變數.code                          ;此為**區main proc    mov eax,5                  ;將數字5送入而eax暫存器    add eax,6                  ;eax暫存器加6    mox sum,eax    invoke exitprocess,0       ;結束程式main endp
變數 sum 在第 2 行進行了宣告,其大小為 32 位,使用了關鍵字 dword。組合語言中有很多這樣的大小關鍵字,其作用或多或少與資料型別一樣。

但是與程式設計師可能熟悉的型別相比它們沒有那麼具體,比如 int、double、float 等等。這些關鍵字只限制大小,並不檢查變數中存放的內容。記住,程式設計師擁有完全控制權。順便說一下,那些被 .code 和 .data 偽指令標記的**和資料區,被稱為段。即,程式有**段和資料段。

組合語言第乙個程式

接下來,我們開始真正學寫匯程式設計序,前面都是鋪墊知識,我和大家一起學習,如果 講的不好或講錯了,謝謝大家幫我指出。assume cs codesg codesg segment mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h i...

組合語言 筆記 第乙個程式

程式 4.1 assume cs code code segment mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21h code ends end偽指令是由編譯器執行的指令 程式4.1 現的偽指令有 源程式檔案中所有...

組合語言03 第乙個匯程式設計序

整理自魚c論壇課件 匯程式設計序編寫步驟 編寫源 使用masm.exe進行編譯,產生目標檔案 用link.exe,對目標檔案進行鏈結,生成可執行檔案 可執行檔案中包含兩部分內容 1,程式和資料 2,相關的描述資訊 程式有多大,要占用多少記憶體空間等 源程式 assume cs abc abc seg...