五、CPU详解、寄存器详解、标志寄存器详解
控制器、运算器、寄存器组成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 segmentdata endscode segment
start:mov si,0001Hmov di,0002Hmov ax,4c00Hint 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 segmentdw 256 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start: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 21H
code ends
end start
PF 标志寄存器
PF位于标志寄存器的第二位,是奇偶标志位。
它负责记录相关指令执行后,其结果低8位中1的个数是否为偶数。如果1的个数为偶数,PF值为1;如果为奇数,PF值为0。
注意:在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。
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 奇数add bl,1H ;PO 奇数add bl,1H ;PE 偶数mov ax,4c00Hint 21H
code ends
end start
SF 标志寄存器
SF位于标志寄存器的第七位,是符号标志位。
它记录相关指令执行后,其结果是否为负。如果结果为负,SF值为1;如果结果非负,SF值为0。
注意:
在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。
在计算机指令中,有的指令的执行将影响多个标志寄存器位。
assume cs:code,ds:data,ss:stack
data segmentdw 256 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov al,10000001B ;无符号,值为PLadd al,00000001B ;有符号数,最高为负数符号,值为NGmov al,00000001B ;无符号,值为PL(要脱离上面的数据)add al,00000001B ;有符号数,最高为正数符号,值为PLmov ax,4c00Hint 21H
code ends
end start
CF 标志寄存器(必须为无符号数:是否有进位,就是相加有进位;或者借位,就是相减从最高位借位)
CF位于标志寄存器的第零位,是进位标志位。
它记录相关指令执行后,其运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
注意:
在计算机指令中,有的指令的执行是影响标志寄存器的,有的则不影响。
在计算机指令中,有的指令的执行将影响多个标志寄存器位。
assume cs:code,ds:data,ss:stack
data segmentdw 256 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov bl,00000000Badd bl,10000001B ;不会有进位,值为NCadd bl,10000000B ;有进位,值为CYmov bl,00000001Bsub bl,00000001B ;不会有借位,值为NCsub bl,00000001B ;有借位,值为CYmov ax,4c00Hint 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 segmentdw 256 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov bl,01111000B add bl,00010100B ;有符号数,有进位,有溢出,值为OVmov bl,10001000B ; -120 减 -20sub bl,11101100B ;有符号数,等于-140,超出-128取值范围,有溢出,值为OVmov ax,4c00Hint 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 segmentdb 'china os'db 8 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov ax,datamov ds,axmov si,0Hmov es,axmov di,8Hcld ;设置DF值为0movsb ;依次将ds寄存器数据偏移赋值到8-16,标志位递增,0赋值8movsb ;1赋值9movsb ;2赋值Amovsbmovsbmovsbmovsbmovsbmov ax,4c00Hint 21H
code ends
end start
;从后向前依次复制粘贴,递减
assume cs:code,ds:data,ss:stack
data segmentdb 'china os'db 8 dup (0H)
data endsstack segmentdw 256 dup (0H)
stack endscode segment
start:mov ax,datamov ds,axmov si,7Hmov es,axmov di,FHstd ;设置DF值为1movsb ;依次将ds寄存器数据偏移赋值到16-8,标志位递减,7赋值Fmovsb ;6赋值Emovsb ;5赋值Dmovsbmovsbmovsbmovsbmovsbmov ax,4c00Hint 21H
code ends
end start
五、CPU详解、寄存器详解、标志寄存器详解相关推荐
- 标志寄存器_访问标志寄存器,并与寄存器B |交换标志寄存器F的内容 8085微处理器...
标志寄存器 Problem statement: 问题陈述: Write an assembly language program in 8085 microprocessor to access F ...
- 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解
寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解 1. 什么是寄存器 1.1 概念 1. 什么是寄存器: 2. 寄存器作用: 1.2 通俗易懂理解寄存器 2. x86寄存器种类说明及汇编代码 ...
- 汇编:CPU结构 - FLAG标志寄存器和相关指令
文章目录 一.概述 1.标志寄存器的作用 2.8086CPU标志寄存器的结构 3.debug查看标志位 二.标志位 1.CF(0):进位标志位 2.PF(2):奇偶标志位 3.AF(4):辅助进位标志 ...
- Win-MASM64汇编语言-标志寄存器(EFLAGS/PSW/PUSHF/POPF)
CPU内部需要一种特殊的寄存器来完成下面三个功能 1.用来存储相关指令的执行结果是否满足某些特性 2.为cpu执行相关指令提供行为依据 3.用来控制cpu的相关工作方式 能完成上面三个功能的寄存器被成 ...
- 贺利坚老师汇编课程54笔记:标志寄存器
指路老师的博客 8086状态标志寄存器含义 FLAG标志寄存器:PSW/FLAGS,别称:程序状态字 8086CPU指令集中,有的指令的执行是影响标志寄存器,比如:add,sub,mul,div,in ...
- 我是如何学习Java的~标志寄存器及其应用
在8086CPU内部的寄存器中,还存在着一种特殊的寄存器,一些指令的执行会触发该寄存器中特定位的值的改变,以用来记录指令执行的一些结果情况.这个寄存器被称为标志寄存器. 标志寄存器也是16位,但不是每 ...
- IA-32寄存器(通用寄存器、EFLAGS寄存器、指令指针寄存器、段寄存器)
文章目录 一.通用寄存器(GPR) 二.EFLAGS寄存器(标志寄存器) 三.指令指针寄存器(EIP) 四.段寄存器(Segment Register) 通用寄存器(General Purpose R ...
- Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(6) - 64位RFLAGS
64位标志寄存器RFLAGS 在64位模式下,RFLAGS标志寄存器扩展到了64个比特位,但是最高32比特位全部是保留位.RFLAGS(64位模式)与EFLAGS(兼容模式)的系统标志位一致,没有增加 ...
- Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(5) - 32位EFLAGS - 系统标志
System Flags/Fields 标志寄存器的系统标志位与IO特权级(IOPL)域可以用来控制I/O,可屏蔽硬件中断,程序调试,任务切换,以及设置虚拟8086模式(参看下图).只有特权代码(通常 ...
最新文章
- ArcGIS使用Python脚本工具
- 数据挖掘系列(1)关联规则挖掘基本概念与Aprior算法
- MyBatis--连接池模块
- MySQL / 各种锁
- idea中如何创建servlet文件
- stm8s跳出中断程序c语言,stm8s103 利用中断判断长按短按,长按可以实现进入低功耗 短按1-2s跳出低功耗进入工作,实际情况是短按立马跳出低功耗,请各位大侠帮忙看看。附程序...
- 高压电是以交流,还是直流方式输送?
- PWA(Progressive Web App)入门系列:Fetch Request Headers Response Body
- 二叉线索树的线索化以及遍历
- public 返回一数组_数组:滑动窗口拯救了你
- 电脑下边的任务栏不见了_Win7系统电脑任务栏经常自动消失不见的解决方法
- JavaWeb在线聊天系统开发
- LinkedIn领英帐号被封(被限制登录)的解决办法
- latex不显示doi号
- 《AI·未来》 ---- 读书笔记
- 人工智能畅想ps海报教程_如何战胜鲁班人工智能做图?大战鲁班海报制作教程【PS教程】...
- Hexo Next 主题中添加本地搜索功能
- ACM题 ---小乔和小灰灰是好朋友问题
- IIS配置网站访问权限和安全
- 回调函数(简单易懂)
热门文章
- 复现原文(一):Single-cell RNA sequencing of human kidney(step by step)
- Mac计算器的计算过程怎么看?教你一键查看运算记录!
- ae插件Particle Projection for Mac(AE粒子投影插件)
- shell mysql_shell操作mysql
- clion中文乱码_CLion 遇到乱码的解决办法
- EXCEL表格转换成json数据工具
- php使用ftp远程上传文件类(解决主从文件同步问题的简单方法)
- 操作系统学习之用C语言模拟CLOCK算法
- 数字系统设计学习之VHDL输入设计
- ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)