《intel組合語言程式設計》 第三章記錄

2021-07-15 16:46:43 字數 1901 閱讀 4161

程式一:

title add and subtract

; this program adds and subtracts 32-bit integers.

; last update: 06/01/2006

include irvine32.inc

.data

num dword 0ffffff9ch

.code

main proc

mov    eax, num        ;  eax = 10000h

add    eax,40000h        ; eax = 50000h

sub    eax,20000h        ; eax = 30000h

call    dumpregs

exit

main endp

end main

程式二 :

title add and subtract

; this program adds and subtracts 32-bit integers.

; last update: 06/01/2006

.386

.model flat,stdcall

.stack 4096

exitprocess proto, dwexitcode:dword ;宣告之後不需要使用include了

dumpregs proto ;宣告之後不需要使用include了

.data

num dword 0ffffff9ch

.code

main proc

mov    eax, num        ;  eax = 10000h

add    eax,40000h        ; eax = 50000h

sub    eax,20000h        ; eax = 30000h

call    dumpregs

invoke  exitprocess, 0

main endp

end main

為什麼可以引用exitprocess 和 dumpregs呢,因為在vs2010中匯入了依賴庫路徑,和 依賴庫檔案(*.lib,kernel32.lib,irvine32.lib)。看到函式宣告(irvine32.inc中,或者是proto偽指令宣告)後,編譯器為該函式的呼叫留出乙個位置;在鏈結器工作的時候,尋找lib,尋找匯出函式名=該函式的lib,將預留的函式位址寫進去。

程式三:

title add and subtract

; this program adds and subtracts 32-bit integers.

; last update: 06/01/2006

.386

.model flat,stdcall

.stack 4096

exitprocess proto, dwexitcode:dword

dumpregs proto

.data

num dword 0ffffff9ch

snum byte 21 dup('a')

bnum dword 1,2,3,4,5,6,7

.code

main proc

mov ebx, 0

mov ebx, bnum+8

call    dumpregs

invoke exitprocess, 0

main endp

end main

1:定義在.data中的資料在data區段內,並且連續,而且沒有4位元組對齊

2:mov ebx, bnum+8,這個8是位元組,so ebx=3

在xp中,記憶體中和pe檔案中是一樣的,但在windows 7下,由於alsr的關係,記憶體中的該指令的位址和檔案中就不一樣了。

組合語言 第三章

1.記憶體中字的儲存 2.ds暫存器 8086cpu自動取ds中的資料為記憶體單元的段位址,並且ds的值並不能直接賦給,要先將值賦給乙個一般暫存器進行中轉,在傳入ds中。3.mov,add,sub命令。mov 賦值。mov指令中只給出單元的偏移位址,段位址預設存在ds中。add 將後面的資料加到前面...

組合語言第三章總結

如何看待 記憶體 可以存放資料 資料段 自己定義的資料 可以存放指令 指令段 自己定義的指令 可以定義成棧空間 棧段 臨時存放資料 那麼如何讓 cpu 按照我們的意願去訪問記憶體?對於資料段,我們需要有段位址 偏移位址,目前段位址暫存器只學過 ds 暫存器,偏移位址只學過 0 1 進行訪問 對於指令...

C 語言程式設計 第三章

函式呼叫 呼叫函式前要宣告函式原型 型別識別符號 被呼叫函式名 含型別說明的形參表 呼叫形式 函式名 實參列表 函式的遞迴呼叫 函式直接或間接呼叫自身 函式的引數傳遞 1.在函式被呼叫時才分配形參的儲存單元 2.實參可以是常量 變數或表示式 3.實參型別必須與形參相符 如果不相符,編譯器會先進行型別...