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

五、CPU详解、寄存器详解、标志寄存器详解控制器、运算器、寄存器组成CPU 控制器:领导运算器:员工,计算数据寄存器:寄存数据信息,在内存与运算器之间硬盘运算速度<内存运算速度<寄存器运算速度寄存器:(寄存器16位[寄存器高8与低8],内存8位) 1.通用寄存器(16位):AX、BX(基址寄存器)、CX、DX例如:往寄存器BX放入16进制数AF1E(16位二进制)入:rbx出:b…

大家好,欢迎来到IT知识分享网。

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

 

控制器:领导

运算器:员工,计算数据

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

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

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

 

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

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

入:r bx
出:bx 0000
入:AF1E
r  查看最后信息  //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:data
data segment
	
data ends

code segment
start:
	mov si,0001H
	mov di,0002H
 
    mov ax,4c00H
    int 21H
code ends
end start

 

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

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

 

4. 标志寄存器

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

在计算机中,有一个专用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:stack
data segment
	dw 256 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov ax,12H
    sub ax,11H    ;ZF标志位不为0,结果为NZ
    sub ax,1H     ;ZF标志位为1,结果为ZR

    mov bx,2H
    dec bx        ;ZF标志位不为0,结果为NZ
    dec bx        ;ZF标志位为1,结果为ZR
    dec bx        ;ZF标志位不为0,结果为NZ
 
    mov ax,4c00H
    int 21H
code ends
end start

PF 标志寄存器

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

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

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

assume cs:code,ds:data,ss:stack
data segment
	dw 256 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov bl,1H      ;PO  奇数
    add bl,1H      ;PO  奇数
    add bl,1H      ;PE  偶数
 
    mov ax,4c00H
    int 21H
code ends
end start

SF 标志寄存器

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

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

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

assume cs:code,ds:data,ss:stack
data segment
	dw 256 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov al,10000001B    ;无符号,值为PL
    add al,00000001B    ;有符号数,最高为负数符号,值为NG

    mov al,00000001B    ;无符号,值为PL(要脱离上面的数据)
    add al,00000001B    ;有符号数,最高为正数符号,值为PL
 
    mov ax,4c00H
    int 21H
code ends
end start

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

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

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

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

assume cs:code,ds:data,ss:stack
data segment
	dw 256 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov bl,00000000B
    add bl,10000001B     ;不会有进位,值为NC
    add bl,10000000B     ;有进位,值为CY

    mov bl,00000001B
    sub bl,00000001B     ;不会有借位,值为NC
    sub bl,00000001B     ;有借位,值为CY
 
    mov ax,4c00H
    int 21H
code ends
end start

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

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

    它记录对有符号数运算的结果是否发生了溢出。如果发生溢出,OF的值为1;如果没有发生溢出,OF的值为0。
    
    8位有符号数表示范围为-128 ~ +127
    0     00000000
    -128    10000000

    8位无符号数表示范围为0 ~ 255
    
    注意:
    在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。
    在计算机指令中,有的指令的执行将影响多个标志寄存器位。

assume cs:code,ds:data,ss:stack
data segment
	dw 256 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov bl,01111000B     
    add bl,00010100B    ;有符号数,有进位,有溢出,值为OV

    mov bl,10001000B    ; -120 减 -20
    sub bl,11101100B    ;有符号数,等于-140,超出-128取值范围,有溢出,值为OV
 
    mov ax,4c00H
    int 21H
code ends
end 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:stack
data segment
	db 'china os'
    db 8 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov ax,data
    mov ds,ax
    mov si,0H
    
    mov es,ax
    mov di,8H

    cld         ;设置DF值为0
    movsb       ;依次将ds寄存器数据偏移赋值到8-16,标志位递增,0赋值8
    movsb       ;1赋值9
    movsb       ;2赋值A
    movsb
    movsb
    movsb
    movsb
    movsb
 
    mov ax,4c00H
    int 21H
code ends
end start
;从后向前依次复制粘贴,递减
assume cs:code,ds:data,ss:stack
data segment
	db 'china os'
    db 8 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov ax,data
    mov ds,ax
    mov si,7H
    
    mov es,ax
    mov di,FH

    std         ;设置DF值为1
    movsb       ;依次将ds寄存器数据偏移赋值到16-8,标志位递减,7赋值F
    movsb       ;6赋值E
    movsb       ;5赋值D
    movsb
    movsb
    movsb
    movsb
    movsb
 
    mov ax,4c00H
    int 21H
code ends
end start

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22078.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信