談8088內(nèi)部結(jié)構(gòu)之前神郊,先來看一下微處理器的基本結(jié)構(gòu)
微處理器一般由算數(shù)邏輯單元(ALU)蚁鳖,寄存器,指令處理單元等幾部分組成
- 算數(shù)邏輯單元:負(fù)責(zé)cpu的各種運(yùn)算,一般是算數(shù)運(yùn)算和邏輯運(yùn)算。
- 寄存器:處理器內(nèi)部需要高速的存儲(chǔ)單元秘血,用于暫時(shí)存儲(chǔ)程序執(zhí)行過程中的代碼和數(shù)據(jù),這些存儲(chǔ)單元稱為寄存器。
- 指令處理單元:負(fù)責(zé)對(duì)指令進(jìn)行譯碼和處理晴音。
8088/8086的結(jié)構(gòu)
1. 功能結(jié)構(gòu)
總線接口單元(BIU):管理著8088和系統(tǒng)總線的接口,負(fù)責(zé)cpu的存儲(chǔ)器和外設(shè)進(jìn)行訪問缔杉。8088cpu對(duì)外的所有操作都必須通過總線還有BIU來進(jìn)行锤躁,其他總線請(qǐng)求設(shè)備也可以申請(qǐng)占用總線』蛳辏總線使用情況有取指系羞,取指以外的的其他操作,總線空閑鸭叙,其他設(shè)備占用總線觉啊。
執(zhí)行單元(EU):負(fù)責(zé)指令的譯碼與執(zhí)行以及數(shù)據(jù)的運(yùn)算。譯碼后執(zhí)行的操作分為內(nèi)操作(所有8位沈贝,16位的算術(shù)邏輯運(yùn)算都由EU來完成)和外操作(讀寫存儲(chǔ)器和對(duì)外設(shè)的操作)杠人。
指令預(yù)取:BIU維護(hù)著長(zhǎng)度為4字節(jié)的指令隊(duì)列,按照FIFO的方式進(jìn)行工作嗡善。當(dāng)隊(duì)列空缺時(shí)BIU會(huì)自動(dòng)取指彌補(bǔ)空缺辑莫。當(dāng)程序發(fā)生轉(zhuǎn)移時(shí),BIU會(huì)廢除原隊(duì)列罩引,通過重新取指來形成新的隊(duì)列各吨。
2.寄存器結(jié)構(gòu)
- 按照功能分類有通用寄存器,段寄存器袁铐,標(biāo)志寄存器揭蜒,指令指針。其中通用寄存器包括數(shù)據(jù)寄存器剔桨,變址寄存器屉更,指針寄存器。
- 按照應(yīng)用來分類
存放數(shù)據(jù)和結(jié)構(gòu):通用寄存器洒缀,包括數(shù)據(jù)寄存器(AX,BX,CX,DX)瑰谜,變址寄存器(SI,DI),指針寄存器(BP,SP)
存放段地址:段寄存器(CS,SS,DS,ES)
存放偏移地址:包括BX,SI,DI,BP,SP,IP(其中SI,DI默認(rèn)與DS聯(lián)用树绩,BP與SP默認(rèn)與SS聯(lián)用萨脑,IP與CS聯(lián)用尋找指令的地址) - 透明寄存器:CS,IP,FLAGS。(不可修改)
3.存儲(chǔ)器結(jié)構(gòu) - 數(shù)據(jù)的存儲(chǔ)格式:字節(jié)(8位)饺饭,單字(16位)渤早,雙字(32位)。將子單元安排在偶地址(xxx0b)砰奕,將雙字單元安排在模4地址(xx00b)稱為地址對(duì)齊蛛芥。
- 存儲(chǔ)器的分段管理
8088內(nèi)部總線的為16位,編號(hào):0000H~FFFFH军援,容量為 2^16 = 64k仅淑。但是8088CPU地址線是20位的,所以物理尋址范圍為:00000H~FFFFFH胸哥,尋址空間為 2^20 = 1MB涯竟。8088將存儲(chǔ)空間分為許多的邏輯段進(jìn)行管理,且最大的段限制為16k空厌,而且只能從模16開始的一個(gè)邏輯段庐船,每個(gè)存儲(chǔ)器可用 段地址:偏移地址 表示準(zhǔn)確位置。
物理地址:段地址0H嘲更,例如DS0H筐钟,這也解釋了為什么要 * 16,而且為什么CPU內(nèi)16位的邏輯地址可以表示20位的物理地址赋朦。
尋址方式: 段地址 * 16 + 偏移地址 - 段寄存器
段超越:改變默認(rèn)的段地址 mov AX,DS:[BP] ; [DS*16+BP] -> AX
FLAGS中的OF與CF說明:
相同點(diǎn):都是表示最高位的進(jìn)位篓冲。
不同點(diǎn):CF表示無(wú)符號(hào)數(shù)運(yùn)算結(jié)果是否超出范圍李破,結(jié)果正確。
OF表示有符號(hào)數(shù)運(yùn)算結(jié)果是否超出范圍壹将,結(jié)果錯(cuò)誤嗤攻。
實(shí)際都是表示進(jìn)位,但是用OF來標(biāo)記有符號(hào)數(shù)運(yùn)算是否溢出诽俯,用CF表示無(wú)符號(hào)數(shù)運(yùn)算是否有進(jìn)位妇菱,具體為有符號(hào)數(shù)還是無(wú)符號(hào)數(shù)運(yùn)算還得從程序員使用哪個(gè)標(biāo)記來判斷。
[ ]符號(hào)說明: []表示物理地址的數(shù)據(jù)暴区。表示的內(nèi)存數(shù)據(jù)大小不確定闯团,看具體mov的數(shù)據(jù)大小來決定,但也可以通過類型說明符來限制mov的類型颜启。
mov [2000H],23 ;錯(cuò)誤偷俭,內(nèi)存大小不確定
mov BYTE PTR [2000H],23; 表示23位字節(jié)類型
多字節(jié)數(shù)存儲(chǔ)說明: 用一段連續(xù)的地址存儲(chǔ),用小端方式存儲(chǔ):低對(duì)低缰盏,高對(duì)高。低位地址指向多字節(jié)的數(shù)據(jù)段淹遵。