失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 五 CPU详解 寄存器详解 标志寄存器详解

五 CPU详解 寄存器详解 标志寄存器详解

时间:2024-06-26 11:18:49

相关推荐

五 CPU详解 寄存器详解 标志寄存器详解

控制器、运算器、寄存器组成CPU

控制器:领导

运算器:员工,计算数据

寄存器:寄存数据信息,在内存与运算器之间

硬盘运算速度<内存运算速度<寄存器运算速度

寄存器:(寄存器16位[寄存器高8与低8],内存8位)

1. 通用寄存器(16位):AX、BX(基址寄存器)、CX、DX

例如:往寄存器BX放入16进制数AF1E(16位二进制)

入:r bx出:bx 0000入:AF1Er 查看最后信息 //AF为高8,1E为低8

AX分为AH和AL

BX分为BH和BL

CX分为CH和CL

DX分为DH和DL

2. 变址寄存器 si, di(16位,不分高低位,si:源变值寄存器,di:目的变值寄存器)

实例:

assume cs:code,ds:datadata segmentdata endscode segmentstart:mov si,0001Hmov di,0002Hmov ax,4c00Hint 21Hcode endsend start

3. 基址寄存器 bx,bp(ss栈基址寄存器)

使用寄存器bp,段地址默认为SS。

4. 标志寄存器

在计算机中,有一个专用16位的寄存器FLAGS(又称:标志寄存器)。

标志寄存器是按位起作用的,每一位都有专门的含义,记录特定的信息。

FLAGS寄存器结构:

0 CF进位(是/否) CY NC

1

2 PF奇偶(偶/奇) PE PO

3

4 AF辅助进位(是/否) AC NA

5

6 ZF零(是/否) ZR NZ

7 SF符号(负/正) NG PL

8 TF

9 IF中断(允许/关闭) EI DI

10 DF方向(减量/增量) DN UP

11 OF溢出(是/否)OV NV

12

13

14

15

标志寄存器标志位的作用:

a 存储相关指令的某些执行结果(理解:自动赋值)

b 为CPU执行相关指令提供行为依据(判断某位上的值而决定执行哪条汇编指令)

c 控制CPU的相关工作方式(控制工作方式,比如从左向右还是从右向左)

ZF 标志寄存器(0标志位)

ZF位于标志寄存器的第六位,是零标志寄存器。

它负责记录相关指令执行后,其结果是否为0。如果结果为0,那么ZF值为1;如果结果不为0,那么ZF值为0。

注意:在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。

ADD

SUB

INC

DEC

MUL

DIV

mov则属于不影响标志位的。

assume cs:code,ds:data,ss:stackdata segmentdw 256 dup (0H)data endsstack segmentdw 256 dup (0H)stack endscode segmentstart:mov ax,12Hsub ax,11H ;ZF标志位不为0,结果为NZsub ax,1H;ZF标志位为1,结果为ZRmov bx,2Hdec bx ;ZF标志位不为0,结果为NZdec bx ;ZF标志位为1,结果为ZRdec bx ;ZF标志位不为0,结果为NZmov ax,4c00Hint 21Hcode endsend start

PF 标志寄存器

PF位于标志寄存器的第二位,是奇偶标志位。

它负责记录相关指令执行后,其结果低8位中1的个数是否为偶数。如果1的个数为偶数,PF值为1;如果为奇数,PF值为0。

注意:在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。

assume cs:code,ds:data,ss:stackdata segmentdw 256 dup (0H)data endsstack segmentdw 256 dup (0H)stack endscode segmentstart:mov bl,1H;PO 奇数add bl,1H;PO 奇数add bl,1H;PE 偶数mov ax,4c00Hint 21Hcode endsend start

SF 标志寄存器

SF位于标志寄存器的第七位,是符号标志位。

它记录相关指令执行后,其结果是否为负。如果结果为负,SF值为1;如果结果非负,SF值为0。

注意:

在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。

在计算机指令中,有的指令的执行将影响多个标志寄存器位。

assume cs:code,ds:data,ss:stackdata segmentdw 256 dup (0H)data endsstack segmentdw 256 dup (0H)stack endscode segmentstart:mov al,10000001B ;无符号,值为PLadd al,00000001B ;有符号数,最高为负数符号,值为NGmov al,00000001B ;无符号,值为PL(要脱离上面的数据)add al,00000001B ;有符号数,最高为正数符号,值为PLmov ax,4c00Hint 21Hcode endsend start

CF 标志寄存器(必须为无符号数:是否有进位,就是相加有进位;或者借位,就是相减从最高位借位)

CF位于标志寄存器的第零位,是进位标志位。

它记录相关指令执行后,其运算结果的最高有效位向更高位的进位值,或从更高位的借位值。

注意:

在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。

在计算机指令中,有的指令的执行将影响多个标志寄存器位。

assume cs:code,ds:data,ss:stackdata segmentdw 256 dup (0H)data endsstack segmentdw 256 dup (0H)stack endscode segmentstart:mov bl,00000000Badd bl,10000001B;不会有进位,值为NCadd bl,10000000B;有进位,值为CYmov bl,00000001Bsub bl,00000001B;不会有借位,值为NCsub bl,00000001B;有借位,值为CYmov ax,4c00Hint 21Hcode endsend start

OF 标志寄存器(必须为有符号数,超出取值范围

OF位于标志寄存器的第十一位,是溢出标志位。

它记录对有符号数运算的结果是否发生了溢出。如果发生溢出,OF的值为1;如果没有发生溢出,OF的值为0。

8位有符号数表示范围为-128 ~ +127

0 00000000

-128 10000000

8位无符号数表示范围为0 ~ 255

注意:

在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。

在计算机指令中,有的指令的执行将影响多个标志寄存器位。

assume cs:code,ds:data,ss:stackdata segmentdw 256 dup (0H)data endsstack segmentdw 256 dup (0H)stack endscode segmentstart:mov bl,01111000Badd bl,00010100B ;有符号数,有进位,有溢出,值为OVmov bl,10001000B ; -120 减 -20sub bl,11101100B ;有符号数,等于-140,超出-128取值范围,有溢出,值为OVmov ax,4c00Hint 21Hcode endsend start

DF 标志寄存器(赋值粘贴功能)

DF位于标志寄存器的第十位,是方向标志位。

在串处理指令中,它控制每次操作后si、di的增减变化。

当DF=0时,每次操作后si、di递增。

当DF=1时,每次操作后si、di递减。

CLD指令:将标志寄存器的DF位置0。

STD指令:将标志寄存器的DF位置1。

movsb指令:串传送指令

功能:将ds:si指向的内存单元中的字节传送入es:di指向的内存单元,然后根据DF标志位的值,将si、di递增或递减。

movsw指令

功能:将ds:si指向的内存单元中的字传送入es:di指向的内存单元,然后根据DF标志位的值,将si、di递增2或递减2。

;从前向后依次复制粘贴,递增assume cs:code,ds:data,ss:stackdata segmentdb 'china os'db 8 dup (0H)data endsstack segmentdw 256 dup (0H)stack endscode segmentstart:mov ax,datamov ds,axmov si,0Hmov es,axmov di,8Hcld ;设置DF值为0movsb ;依次将ds寄存器数据偏移赋值到8-16,标志位递增,0赋值8movsb ;1赋值9movsb ;2赋值Amovsbmovsbmovsbmovsbmovsbmov ax,4c00Hint 21Hcode endsend start

;从后向前依次复制粘贴,递减assume cs:code,ds:data,ss:stackdata segmentdb 'china os'db 8 dup (0H)data endsstack segmentdw 256 dup (0H)stack endscode segmentstart:mov ax,datamov ds,axmov si,7Hmov es,axmov di,FHstd ;设置DF值为1movsb ;依次将ds寄存器数据偏移赋值到16-8,标志位递减,7赋值Fmovsb ;6赋值Emovsb ;5赋值Dmovsbmovsbmovsbmovsbmovsbmov ax,4c00Hint 21Hcode endsend start

如果觉得《五 CPU详解 寄存器详解 标志寄存器详解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。