|
本章學(xué)習(xí)圍繞寄存器展開,學(xué)習(xí)了CPU概述、通用寄存器、字在寄存器中的存放、匯編指令: mov, add、8086給出物理地址的方法、段寄存器CS和指令指針寄存器IP這幾個知識點。以下我便逐個寫出我認(rèn)為該知識點中的值得注意的地方。 1、CPU中有字長與位寬兩個概念,字長表示CPU在單位時間內(nèi)能一次處理的二進制位數(shù)。該指標(biāo)反映出CPU內(nèi)部運算處理的速度。位寬表示CPU通過外部數(shù)據(jù)總線與內(nèi)存之間一次能夠傳送的數(shù)據(jù)位。我們常說的x位寄存器其實指的便是CPU的字長。 2、8086CPU的14個寄存器中只有AX、BX、CX、DX這四個通用寄存器可拆分為高八位和低八位兩個寄存器.。 3、在mov和add指令中,兩個操作對象的位數(shù)應(yīng)一致。也就是說執(zhí)行指令之前數(shù)據(jù)位數(shù)不可高于寄存器位數(shù),而執(zhí)行指令之后可以(高于部分將被舍去)。如add 案例,100H便是一條錯誤的語句。 4、每一個內(nèi)存單元在這個空間中都有唯一的地址,這個唯一的地址稱為物理地址。而8086結(jié)構(gòu)表現(xiàn)物理地址時會出現(xiàn)障礙,因為8086內(nèi)部的寄存器都是16位的,而外部地址總線寬度為20位。也就是說8086存只能存16位(64KB),傳卻能傳20位(1MB)。為了解決這一問題8086CPU采用了用兩個16位地址合成一個20位的物理地址的方法,方法公式如下: 基礎(chǔ)地址(段地址*16)+偏移地址=物理地址 值得注意的是,段只是一個邏輯上的概念,同一個物理地址可以拆分為多個不同的段地址和偏移地址的組合,可以根據(jù)需要,將地址連續(xù)、起始物理地址為16倍數(shù)的一組內(nèi)存單元(不超過64KB)當(dāng)作一個段使用。 5、段地址*16還有一個更常用的說法是左移四位,此處的位數(shù)指的是二進制位數(shù)。一個數(shù)值的二進制形式左移N位,相當(dāng)于該數(shù)據(jù)乘以2的N次方。一個X進制的數(shù)據(jù)左移1位,相當(dāng)于乘以X。故而二進制左移4位其實就是十六進制左移一位。舉例:20H的數(shù)據(jù)乘以16后便會變成200H。 6、CS是代碼段段寄存器,用于存放代碼段的段地址。IP是指令指針寄存器,用于存放CPU將要讀取的指令在代碼段中的偏移地址。CS:IP對應(yīng)的物理地址存放的是CPU將要讀取的指令。CS和IP在總是成對出現(xiàn),(CS) × 16 + (IP) = 指令的物理地址。 7、計算機的工作過程有如下三個步驟: 第1步: CPU基于CS:IP,計算出物理地址,然后到相應(yīng)的內(nèi)存單元讀取指令,送到指令緩沖區(qū)。 第2步: CPU自動修改IP的值,IP = IP + 所讀取指令的長度,從而為下一條指令讀取做準(zhǔn)備; 第3步: 執(zhí)行指令。 轉(zhuǎn)第1步,重復(fù)此過程。 8、在CPU剛開始工作時,CS和IP被設(shè)置為CS=FFFFH,IP=0000H。若需指定CS和IP的值,則用指令cmp修改其二者內(nèi)容。 (1) 同時修改CS、IP的內(nèi)容:jmp 段地址: 偏移地址 (2) 只修改IP的內(nèi)容:jmp 某一合法寄存器(注意此處需要用一寄存器來對IP賦值,不可直接將數(shù)據(jù)傳給IP) |
|
|