匯編語言程序設計 第2章概念梳理
匯編語言程序設計
第2章概念梳理
8086 14個寄存器:
- AX,BX,CX,DX (通用寄存器)
- SI,DI,BP,SP (基址和變址寄存器)
- CS,SS,DS,ES (段寄存器)
- IP,FLAGS (指令指針和標誌寄存器)
通用寄存器:
- AX,BX,CX,DX通常用於存放一般性數據 稱為通用寄存器
- 一般存儲的數據範圍為0 ~ 2^16-1
- 且為了與早期CPU操作兼容,這4個寄存器均可拆分成2個8位寄存器單獨使用
{
AX分為AH和AL
BX分為BH和BL
CX分為CH和CL
DX分為DH和DL
}
字的高8位 存放於通用寄存器的高八位寄存器即AH
字的低8位 存放於通用寄存器的低八位寄存器即AL
寄存器基本操作指令:
mov ax,18
add ax,8
應註意兩個操作對象的位數應當一致,如類似
{
mov ax,bl
mov bh,ax
}
指令是不正確的
超出位數的情形{
8226 H + 8226 H ————————— 1044CH ;最終結果為044CH,1由於進位被舍棄
}
8086表示物理地址的解決途徑:
寄存器都是16位,而物理地址都是20位
可以使用兩個16位地址合成一個20位的物理地址的表達方式
例如:
123CH*16+0008H = 123C8H
1230H*16+00C8H = 123C8H
歸納:
基礎地址(又稱段地址)+偏移地址 = 物理地址
在8086CPU當中,通過段地址:偏移地址來間接描述內存單元的物理地址,故CPU根據如下公式得到物理地址:
物理地址 = 段地址 * 16 + 偏移地址
其中:
[段地址:偏移地址] 也稱 [邏輯地址]
在寫法上 地址通常使用十六進制表示,表示十六進制的H在[段地址:偏移地址]中可省略不寫。
CS和IP寄存器
CS:代碼段段寄存器,用於存放代碼段的[段地址]
IP:指令指針寄存器,用於存放CPU將要讀取的指令在代碼段中的偏移地址
即CPU 通過這個公式讀取將要執行的指令:
(CS)*16 +(IP)=指令的物理地址
計算機工作過程:
第一步:CPU基於CS:IP,計算出物理地址,然後到相應的內存單元
第二步:CPU自動修改IP的值,IP=IP+所讀取指令的長度,從而為下一條指令讀取做好準備
第三步:執行指令。轉第1步,重復此過程
修改CS和IP的指令jmp
同時修改CS、IP的內容,即jmp 段地址:偏移地址
用指令中給出的段地址修改CS,偏移地址修改IP
示例:
只修改IP的內容:
jmp 某一合法寄存器
例如:
jmp ax,ip<--ax
匯編語言程序設計 第2章概念梳理