一個(gè)匯編程序示例

; 給開發(fā)人員看的偽指令茫多。 code(也可以命名為其他)表示cs ......
assume cs:code, ds:data, ss:stack

; 棧段
stack segment
    ;100個(gè)單位的數(shù)據(jù) 并且全都賦值為0
    db 100 dup(0)
stack ends  

; 數(shù)據(jù)段
data segment  
    db 100 dup(0) 
data ends

; 代碼段
code segment
; 程序的入口
start:
    ; 手動(dòng)將data和stack賦值給寄存器ds和ss天揖,而cs不需要賦值因?yàn)樵趀nd 的時(shí)候告訴編譯器start是程序的入口跪帝,所以code就是代碼段。
    mov ax, data
    mov ds, ax
    mov ax, stack
    mov ss, ax 
    
    ; 給寄存器賦值
    mov si, 1
    mov di, 2
    mov bx, 3 
    mov bp, 4
    
    ; 將1伞剑,2作為參數(shù)入棧 棧頂指針sp-4
    push 1
    push 2 
    ; 調(diào)用sum函數(shù),此時(shí)會(huì)自動(dòng)入棧sum函數(shù)之后的即將執(zhí)行的下一條指令的地址sp-2
    call sum 
    ; 平棧
    add sp, 4 
    
   ; 代碼執(zhí)行結(jié)束 int 是終端指令 當(dāng)為21h的時(shí)候并且ah為4c的時(shí)候表示程序執(zhí)行結(jié)束
    mov ax, 4c00h
    int 21h 

; sum函數(shù)   
sum:
    ; bp的地址入棧 以保存bp的原始值
    push bp
    ; bp保存sp的值
    mov bp, sp
    ; sp-10 空出10個(gè)字節(jié)的空間給局部變量使用
    sub sp, 10
    
    ; 將寄存器入棧
    push si
    push di
    push bx 
    
    ; 給局部變量空間填充int 3(CCCC)
    ; stosw的作用:將ax的值拷貝到es:di中,同時(shí)di的值會(huì)+2
    mov ax, 0cccch
    ; 讓es等于ss
    mov bx, ss
    mov es, bx 
    ; 讓di等于bp-10(局部變量地址最小的區(qū)域)
    mov di, bp
    sub di, 10
    ; cx決定了stosw的執(zhí)行次數(shù)   
    mov cx, 5
    ; rep的作用:重復(fù)執(zhí)行某個(gè)指令(執(zhí)行次數(shù)由cx決定)  
    rep stosw  
     
    ; 定義2個(gè)局部變量
    mov word ptr ss:[bp-2], 3 
    mov word ptr ss:[bp-4], 4 
    mov ax, ss:[bp-2]
    add ax, ss:[bp-4]
    mov ss:[bp-6], ax 
    
    ; 訪問棧中參數(shù)
    mov ax, ss:[bp+4]
    add ax, ss:[bp+6] 
    add ax, ss:[bp-6]   
    ; 恢復(fù)寄存器的值
    pop bx
    pop di
    pop si
    ; 恢復(fù)sp                   
    mov sp, bp
    ; 恢復(fù)bp
    pop bp
    
    ret 
                
code ends  
end start

上述代碼實(shí)現(xiàn)了下面c語(yǔ)言的功能

int sum (int a, int b) {
    int c = 3;
    int d = 4;
    int e = c + d;
    return a + b + e;
}

int main() {
    sum(1, 2);
    return 0;
}
函數(shù)調(diào)用過(guò)程中棧的變化:

sum函數(shù)執(zhí)行的流程
1.push 參數(shù)
2.push 函數(shù)的返回地址
3.push bp (保留bp之前的值,方便以后恢復(fù))
4.mov bp, sp (保留sp之前的值雪营,方便以后恢復(fù))
5.sub sp,空間大小 (分配空間給局部變量)
6.保護(hù)可能要用到的寄存器
7.使用CC(int 3)填充局部變量的空間
8.--------執(zhí)行業(yè)務(wù)邏輯--------
9.恢復(fù)寄存器之前的值
10.mov sp, bp (恢復(fù)sp之前的值)
11.pop bp (恢復(fù)bp之前的值)
12.ret (將函數(shù)的返回地址出棧衡便,執(zhí)行下一條指令)
13.恢復(fù)棧平衡 (add sp,參數(shù)所占的空間)

8086匯編的相關(guān)筆記來(lái)自 小碼哥 MJ iOS底層視頻 以及 王爽《匯編語(yǔ)言(第三版)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镣陕,一起剝皮案震驚了整個(gè)濱河市呆抑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹊碍,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異耀销,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門掌腰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辅斟,“玉大人,你說(shuō)我怎么就攤上這事查邢。” “怎么了缓苛?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵未桥,是天一觀的道長(zhǎng)芥备。 經(jīng)常有香客問我,道長(zhǎng)亦镶,這世上最難降的妖魔是什么袱瓮? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任尺借,我火速辦了婚禮,結(jié)果婚禮上燎斩,老公的妹妹穿的比我還像新娘。我一直安慰自己实蔽,他們只是感情好谨读,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铐尚,像睡著了一般宣增。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爹脾,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天解阅,我揣著相機(jī)與錄音泌霍,去河邊找鬼。 笑死朱转,一個(gè)胖子當(dāng)著我的面吹牛藤为,可吹牛的內(nèi)容都是我干的怪与。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼缅疟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼琼梆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起窿吩,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茎杂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后纫雁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煌往,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年轧邪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刽脖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忌愚,死狀恐怖曲管,靈堂內(nèi)的尸體忽然破棺而出院水,到底是詐尸還是另有隱情檬某,我是刑警寧澤恢恼,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布漓踢,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏爽柒。R本人自食惡果不足惜浩村,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怎燥。 院中可真熱鬧铐姚,春花似錦隐绵、人聲如沸依许。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至逸绎,卻和暖如春棺牧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背醉锄。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烟勋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冕茅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乍楚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習(xí)匯編語(yǔ)言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,144評(píng)論 8 114
  • 原文地址:C語(yǔ)言函數(shù)調(diào)用棧(一)C語(yǔ)言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過(guò)程可看作連續(xù)的函數(shù)調(diào)用。當(dāng)一個(gè)函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,598評(píng)論 1 19
  • 王爽匯編全書知識(shí)點(diǎn)大綱 第一章 基礎(chǔ)知識(shí) 機(jī)器語(yǔ)言 匯編語(yǔ)言的產(chǎn)生 匯編語(yǔ)言的組成 存儲(chǔ)器 cpu對(duì)存儲(chǔ)器的讀寫 ...
    2c3ba901516f閱讀 2,409評(píng)論 0 1
  • 2018年7月11日記 每天堅(jiān)持出來(lái)嘮嗑复濒,堅(jiān)持更新日記巧颈,寫的好與不好都公諸于眾砸泛。或枯燥或乏味垒迂,希望路過(guò)的寶寶們多擔(dān)...
    一周陪你讀一本書閱讀 281評(píng)論 0 1
  • 抓住紅利绣夺,等同機(jī)會(huì)奋蔚,眼下利益,不能順之流之馒过。
    小笨魚王月閱讀 90評(píng)論 0 0