大家好,欢迎来到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. 标志寄存器
在计算机中,有一个专用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