組合語言-學習記錄(二)
教材:《組合語言-第四版》王爽老師
第二章
1、在CPU中
> 運算器進行資訊處理
> 暫存器進行資訊儲存
> 控制器控制各種器件進行工作
> 內部匯流排連線各種器件,在他們之間進行資料的傳送
2、暫存器:AX 、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
3、通用暫存器:AX、BX、CX、DX 通常用來存放一般性的資料 (8086CPU 16位)
【問】為什麼 AX = AH,AL ?
【答】因為8086CPU的上一代CPU中的暫存器都是8位的,為了保證相容,使原來基於上代CPU編寫的程式稍加修改就可以執行在8086之上,因此AX分為AH和AL
4、不同的CPU可以有不同的形成實體地址的方式。
CPU 通過地址匯流排送入儲存器的,必須是一個記憶體單元的實體地址。在CPU向地址匯流排上發出實體地址之前,必須要在內部先形成這個實體地址。
5、8086CPU採用一種在內部用兩位16位地址合成的方法來形成一個20位的實體地址
(1)CPU中的相關部件提供兩個 16位的地址,一個成為段地址,另一個成為偏移地址;
(2)段地址和偏移地址通過內部匯流排送入一個稱為地址加法器的部件;
(3)地址加法器將兩個 16位地址合併為一個20位的實體地址;
(4)地址加法器通過內部匯流排將 20位實體地址送入輸入輸出控制電路;
(5)輸入輸出控制電路將 20位實體地址送上地址匯流排;
(6)20位實體地址被地址匯流排傳送到儲存器。
6、實體地址 = 段地址*16 + 偏移地址 <-> 實體地址 = 基礎地址 + 偏移地址
7、段的劃分來自於CPU
1> 段的起始地址一定是 16的倍數
2> 偏移地址為 16位,16位地址的定址能力為 64KB,所以一個段的長度最大為 64KB
8、段暫存器 CS-程式碼段暫存器 IP-指令指標暫存器
在8086PC機中,任意時刻,設CS中的內容為M,IP中的內容為N,8086CPU將從記憶體M*16+N單元開始,讀取一條指令並執行
(1)初始狀態(CS:2000H, IP:0000H, CPU將從記憶體 2000H*16+0000H處讀取指令執行)
(2)CS、IP中的內容送入地址加法器(地址加法器完成:實體地址=段地址*16+偏移地址)
(3)地址加法器將實體地址送入輸入輸出控制電路
(4)輸入輸出控制電路將實體地址20000H送上地址匯流排
(5)從記憶體20000H單元開始存放的機器指令 B8 23 01 通過資料匯流排被送入 CPU
(6)輸入輸出控制電路將機器指令B8 23 01送入指令緩衝器
(7)IP中的值自動增加(注意:在資料送入指令緩衝器後IP才進行加的操作,並不是剛去取資料就進行加操作)
(8)執行控制器執行指令 B8 21 01(即 mov ax, 0123H)
(9)指令 B8 23 01被執行後 AX 中的內容為 0123H
9、mov指令不能用來設定 CS、IP的值,因為 8086CPU 沒有提供這樣的功能。
能夠改變 CS、IP 的內容的指令被統稱為轉移指令,例如 jmp
1> jmp 段地址:偏移地址 (同時修改CS、IP的值)
jmp 2AE3:3 執行後:CD=2AE3H,IP=0003和,CPU將從 2AE33H處讀取指令
2> jmp 某一合法暫存器 (僅修改 IP 的內容)
jmp ax 指令執行前:ax=1000H, CS=2000H, IP=0003H
指令執行後: ax=1000H, CS=2000H, IP=1000H
10、Debug的使用
1> Debug是 DOS、Windows 都提供的真實模式 (8086 方式) 程式的除錯工具。使用它,可以檢視 CPU 各種暫存器中的內容、記憶體的情況和在機器碼級跟蹤程式的執行
2> 常用Debug的功能
- R 檢視、改變CPU暫存器的內容 > r 檢視暫存器資訊 > r ax 修改ax暫存器的資訊
- D 檢視記憶體中的內容 > d 段地址:偏移地址 列出從指令記憶體單元開始的128個記憶體單元的內容 > d 一進入debug後就是用d的話會顯示debug預設的地址處的內容 > d 1000:0 9 檢視10000 - 10009 的內容 > d 1000:0 0 檢視10000H的內容
- E 改寫記憶體中的內容 > e 1000:0 0 1 2 3 4 5 6 7 8 9 依次修改10000-10009的內容為0-9 > e 1000:10 採用提問的方式一個一個地改寫記憶體中的內容 > e 1000:0 1 'a' 2 'b' 3 'c' 向記憶體中寫入字元 > e 1000:0 b8 01 00 b9 02 00 01 c8 將機器碼寫入記憶體
- U 將記憶體中的機器指令翻譯成彙編指令 > u 1000:0 檢視從1000:0開始的記憶體單元中的機器指令所對應的彙編指令
- T 執行一條機器指令 > t 用來執行當前CS:IP指向的指令
- A 以彙編指令的格式在記憶體中寫入一條機器指令 > a 1000:0 從10000H開始寫入彙編指令
相關文章
- 組合語言學習筆記組合語言筆記
- 組合語言學習記錄--輸入輸出字串組合語言字串
- 組合語言學習記錄--第一個彙編程式組合語言
- 組合語言學習筆記(十二)-浮點指令組合語言筆記
- 《組合語言》王爽,學習筆記(子程式呼叫)組合語言筆記
- 組合語言零基礎入門學習筆記(一)組合語言筆記
- 組合語言學習筆記03——暫存器(CPU工作原理)組合語言筆記
- 【R語言學習筆記】探索ggplot的排列組合(一)R語言筆記
- 《組合語言》王爽,學習筆記(標誌暫存器下)組合語言筆記
- 第二章--組合語言組合語言
- 《JavaScript語言精粹》學習筆記二JavaScript筆記
- 組合語言1 - 什麼是組合語言?組合語言
- 組合語言組合語言
- 【R語言學習筆記】探索ggplot的排列組合:線圖(一)R語言筆記
- SQL語言學習(二)SQL
- 組合語言 1組合語言
- 組合語言 2組合語言
- 組合語言-棧組合語言
- 【學習筆記】組合數學筆記
- 組合數學學習筆記筆記
- Solidity語言學習筆記————32、建立合約Solid筆記
- 讀書寫筆記-王爽《組合語言》筆記組合語言
- 12天學好C語言——記錄我的C語言學習之路(Day 4)C語言
- GO語言學習——切片二Go
- C語言深入學習二C語言
- Go語言實現位元組記錄鎖Go
- Vue 學習記錄二Vue
- 「學習記錄」《數值分析》第二章計算實習題(Python語言)Python
- 組合語言指令大全組合語言
- Java學習筆記記錄(二)Java筆記
- Go語言核心36講(Go語言進階技術二)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識二)--學習筆記Go筆記
- C 語言學習筆記筆記
- C語言學習筆記C語言筆記
- Java openrasp學習記錄(二)Java
- Solidity語言學習筆記————35、抽象合約和介面Solid筆記抽象
- 組合語言-基礎功能組合語言
- 組合語言——更多功能組合語言