段寄存器
段寄存器就是提供段地址的诬乞。
8086CPU有4個段寄存器:CS埋哟、DS、SS略水、ES
當(dāng)8086CPU要訪問內(nèi)存時价卤,由這4個段寄存器提供內(nèi)存單元的段地址。
CS和IP
CS和IP是8086CPU中最關(guān)鍵的寄存器渊涝,它們指示了CPU當(dāng)前要讀取指令的地址慎璧。
CS為代碼段寄存器床嫌;
IP為指令指針寄存器存放偏移地址。
8086PC讀取和執(zhí)行指令相關(guān)部件
8086PC工作過程的簡要描述
從CS:IP指向內(nèi)存單元讀取指令炸卑,讀取的指令進入指令緩沖器既鞠,然后執(zhí)行;
IP = IP + 所讀取指令的長度盖文,從而指向下一條指令;
執(zhí)行指令蚯姆。 轉(zhuǎn)到步驟 (1)五续,重復(fù)這個過程。
修改CS龄恋、IP的指令
CPU從何處執(zhí)行指令是由CS疙驾、IP中的內(nèi)容決定的,程序員可以通過改變CS郭毕、IP中的內(nèi)容來控制CPU執(zhí)行目標(biāo)指令它碎。
mov指令不能用于設(shè)置CS、IP的值显押,8086CPU沒有提供這樣的功能扳肛。
8086CPU為CS、IP提供了另外的指令來改變它們的值:轉(zhuǎn)移指令
同時修改CS乘碑、IP的內(nèi)容:
jmp 段地址:偏移地址
如:jmp 2AE3:3
jmp 3:0B16
功能:用指令中給出的段地址修改CS挖息,偏移地址修改IP。
僅修改IP的內(nèi)容:
jmp 某一合法寄存器
如:jmp ax (類似于 mov IP,ax)
jmp bx
功能:用寄存器中的值修改IP兽肤。
代碼分析:
(初始:CS=2000H套腹,IP=0000H)
解析:根據(jù)物理地址=基址*16+偏移地址 得到程序的執(zhí)行地址為:20000H
1.則執(zhí)行的第一條指令為:mov ax,6622
2.jmp 1000:3 ? 此時物理地址為:10003H
3.則執(zhí)行的指令為:mov ax ,0000
4.mov bx,ax
5.jmp bx ip寄存器被修改為0000 那么此時物理地址為 10000H
6.mov ax ,0123
7.轉(zhuǎn)到第三步執(zhí)行资铡。电禀。。笤休。
代碼段
對于8086PC機尖飞,在編程時,可以根據(jù)需要宛官,將一組內(nèi)存單元定義為一個段葫松。
可以將長度為 N( N≤64KB )的一組代碼,存在一組地址連續(xù)底洗、起始地址為 16的倍數(shù)的內(nèi)存單元中腋么,這段內(nèi)存是用來存放代碼的,從而定義了一個代碼段亥揖。
這段長度為 10 字節(jié)的字節(jié)的指令珊擂,存在從123B0H~123B9H的一組內(nèi)存單元中圣勒,我們就可以認(rèn)為,123B0H~123B9H這段內(nèi)存單元是用來存放代碼的 摧扇,是一個代碼段 圣贸,它的段地址為123BH,長度為10字節(jié)扛稽。