組合語言3 1 3 5小結 棧

2021-08-31 13:52:15 字數 715 閱讀 1763

1. 字在記憶體中儲存時,佔兩個位元組,即兩個位址連續的記憶體單元,其中x86中,字的低位存放在低位址,高位存放高位址單元。

2. mov 指令訪問記憶體單元格式,mov al,[address] ,其中address 只能是資料的偏移位址,資料的段位址存放在ds資料段位址暫存器中。

3. mov,add,sub具有兩個操作物件指令,jmp具有乙個操作物件

cpu提供棧機制(棧:記憶體空間的一部分而已,唯一的特別之處就是用一種特殊的人為規定的方式訪問的的記憶體空間)

——提供相關的指令,以棧的方式訪問記憶體。

8086提供入棧和出棧指令,最基本兩個push和pop。eg,push ax,pop ax。

注意:8086 入棧和出棧的命令以字為單位。

cpu如何知道棧頂的位置?

8086中有ss和sp,ss:sp 指向棧頂元素

push ax:

(1)sp = sp-2(每次都是乙個字,兩個記憶體單元)棧頂是低位址

(2)將ax中的內容送入ss:sp指向的記憶體單元中。

pop ax類似分析

棧頂超界問題:

8086沒有提供防止的機制,需要程式設計注意⚠️。

8086cpu只記錄棧頂位址,棧的大小空間需要自己把握。

本質上是一種記憶體傳送指令,包括兩步,與mov不同。

組合語言小結

1.gcc c og s,然後直接開啟.s檔案 不推薦 2.gcc c og c,然後objdump d o 對彙編 s檔案也可以用 c選項 gcc c s 3.gcc c og o 然後gdb 然後disassemble function name 推薦 4.如果要直接檢視檔案的機器碼,用hexd...

組合語言 函式呼叫棧

當發生函式呼叫的時候,棧空間中存放的資料是這樣的 1 呼叫者函式把被調函式所需要的引數按照與被調函式的形參順序相反的順序壓入棧中,即 從右向左依次把被調函式所需要的引數壓入棧 2 呼叫者函式使用call指令呼叫被調函式,並把call指令的下一條指令的位址當成返回位址壓入棧中 這個壓棧操作隱含在cal...

棧幀 組合語言詳解

原來我以為在c語言中指標已經是非常麻煩了,沒想到棧幀給我甜蜜一擊,但最後一路學習下來也不是多麼麻煩的事。首先我們得明確為什麼有函式,其作用是 在面向過程語言的重要組成成分,它將具有相同功能的語句組合到一塊,便於我們使用,提高程式可讀性,減少 量。以main函式為例,在使用過程中首先呼叫 tmainc...