組合語言小節(1)

2021-04-07 12:34:36 字數 930 閱讀 4597

「作為一名合格的程式設計師,組合語言的知識是必不可少的。」

1、intel彙編與at&t格式的彙編不同之處也知道也寫,今天看到一條以前沒見過的:

(變數)符號的位址以「$」開頭,注意是變數的位址。

movl $var,%ebx

區別:movl var,%ebx

2、函式呼叫過程中,關於引數壓棧,和返回後執行指令的位址。

偽碼:.globl fun

.type fun,@function

fun:

pushl %ebp

movl %esp,%ebp

subl $4,%esp

movl 8(%ebp),%eax

movl %eax,-4(%ebp)

movl $3,8(%ebp)

mov $4,12(%ebp)

.globl main

.type main,@function

main:

movl $100,(%esp)

movl $200,4(%esp)

call fun

movl $0,%eax

上面**中,由於4(%ebp)中放置的是從fun函式返回後執行的第1條指令的位址(該位址由「call fun」自動壓棧),所以在fun函式中取兩個引數時的位址時是

movl $3,8(%ebp)

mov $4,12(%ebp)。

3、在函式呼叫過程中,為什麼不直接使用esp定址棧裡面的資料,而要先儲存ebp,在用ebp存放esp,在通過ebp來定址?

其實直接用esp定址也是可以的,只是gcc預設輸出的彙編**是用ebp定址,而用esp勾畫整個函式的棧空間。這樣**比較清晰。如果要追求高效,如在編譯linux核心時,其內部函式就是直接用esp定址的。可以用編譯選項指示gcc直接用esp定址:

$gcc -fomit -frame -poin

組合語言 1

程式語言 組合語言 assembly language 是一種用於電子計算機 微處理器 微控制器或其他可程式設計器件的低階語言,亦稱為符號語言。在組合語言中,用助記符 mnemonics 代替機器指令的操作碼,用位址符號 symbol 或標號 label 代替指令或運算元的位址。在不同的裝置中,組合...

大話組合語言 1

哎喲,哥們兒,還搗鼓彙編呢?那東西沒用,兄弟用vb 釣 乙個api就夠你忙活個十天半月的,還不一定搞出來。此君之言倒也不虛,那吾等還有無必要研他一究呢?廢話,當然有啦!要不然你寫這篇文章幹嘛。別急,別急,讓我把這個中原委慢慢道來 一 所有電腦語言寫出的程式執行時在記憶體中都以機器碼方式儲存,機器碼可...

《組合語言》筆記(1)

說好的學彙編開始了。筆記走起 本書的環境都是8086,8086有14個16位暫存器,有20位位址匯流排,定址能力1mb。16位資料匯流排。組合語言主要是一系列彙編指令,彙編指令就是將機器碼變成了人便於記憶的指令,與01相比,mov,loop更直觀。除了彙編指令,組合語言還包括了偽指令 沒有對應的機器...