《組合語言》筆記(1)

2021-07-23 09:06:15 字數 1223 閱讀 3589

說好的學彙編開始了。筆記走起~

本書的環境都是8086,8086有14個16位暫存器,有20位位址匯流排,定址能力1mb。16位資料匯流排。

組合語言主要是一系列彙編指令,彙編指令就是將機器碼變成了人便於記憶的指令,與01相比,mov,loop更直觀。除了彙編指令,組合語言還包括了偽指令(沒有對應的機器碼,由編譯器執行),其他符號(如+,-,×,/由編譯器識別)。

彙編主要是通過控制cpu完成對暫存器,記憶體的操作。

乙個小例子,mov ax,0123h 將0123h賦給ax暫存器,ax中儲存的內容即為)0123h。

暫存器ax,bx,cx,dx用來存放一般性的資料,稱為通用暫存器。

暫存器cs(code segment **段暫存器) ip(instruction pointer 指令指標暫存器),首先我們需要知道cpu是如何訪問記憶體執行指令的,首先由兩個16位的位址,乙個是段位址,乙個是偏移位址,經過位址加法器,合成乙個20位的實體地址,這20位位址再經過位址匯流排找到實體地址。位址加法器是按照 段位址x16+偏移位址 來計算實體地址的。 

而cs中儲存的就是段位址,ip就是偏移位址。所以8086cpu的工作流程就是首先從cs:ip所指向的記憶體單元讀取指令,將讀取的指令放入指令緩衝器,再將ip加上此次讀取的指令,使其指向下一條指令,最後,執行已經讀取的指令。注意是ip先增加指向下一條指令,再執行指令。

暫存器ds(data segment 資料段暫存器)也是乙個段暫存器,與cs記錄指令的段位址不同,它記錄的是資料的段位址。當我們想要將記憶體中的資料放入暫存器,可以用mov ax,[0] 此時放入的資料就是記憶體中 ds(段位址)+ 0 (偏移位址)中的內容 。

暫存器ss(stack segment:堆疊段暫存器),sp(stack pointer:堆疊指標暫存器)與cs ip類似,可以得到棧頂元素的位置。8086cpu提供push pop來以棧的方式訪問記憶體空間。而入棧和出棧操作都是以字為單位的,例如 push ax  將ax元素壓入棧,則 首先sp = sp -2  ss:sp指向當前棧頂前面的元素,即新棧頂,然後將ax中的元素放入新棧頂。pop ax 將棧頂元素出棧存入ax,首先將ss:sp指向的元素放入ax,再將sp + 2 指向新棧頂。

8086不保證我們對棧的操作不會超界(棧滿繼續入棧,棧空繼續出棧),它只知道棧頂元素在哪,卻不知道棧的空間有多大。

通過段,我們可以自己定義一部分記憶體空間作為乙個段,讓cpu按照我們的安排訪問這些段,cpu只知道cs ip指向的是指令,將那裡當做**,知道cpu的工作原理才能讓cpu按照我們的安排工作。

組合語言 1

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

組合語言筆記

1 暫存器操作 cs暫存器不能用mov指令賦值,需要用jmp等調轉指令。但還可以將cs暫存器的值mov到暫存器或者記憶體 ds暫存器可以用mov賦值,通常是這樣操作 mov bx 位址 mov ds bx。可以將ds中的值mov到暫存器或者記憶體。2 實模式和保護模式 實模式 實模式下訪問記憶體是通...

組合語言筆記

原作者是哪位大佬已經不可考,寫的挺好的 一波,侵刪 8086有14個暫存器 控制暫存器 ip flag 段暫存器 8086中 中的 只能是bx bp si di。此時bp預設ss段,di預設es段,bx si預設ds。16位 flags 32位 eflags 標誌位控制標誌位 系統標誌位 影響標誌暫...