1、一個(gè)典型的CPU由運(yùn)算器、控制器、寄存器等器件組成,這些器件靠?jī)?nèi)部總線相連。

區(qū)別:
內(nèi)部總線實(shí)現(xiàn)CPU內(nèi)部各個(gè)器件之間的聯(lián)系。
外部總線實(shí)現(xiàn)CPU和主板上其它器件的聯(lián)系。
8086CPU有14個(gè)寄存器 它們的名稱為:
AX、BX、CX、DX、SI、DI、SP、BP、
IP、CS、SS、DS、ES、PSW。

8086CPU所有的寄存器都是16位的,可以存放兩個(gè)字節(jié),一個(gè)字節(jié)8位。
AX、BX、CX、DX 通常用來(lái)存放一般性數(shù)據(jù)被稱為通用寄存器。
一個(gè)16位寄存器所能存儲(chǔ)的數(shù)據(jù)的最大值為多少?
因?yàn)槊恳晃淮娣诺臄?shù)據(jù)是0或1,那么最大的數(shù)值自然就是 1111 1111 1111 1111(2),也就是2^16-1。
2、通用寄存器(重點(diǎn))
8086上一代CPU中的寄存器都是8位的,為保證兼容性,
這四個(gè)寄存器都可以分為兩個(gè)獨(dú)立的8位寄存器使用。
AX可以分為AH和AL;
BX可以分為BH和BL;
CX可以分為CH和CL;
DX可以分為DH和DL。

AX的低8位(0位~7位)構(gòu)成了AL寄存器,高8位(8位~15位)構(gòu)成了AH寄存器。
AH和AL寄存器是可以獨(dú)立使用的8位寄存器,如果當(dāng)成是8位寄存器使用,那么他們就是獨(dú)立的,沒(méi)有任何關(guān)系。
一個(gè)8位寄存器所能存儲(chǔ)的數(shù)據(jù)的最大值是多少?二進(jìn)制數(shù)值 1111 1111 ,也就是 2^8-1。

3、字在寄存器中的存儲(chǔ)




注意:在進(jìn)行數(shù)據(jù)傳送或運(yùn)算時(shí),要注意指令的操作數(shù)的位數(shù)要匹配。

4、物理地址的表示(重點(diǎn))
CPU訪問(wèn)內(nèi)存單元時(shí)要給出內(nèi)存單元的地址,所有的內(nèi)存單元構(gòu)成的存儲(chǔ)空間是一個(gè)一維的線性空間。
我們將這個(gè)唯一的地址稱為物理地址。
不同的CPU有不同的形成物理地址的方式。
(1)16位結(jié)構(gòu)的CPU
8086內(nèi)部為16位結(jié)構(gòu),它只能傳送16位的地址,表現(xiàn)出的尋址能力卻只有64K。
8086外部有20位地址總線,可傳送20位地址,尋址能力為1M。
那么,8086CPU如何用內(nèi)部16位的數(shù)據(jù),轉(zhuǎn)換成20位的地址呢?
8086CPU采用一種在內(nèi)部用兩個(gè)16位地址合成的方法來(lái)形成一個(gè)20位的物理地址。
段地址+偏移地址 -> 地址加法器 -> 20位的物理地址。
地址加法器合成物理地址的方法:段地址×16+偏移地址=物理地址。
“段地址×16”有一個(gè)更為常用的說(shuō)法就是數(shù)據(jù)左移4位。(二進(jìn)制位)
二進(jìn)制的數(shù)據(jù)左移4位,意味著乘以2^4=16。
這樣做的目的主要是為了彌補(bǔ)內(nèi)部總線16位的缺陷而設(shè)計(jì)的。





5、關(guān)于段空間
內(nèi)存沒(méi)有分段,段的劃分來(lái)自于CPU,
由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式給出內(nèi)存單元的物理地址,
使得我們可以用分段的方式來(lái)管理內(nèi)存。
以后,在編程時(shí)可以根據(jù)需要,將若干地址連續(xù)的內(nèi)存單元看作一個(gè)段,
用段地址×16定位段的起始地址(基礎(chǔ)地址),用偏移地址定位段中的內(nèi)存單元。
(1)段地址×16 必然是 16的倍數(shù),所以一個(gè)段的起始地址也一定是16的倍數(shù);
(2)偏移地址為16位,16 位地址的尋址能力為 64K,所以一個(gè)段的長(zhǎng)度最大為64K。
CPU可以用不同的段地址和偏移地址形成同一個(gè)物理地址。
如果給定一個(gè)段地址,僅通過(guò)變化偏移地址來(lái)進(jìn)行尋址,最多可以定位多少內(nèi)存單元?
因?yàn)槠频刂?6位,變化范圍為0~FFFFH,僅用偏移地址來(lái)尋址最多可尋64K個(gè)內(nèi)存單元。
比如:給定段地址1000H,用偏移地址尋址,CPU的尋址范圍為:10000H~1FFFFH。


6、地址的描述
在8086PC機(jī)中,存儲(chǔ)單元的地址用兩個(gè)元素來(lái)描述。即段地址和偏移地址。
“數(shù)據(jù)在21F60H內(nèi)存單元中。”對(duì)于8086PC機(jī)的兩種描述:
(a)數(shù)據(jù)存在內(nèi)存2000:1F60單元中;
(b)數(shù)據(jù)存在內(nèi)存的2000段中的1F60H單元中。
可根據(jù)需要,將地址連續(xù)、起始地址為16的倍數(shù)的一組內(nèi)存單元定義為一個(gè)段。
7、段寄存器就是提供段地址的。
8086CPU有4個(gè)段寄存器: CS、DS、SS、ES。
CS和IP是8086CPU中最關(guān)鍵的寄存器,它們指示了CPU當(dāng)前要讀取指令的地址。
CS為代碼段寄存器,IP為指令指針寄存器。
在 8086CPU 加電啟動(dòng)或復(fù)位后( 即 CPU剛開(kāi)始工作時(shí))CS和IP被設(shè)置為CS=FFFFH,IP=0000H。
即在8086PC機(jī)剛啟動(dòng)時(shí),CPU從內(nèi)存FFFF0H單元中讀取指令執(zhí)行。
FFFF0H單元中的指令是8086PC機(jī)開(kāi)機(jī)后執(zhí)行的第一條指令。









8、修改CS,IP
mov指令不能用于設(shè)置CS、IP的值,8086CPU沒(méi)有提供這樣的功能。
8086CPU為CS、IP提供了另外的指令來(lái)改變它們的值:轉(zhuǎn)移指令
JMP 段地址:偏移地址
JMP 2AE3:3
功能:用指令中給出的段地址修改CS,偏移地址修改IP。CS = 2AE3H, IP = 0003H。
僅修改IP的內(nèi)容:
jmp 某一合法寄存器
jmp ax (類似于 mov IP,ax)
功能:用寄存器中的值修改IP。
8086機(jī)中,任意時(shí)刻,CPU將CS:IP指向的內(nèi)容當(dāng)作指令執(zhí)行。


9、關(guān)于debug指令(Win7沒(méi)有這個(gè)指令,XP才有)
R命令查看、改變CPU寄存器的內(nèi)容;
D命令查看內(nèi)存中的內(nèi)容;
E命令改寫(xiě)內(nèi)存中的內(nèi)容;
U命令將內(nèi)存中的機(jī)器指令翻譯成匯編指令;
T命令執(zhí)行一條機(jī)器指令;
A命令以匯編指令的格式在內(nèi)存中寫(xiě)入一條機(jī)器指令。