創(chuàng)建個(gè)人網(wǎng)站多少錢外包推廣服務(wù)
通用寄存器
- AX,BX,CX,DX,是四種通用寄存器,用于保存數(shù)據(jù),是數(shù)據(jù)寄存器
- 四種寄存器容量都為兩個(gè)字節(jié),是十六位寄存器,表示范圍0-65535,216
- 上述四種寄存器都可以分割成對(duì)應(yīng)的2個(gè)8位寄存器,
- AX = AH + AL,高八位成為AH寄存器,H是high的意思,低八位是AL寄存器,L是low的意思
- BX = BH + BL
- CX = CH + CL
- DX = DH + DL
上述的八位寄存器,表示范圍0-255
- 將16位寄存器分為兩種寄存器:
- 為了兼容性,低位寄存器是為了保證原先的八位的就程序也能夠讀取,原先的CPU僅僅有八位寄存器去書寫程序
- 8X86CPU一共有16條數(shù)據(jù)線,一次可以處理8位數(shù)據(jù)和16位數(shù)據(jù),兩種數(shù)據(jù)
- 8位數(shù)據(jù),字節(jié)型數(shù)據(jù) byte = 8 bits;16位數(shù)據(jù),字型數(shù)據(jù),2 byte = 16bits,一個(gè)字型數(shù)據(jù)有兩個(gè)字節(jié)型數(shù)據(jù)構(gòu)成,分別是高位字節(jié)和低位字節(jié),高位字節(jié)存在AH,BH,CH,DH,低位字節(jié)存放在AL,BL,CL,DL
寄存位實(shí)驗(yàn)
寄存器實(shí)驗(yàn)1,移動(dòng)數(shù)據(jù)
- 在用寄存器移動(dòng)數(shù)據(jù)時(shí),數(shù)據(jù)的位數(shù)要和寄存器的容量相適應(yīng),AX寄存器是16位寄存器,對(duì)應(yīng)的應(yīng)該是四個(gè)16位進(jìn)制的數(shù)字,不能夠?qū)L八位寄存器的數(shù)據(jù)轉(zhuǎn)移到十六位寄存器中去,同樣的,也不可以將AX16位寄存器中的數(shù)據(jù)直接傳給AL8位寄存器中去
寄存器實(shí)驗(yàn)二,加法
八位寄存器,進(jìn)行八位運(yùn)算,并不會(huì)將多出來(lái)的位進(jìn)到高位寄存器中去,僅僅只會(huì)自動(dòng)清零,然后再接著運(yùn)算,
總結(jié):
- 寄存器是相互獨(dú)立的,并不會(huì)出現(xiàn)進(jìn)位的,如果八位計(jì)算超出了八位,那就僅僅保存最后的八位,多余的消失。
- 寄存器的加法是與位數(shù)相關(guān)的,八位寄存器和八位寄存器相加,十六位寄存器和十六位寄存器相加。八位相加出現(xiàn)多于八位,僅保留八位。
- 基本操作 a——輸入基本的指令
* r——展示寄存器的值
地址寄存器
- 基本操作 摁“r”,然后在摁“d”,顯示出對(duì)應(yīng)的寄存器
- 073F:0100》》段地址:偏移地址
- 段地址:DS,ES,CS,SS
- 偏移地址:SP,BP,SI,DI,IP,BX
- 寄存器的位數(shù)是16位,但是CPU是有20根地址線,寄存器的表達(dá)局限性,限制了CPU的尋址能力,為了讓16位能夠表達(dá)二十位,就出現(xiàn)了地址加法器,地址的計(jì)算方式,將十六位表達(dá),變成二十位表達(dá)。
- 地址加法器:段地址 X 16 (十進(jìn)制的16,10H在十六進(jìn)制之下) + 偏移地址 = 物理地址
- 段地址 X 16 = 基礎(chǔ)地址(就是往后移了一位,擴(kuò)大了一位,使之能夠滿足二十位的需求),基礎(chǔ)地址 + 偏移地址 = 物理地址
- 實(shí)際操作:一個(gè)最終的物理地址只要滿足公式,都可以找到同樣的物理地址,段地址的范圍是0 - ffff,只要滿足公式,那么最終到達(dá)的物理地址都是相同的。
練習(xí)題
有一個(gè)數(shù)據(jù)放在內(nèi)存為20000H的單元格,現(xiàn)在給段地址位SA,若想將偏移地址尋找到此單元格,則SA應(yīng)該滿足的條件最小:10H,最大1001H,這是一個(gè)問(wèn)題,十六位的范圍:0 - FFFF,始終少了一個(gè)一,而整除的時(shí)候會(huì)自動(dòng)舍棄末位的1,所以不可取。
CPU如何區(qū)分?jǐn)?shù)據(jù)和指令
- u指令:將某個(gè)內(nèi)存地址開始的字節(jié),全部當(dāng)作指令
- d指令:將某個(gè)內(nèi)存地址開始的字節(jié),全部當(dāng)作數(shù)據(jù)
- 兩次相同的地址,但是是完全不同的指令,顯示的結(jié)果也不同
- 兩次相同的地址,但是是完全不同的指令,顯示的結(jié)果也不同
- r + 空格 + ds,修改對(duì)應(yīng)的段地址寄存器的值;r 顯示CPU中所有寄存器的值。:
- 雖說(shuō)內(nèi)存中的數(shù)據(jù)和指令是一致的,但是CPU還是能夠區(qū)分出來(lái),CPU是將CS:IP地址所指向的內(nèi)容全部當(dāng)作指令來(lái)執(zhí)行。
在8086CPU,在任意時(shí)刻,CPU將CS:IP所指向的內(nèi)容,全部當(dāng)作指令去執(zhí)行
實(shí)驗(yàn)——CPU區(qū)分指令和數(shù)據(jù)
將我輸入的對(duì)應(yīng)的二進(jìn)制代碼,變成對(duì)應(yīng)的命令去執(zhí)行,修改CS:IP的地址,讓其去執(zhí)行對(duì)應(yīng)的輸入的代碼,用e指令修改2000:0的地址,使其為下列相關(guān)的地址,去執(zhí)行。
執(zhí)行之后,指令行左側(cè)地址已經(jīng)改變,讀取地址,就按照地址里的數(shù)據(jù)進(jìn)行執(zhí)行,問(wèn)題在于,平常讀取數(shù)據(jù)難道會(huì)切換嗎?
為什么每一次u都是不一樣的,難道再寫入數(shù)據(jù)嗎?
指令執(zhí)行的過(guò)程
- CPU從CS:IP所指向的內(nèi)存單元中讀取指令,存放到指令緩存器中去
- IP = IP + 所讀指令的長(zhǎng)度,從而指向下一條指令
- 執(zhí)行指令緩存器中的內(nèi)容,回到步驟一
IP寄存器指令的長(zhǎng)度關(guān)系
在2000:0中輸入如下的數(shù)字
修改控制寄存器的命令,然后進(jìn)行運(yùn)算。第一次運(yùn)算,是以b8204e作為第一個(gè)控制指令開始計(jì)算的,mov占了三個(gè)字節(jié),下一次執(zhí)行,ip的值就會(huì)加3。
分別對(duì)應(yīng)的是:
CS:IP 當(dāng)前控制符的對(duì)應(yīng)的字符串 控制指令 操作的數(shù)據(jù)
問(wèn)題是:操作的數(shù)據(jù)從哪里來(lái)?
第一次執(zhí)行
第二次執(zhí)行
下述顯示的是073F:0100對(duì)應(yīng)的數(shù)據(jù)形式
下述顯示的是073F:0100對(duì)應(yīng)的匯編指令的形式
下述時(shí)開始運(yùn)行
未運(yùn)行時(shí)
JMP指令
- 轉(zhuǎn)移指令,可以修改CS和IP這兩個(gè)寄存器,決定了CPU從哪里讀取數(shù)據(jù)