控制器、运算器、寄存器组成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详解、寄存器详解、标志寄存器详解相关推荐

  1. 标志寄存器_访问标志寄存器,并与寄存器B |交换标志寄存器F的内容 8085微处理器...

    标志寄存器 Problem statement: 问题陈述: Write an assembly language program in 8085 microprocessor to access F ...

  2. 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解

    寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解 1. 什么是寄存器 1.1 概念 1. 什么是寄存器: 2. 寄存器作用: 1.2 通俗易懂理解寄存器 2. x86寄存器种类说明及汇编代码 ...

  3. 汇编:CPU结构 - FLAG标志寄存器和相关指令

    文章目录 一.概述 1.标志寄存器的作用 2.8086CPU标志寄存器的结构 3.debug查看标志位 二.标志位 1.CF(0):进位标志位 2.PF(2):奇偶标志位 3.AF(4):辅助进位标志 ...

  4. Win-MASM64汇编语言-标志寄存器(EFLAGS/PSW/PUSHF/POPF)

    CPU内部需要一种特殊的寄存器来完成下面三个功能 1.用来存储相关指令的执行结果是否满足某些特性 2.为cpu执行相关指令提供行为依据 3.用来控制cpu的相关工作方式 能完成上面三个功能的寄存器被成 ...

  5. 贺利坚老师汇编课程54笔记:标志寄存器

    指路老师的博客 8086状态标志寄存器含义 FLAG标志寄存器:PSW/FLAGS,别称:程序状态字 8086CPU指令集中,有的指令的执行是影响标志寄存器,比如:add,sub,mul,div,in ...

  6. 我是如何学习Java的~标志寄存器及其应用

    在8086CPU内部的寄存器中,还存在着一种特殊的寄存器,一些指令的执行会触发该寄存器中特定位的值的改变,以用来记录指令执行的一些结果情况.这个寄存器被称为标志寄存器. 标志寄存器也是16位,但不是每 ...

  7. IA-32寄存器(通用寄存器、EFLAGS寄存器、指令指针寄存器、段寄存器)

    文章目录 一.通用寄存器(GPR) 二.EFLAGS寄存器(标志寄存器) 三.指令指针寄存器(EIP) 四.段寄存器(Segment Register) 通用寄存器(General Purpose R ...

  8. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(6) - 64位RFLAGS

    64位标志寄存器RFLAGS 在64位模式下,RFLAGS标志寄存器扩展到了64个比特位,但是最高32比特位全部是保留位.RFLAGS(64位模式)与EFLAGS(兼容模式)的系统标志位一致,没有增加 ...

  9. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(5) - 32位EFLAGS - 系统标志

    System Flags/Fields 标志寄存器的系统标志位与IO特权级(IOPL)域可以用来控制I/O,可屏蔽硬件中断,程序调试,任务切换,以及设置虚拟8086模式(参看下图).只有特权代码(通常 ...

最新文章

  1. ArcGIS使用Python脚本工具
  2. 数据挖掘系列(1)关联规则挖掘基本概念与Aprior算法
  3. MyBatis--连接池模块
  4. MySQL / 各种锁
  5. idea中如何创建servlet文件
  6. stm8s跳出中断程序c语言,stm8s103 利用中断判断长按短按,长按可以实现进入低功耗 短按1-2s跳出低功耗进入工作,实际情况是短按立马跳出低功耗,请各位大侠帮忙看看。附程序...
  7. 高压电是以交流,还是直流方式输送?
  8. PWA(Progressive Web App)入门系列:Fetch Request Headers Response Body
  9. 二叉线索树的线索化以及遍历
  10. public 返回一数组_数组:滑动窗口拯救了你
  11. 电脑下边的任务栏不见了_Win7系统电脑任务栏经常自动消失不见的解决方法
  12. JavaWeb在线聊天系统开发
  13. LinkedIn领英帐号被封(被限制登录)的解决办法
  14. latex不显示doi号
  15. 《AI·未来》 ---- 读书笔记
  16. 人工智能畅想ps海报教程_如何战胜鲁班人工智能做图?大战鲁班海报制作教程【PS教程】...
  17. Hexo Next 主题中添加本地搜索功能
  18. ACM题 ---小乔和小灰灰是好朋友问题
  19. IIS配置网站访问权限和安全
  20. 回调函数(简单易懂)

热门文章

  1. 复现原文(一):Single-cell RNA sequencing of human kidney(step by step)
  2. Mac计算器的计算过程怎么看?教你一键查看运算记录!
  3. ae插件Particle Projection for Mac(AE粒子投影插件)
  4. shell mysql_shell操作mysql
  5. clion中文乱码_CLion 遇到乱码的解决办法
  6. EXCEL表格转换成json数据工具
  7. php使用ftp远程上传文件类(解决主从文件同步问题的简单方法)
  8. 操作系统学习之用C语言模拟CLOCK算法
  9. 数字系统设计学习之VHDL输入设计
  10. ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)