菜雞網課組合語言學習筆記 3

2021-10-09 02:50:52 字數 1652 閱讀 3621

當8086cpu要訪問記憶體時,由這四個段暫存器提供記憶體單元的段位址。

cs和ip

cpu通過cs和ip進行讀取的過程

從cs:ip指向記憶體單元讀取指令,讀取的指令進入指令緩衝器;

ip = ip + 所讀取指令的長度,從而指向下一條指令

執行指令。跳轉到第一步並重複整個過程

8080pc工作過程的簡要描述

在任何時候,cpu將cs、ip中的內容當作指令的段位址和偏移位址,用它們合成指令的實體地址,到內側讀取指令碼,執行。

如果說,記憶體中的一段資訊曾被cpu執行過的話,那麼,它所在的記憶體單元必然被cs:ip指向過。

修改cs、ip的指令

在cpu中,程式設計師能夠用指令讀寫的部件只有暫存器,程式設計師可以通過改變暫存器中的內容實現對cpu的控制

cpu從何處執行指令是cs、ip中的內容決定的,程式設計師可以通過改變cs、ip中的內容來控制cpu執行目標指令

mov指令:可以改變8086cpu大部分的暫存器的值,被稱為傳送指令。

但是,8086不用這個(用mov修改cs:ip)方法修改,用乙個專門的指令進行修改->

​ jmp 2ae3:3 -> 2ae33

​ jmp 3:0b16 -> 0b46

​ 如果我們僅僅修改ip的內容

格式:jmp 某一合法暫存器 (段內轉移)

​ jmp ax (類似於 mov ip ,ax)

​ jmp bx

主要功能:用暫存器中的值修改ip

**段

對於8086pc機,在程式設計時,可以根據需要,將一組記憶體單元定義為乙個段。

可以將長度為n(n<=64kb)(偏移位址不可以超過十六位,乙個段的索引長度不可以超過2的16次)的一組**,存在一組位址連續、起始位址為16的倍數記憶體單元中,這段記憶體是用來存放**的,從而定義乙個**段。

下面:​ mov ax , 0000 (b8 00 00)

​ add ax , 0123 (05 23 01)

​ mov bx ,ax (8b d8)

​ jmp bx (ff e3)

這段長度為10位元組的指令,存在123b0h123b9h的一組記憶體單元中,我們就可以認為,123b0h123b9h這段記憶體單元是用來存放**的,是乙個**段,它的段位址為123bh,長度為10個位元組。

如何去執行乙個**段中的指令?

​ 將一段記憶體當作**段,僅僅是我們在程式設計時的一種安排,cpu並不會由於這種安排,就自動的將我們定義得**段中的指令當做指令來執行。

​ cpu 只認識被cs:ip指向的記憶體單元中的內容為指令。(特定匯流排cpu識別為特定的內容)

段位址在8086cpu的暫存器中存放。當8086cpu要訪問記憶體時,由段暫存器提供記憶體的段位址。8086cpu有4個暫存器,其中cs用來存放指令段位址。

cs存放指令的段位址值,ip存放指令的偏移位址。

8086機中,任意時刻,cpu將cs:ip指向的內容當作指令執行。

8086cpu的工作過程:

從cs:ip指向記憶體單元讀取指令,讀取指令進入指令緩衝器;

ip指向下一條指令;(ip=ip+所執行指令的長短)

執行指令(重複上步驟)

8086cpu提供轉移指令修改cs、ip的內容。

組合語言學習筆記 3

35.棧 先進後出,涉及到入棧 push 和出棧 pop 兩個概念.a push ax 表示將ax中的資料送入棧中 b pop ax 表示從棧頂取出資料送入ax 36.8086cpu的入棧和出棧操作都是以字為單位進行的.那麼如何知道哪一段被當作棧在使用.how.push和pop時,需要知道棧頂元素....

組合語言學習筆記(3)

3.380x86指令系統 其指令系統可以是以下的6組 資料傳送指令 算術指令 邏輯指令 串處理指令 控制轉移指令 處理機控制指令 資料傳送指令 傳送指令mov 其目的運算元不能是立即碼 其目的操作時不能是 段 其目的運算元和源運算元不能都是段位址 ip不能作為源運算元,也不能作為目的運算元 立即數不...

組合語言學習筆記3

1.cpu是通過位址匯流排來指定儲存單元的,位址單元能傳送多少個不同的資訊,就表明cpu可以對多少個儲存單元進行定址 乙個cpu有n根位址匯流排,可以說這個cpu的位址匯流排寬度為n,這樣的cpu最多可以尋找2的n次方個記憶體單元 3.資料匯流排 cpu與記憶體或其它器件之間資料傳送石通過資料匯流排...