8086的尋址方式
- CPU訪問內(nèi)存單元時婆芦,要給出內(nèi)存單元的地址闷盔,所有的內(nèi)存單元都有唯一的地址劲弦,叫做物理地址
- 8086有20位地址總線,可以傳送20位的地址雏节,1M的尋址能力
- 但它又是16位結(jié)構(gòu)的CPU胜嗓,它內(nèi)部能夠一次性處理、傳輸钩乍、暫時存儲的地址為16位辞州。如果將地址從內(nèi)部簡單地發(fā)出,那么它只能送出16位的地址寥粹,表現(xiàn)出來的尋址能力只有64KB
8086采用一種在內(nèi)部用2個16位地址合成的方法來生成1個20位的物理地址
內(nèi)存分段管理
- 8086是用“基礎(chǔ)地址(段地址×16) + 偏移地址 = 物理地址”的方式給出物理地址
-
為了開發(fā)方便孙技,我們可以采取分段的方法來管理內(nèi)存,比如:
- 地址10000H~100FFH的內(nèi)存單元組成一個段排作,該段的起始地址(基礎(chǔ)地址)為10000H牵啦,段地址為1000H,大小為100H
- 地址10000H1007FH妄痪、10080H100FFH的內(nèi)存單元組成2個段哈雏,它們的起始地址(基礎(chǔ)地址)為:10000H和10080H,段地址為1000H和1008H衫生,大小都為80H
- 在編程時可以根據(jù)需要裳瘪,將若干連續(xù)地址的內(nèi)存單元看做一個段,用段地址×16定為段的起始地址(基礎(chǔ)地址)罪针,用偏移地址定位段中的內(nèi)存單元
- 段地址×16必然是16的倍數(shù)彭羹,所以一個段的起始地址(基礎(chǔ)地址)也一定是16的倍數(shù)
-
偏移地址為16位,16位地址的尋址能力為64KB泪酱,所以一個段的長度最大為64KB
段寄存器
- 8086在訪問內(nèi)存時要由相關(guān)部件提供內(nèi)存單元的段地址和偏移地址派殷,送入地址加法器合成物理地址
- 是什么部件提供段地址还最?段地址在8086的段寄存器中存放
- 8086有4個段寄存器:CS、DS毡惜、SS拓轻、ES,當(dāng)CPU需要訪問內(nèi)存時由這4個段寄存器提供內(nèi)存單元的段地址
- CS (Code Segment):代碼段寄存器
- DS (Data Segment):數(shù)據(jù)段寄存器
- SS (Stack Segment):堆棧段寄存器
- ES (Extra Segment):附加段寄存器
CS和IP
- CS為代碼段寄存器经伙,IP為指令指針寄存器扶叉,它們指示了CPU當(dāng)前要讀取指令的地址
- 任意時刻,8086CPU都會將CS:IP指向的指令作為下一條需要取出執(zhí)行的指令
指令的執(zhí)行過程
指令和數(shù)據(jù)
- 在內(nèi)存或者磁盤上帕膜,指令和數(shù)據(jù)沒有任何區(qū)別枣氧,都是二進(jìn)制信息
- CPU在工作的時候把有的信息看做指令,有的信息看做數(shù)據(jù)垮刹,為同樣的信息賦予了不同的意義
- CPU根據(jù)什么將內(nèi)存中的信息看做指令达吞?
- CPU將CS:IP指向的內(nèi)存單元的內(nèi)容看做指令
- 如果內(nèi)存中的某段內(nèi)容曾被CPU執(zhí)行過,那么它所在的內(nèi)存單元必然被CS:IP指向過
jmp指令
- CPU從何處執(zhí)行指令是由CS危纫、IP中的內(nèi)容決定的,我們可以通過改變CS乌庶、IP的內(nèi)容來控制CPU執(zhí)行目標(biāo)指令
- 8086提供了一個mov指令(傳送指令)种蝶,可以用來修改大部分寄存器的值,比如
- mov ax,10瞒大、mov bx,20螃征、mov cx,30、mov dx,40
- 但是透敌,mov指令不能用于設(shè)置CS盯滚、IP的值,8086沒有提供這樣的功能
- 8086提供了另外的指令來修改CS酗电、IP的值魄藕,這些指令統(tǒng)稱為轉(zhuǎn)移指令,最簡單的是jmp指令
jmp指令 -- 練習(xí)
- 解:執(zhí)行一次修改一次IP撵术,sub <ax-ax>,jmp ax <把IP改成ax>