五、CPU详解、寄存器详解、标志寄存器详解
控制器、運(yùn)算器、寄存器組成CPU
?
控制器:領(lǐng)導(dǎo)
運(yùn)算器:員工,計(jì)算數(shù)據(jù)
寄存器:寄存數(shù)據(jù)信息,在內(nèi)存與運(yùn)算器之間
硬盤運(yùn)算速度<內(nèi)存運(yùn)算速度<寄存器運(yùn)算速度
寄存器:(寄存器16位[寄存器高8與低8],內(nèi)存8位)
?
1. 通用寄存器(16位):AX、BX(基址寄存器)、CX、DX
例如:往寄存器BX放入16進(jìn)制數(shù)AF1E(16位二進(jìn)制)
入:r bx 出:bx 0000 入:AF1E r 查看最后信息 //AF為高8,1E為低8AX分為AH和AL
BX分為BH和BL
CX分為CH和CL
DX分為DH和DL
?
2. 變址寄存器 si, di(16位,不分高低位,si:源變值寄存器,di:目的變值寄存器)
實(shí)例:
assume cs:code,ds:data data segmentdata endscode segment start:mov si,0001Hmov di,0002Hmov ax,4c00Hint 21H code ends end start?
3. 基址寄存器 bx,bp(ss棧基址寄存器)
使用寄存器bp,段地址默認(rèn)為SS。
?
4. 標(biāo)志寄存器
在計(jì)算機(jī)中,有一個(gè)專用16位的寄存器FLAGS(又稱:標(biāo)志寄存器)。
標(biāo)志寄存器是按位起作用的,每一位都有專門的含義,記錄特定的信息。
FLAGS寄存器結(jié)構(gòu):
0?? ?CF進(jìn)位(是/否)?? ??? ?CY?? ?NC
1
2?? ?PF奇偶(偶/奇)?? ??? ?PE?? ?PO
3
4?? ?AF輔助進(jìn)位(是/否)?? ?AC?? ?NA
5
6?? ?ZF零(是/否)? ? ? ? ? ? ? ZR?? ?NZ
7?? ?SF符號(hào)(負(fù)/正)? ? ? ? ??NG?? ?PL
8?? ?TF
9?? ?IF中斷(允許/關(guān)閉)? ? ? ? EI?? ?DI
10?? ?DF方向(減量/增量)?? ?DN?? ?UP
11?? ?OF溢出(是/否)? ? ? ? ? ?OV?? ?NV
12
13
14
15
標(biāo)志寄存器標(biāo)志位的作用:
a 存儲(chǔ)相關(guān)指令的某些執(zhí)行結(jié)果(理解:自動(dòng)賦值)
b 為CPU執(zhí)行相關(guān)指令提供行為依據(jù)(判斷某位上的值而決定執(zhí)行哪條匯編指令)
c 控制CPU的相關(guān)工作方式(控制工作方式,比如從左向右還是從右向左)
ZF 標(biāo)志寄存器(0標(biāo)志位)
? ? ZF位于標(biāo)志寄存器的第六位,是零標(biāo)志寄存器。
?? ?它負(fù)責(zé)記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為0。如果結(jié)果為0,那么ZF值為1;如果結(jié)果不為0,那么ZF值為0。
?? ?注意:在計(jì)算機(jī)指令中,有的指令的執(zhí)行是影響標(biāo)志寄存器的,有的則不影響。
?? ?ADD
?? ?SUB
?? ?INC
?? ?DEC
?? ?MUL
?? ?DIV
? ? mov則屬于不影響標(biāo)志位的。
assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov ax,12Hsub ax,11H ;ZF標(biāo)志位不為0,結(jié)果為NZsub ax,1H ;ZF標(biāo)志位為1,結(jié)果為ZRmov bx,2Hdec bx ;ZF標(biāo)志位不為0,結(jié)果為NZdec bx ;ZF標(biāo)志位為1,結(jié)果為ZRdec bx ;ZF標(biāo)志位不為0,結(jié)果為NZmov ax,4c00Hint 21H code ends end startPF 標(biāo)志寄存器
? ? PF位于標(biāo)志寄存器的第二位,是奇偶標(biāo)志位。
?? ?它負(fù)責(zé)記錄相關(guān)指令執(zhí)行后,其結(jié)果低8位中1的個(gè)數(shù)是否為偶數(shù)。如果1的個(gè)數(shù)為偶數(shù),PF值為1;如果為奇數(shù),PF值為0。
?? ?注意:在計(jì)算機(jī)指令中,有的指令的執(zhí)行是影響標(biāo)志寄存器的,有的則不影響。
assume cs:code,ds:data,ss:stack data segmentdw 256 dup (0H) data endsstack segmentdw 256 dup (0H) stack endscode segment start:mov bl,1H ;PO 奇數(shù)add bl,1H ;PO 奇數(shù)add bl,1H ;PE 偶數(shù)mov ax,4c00Hint 21H code ends end startSF 標(biāo)志寄存器
? ? SF位于標(biāo)志寄存器的第七位,是符號(hào)標(biāo)志位。
?? ?它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為負(fù)。如果結(jié)果為負(fù),SF值為1;如果結(jié)果非負(fù),SF值為0。
?? ?注意:
?? ?在計(jì)算機(jī)指令中,有的指令的執(zhí)行是影響標(biāo)志寄存器的,有的則不影響。
?? ?在計(jì)算機(jī)指令中,有的指令的執(zhí)行將影響多個(gè)標(biāo)志寄存器位。
CF 標(biāo)志寄存器(必須為無符號(hào)數(shù):是否有進(jìn)位,就是相加有進(jìn)位;或者借位,就是相減從最高位借位)
? ? CF位于標(biāo)志寄存器的第零位,是進(jìn)位標(biāo)志位。
?? ?它記錄相關(guān)指令執(zhí)行后,其運(yùn)算結(jié)果的最高有效位向更高位的進(jìn)位值,或從更高位的借位值。
?? ?注意:
?? ?在計(jì)算機(jī)指令中,有的指令的執(zhí)行是影響標(biāo)志寄存器的,有的則不影響。
?? ?在計(jì)算機(jī)指令中,有的指令的執(zhí)行將影響多個(gè)標(biāo)志寄存器位。
OF 標(biāo)志寄存器(必須為有符號(hào)數(shù),超出取值范圍)
? ? OF位于標(biāo)志寄存器的第十一位,是溢出標(biāo)志位。
?? ?它記錄對(duì)有符號(hào)數(shù)運(yùn)算的結(jié)果是否發(fā)生了溢出。如果發(fā)生溢出,OF的值為1;如果沒有發(fā)生溢出,OF的值為0。
?? ?
?? ?8位有符號(hào)數(shù)表示范圍為-128 ~ +127
?? ?0 ?? ?00000000
?? ?-128?? ?10000000
?? ?8位無符號(hào)數(shù)表示范圍為0 ~ 255
?? ?
?? ?注意:
?? ?在計(jì)算機(jī)指令中,有的指令的執(zhí)行是影響標(biāo)志寄存器的,有的則不影響。
?? ?在計(jì)算機(jī)指令中,有的指令的執(zhí)行將影響多個(gè)標(biāo)志寄存器位。
DF 標(biāo)志寄存器(賦值粘貼功能)
? ? DF位于標(biāo)志寄存器的第十位,是方向標(biāo)志位。
?? ?在串處理指令中,它控制每次操作后si、di的增減變化。
?? ?當(dāng)DF=0時(shí),每次操作后si、di遞增。
?? ?當(dāng)DF=1時(shí),每次操作后si、di遞減。
?? ?CLD指令:將標(biāo)志寄存器的DF位置0。
?? ?STD指令:將標(biāo)志寄存器的DF位置1。
?? ?movsb指令:串傳送指令
?? ?功能:將ds:si指向的內(nèi)存單元中的字節(jié)傳送入es:di指向的內(nèi)存單元,然后根據(jù)DF標(biāo)志位的值,將si、di遞增或遞減。
? ? movsw指令
?? ?功能:將ds:si指向的內(nèi)存單元中的字傳送入es:di指向的內(nèi)存單元,然后根據(jù)DF標(biāo)志位的值,將si、di遞增2或遞減2。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的五、CPU详解、寄存器详解、标志寄存器详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python制作饼状图
- 下一篇: shell 字符串删除特定字符