原文链接: 汇编 标志寄存器 和寻址方式

上一篇: pyecharts 简单使用

下一篇: 汇编 转移指令

标志位简介:

标志寄存器,又称程序状态寄存器(它的内容是Program Status Word,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.

6个状态标志位

CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;
AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;
OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;

ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;
SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;
PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。

3个控制标志位

DF—方向标志,用来控制数据串操作指令的步进方向;
当设置DF=1时,将以递减顺序对数据串中的数据进行处理。当设置DF=0时,递增。
IF—中断允许标志,当设置IF=1,开中断,CPU可响应可屏蔽中断请求;当设置IF=0时,关中断,CPU不响应可屏蔽中断请求。
TF—陷阱标志,为程序调试而设的。当设置TF=1,CPU处于单步执行指令的方式;当设置TF=0时,CPU正常执行程序。

调试时

溢出OV(overflow,OF=1)

无溢出NV(no overflow,OF=0)

减量DN(direction down,DF=1)

增量UP(direction up,DF=0)

允许中断EI(enable interrupt,IF=1)

进制中断DI(disable interrupt,IF=0)

负NG(negative,SF=1)

正PL(plus,SF=0)

零ZR(zero,ZF=1)

非零NZ(no zero,ZF=0)

辅助进位AC(auxiliary carry,AF=1)

无辅助进位NA(no auxiliary carry,AF=0)

偶校验PE(even parity,PF=1)

奇校验PO(odd parity,PF=0)

进位CY(carry,CF=1)

无进位NC(no carry,CF=0)

CPU寄存器

8086 CPU 中寄存器总共为 14 个,且均为 16 位 。

即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。

而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。

通用寄存器:

AX,BX,CX,DX 称作为数据寄存器:

  • AX (Accumulator):累加寄存器,也称之为累加器;

  • BX (Base):基地址寄存器;

  • CX (Count):计数器寄存器;

  • DX (Data):数据寄存器;

可以分为两个独立的 8 位的 AH(BH, CH, DH) 和 AL(BL, CL, DL) 寄存器

SP 和 BP 又称作为指针寄存器:

  • SP (Stack Pointer):堆栈指针寄存器;

  • BP (Base Pointer):基指针寄存器;

SI 和 DI 又称作为变址寄存器:

  • SI (Source Index):源变址寄存器;

  • DI (Destination Index):目的变址寄存器;

控制寄存器:

  • IP (Instruction Pointer):指令指针寄存器;

  • FLAG:标志寄存器;

段寄存器:

  • CS (Code Segment):代码段寄存器;

  • DS (Data Segment):数据段寄存器;

  • SS (Stack Segment):堆栈段寄存器;

  • ES (Extra Segment):附加段寄存器;

操作数寻址

立即寻址

示例:

MOV AX, 1234H ; 给AX寄存器赋值为1234H

直接寻址

示例;

MOV BX, DS:[2000H]

操作数存放在存储器中, 偏移量直接写在操作数中,.

地址为数据段寄存器DS的值* 16 (<<4)然后加上直接给出的偏移量2000H.

寄存器寻址

示例:

MOV DX, AX ;将AX中的值赋给DX 

直接使用寄存器中的值作为操作数, 速度较快.

寄存器间接寻址

操作数存放在存储器中, 16位偏移地址存放在SI, DI, BP, BX四个寄存器之一中.

若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中.

即地址为:DS *16 + BX

示例:

MOV AX, [SI] ; 将DS*16 + SI中的值放入AX中

若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.

示例:

MOV AX, [BP]  ;将SS*16 + BP中的值放入AX中

可以直接指定使用的段寄存器:

MOV  AX, SS:[SI]  ;将SS*16 + SI中的值放入AX中

寄存器相对寻址

操作数存放在存储器中, 使用段寄存器内容* 16 加SI, DI, BP, BX四个寄存器之一的内容再加直接给出的位移量.

若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中; 若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.

与寄存器间接寻址相比只是增加了直接给出的偏移量:

示例:

MOV AX, [SI-2] ; 将 DS*16 + SI - 2中的值放入AX中
MOV AX, [BP+4]  ;将 SS*16 + BP + 4中的值放入AX中
MOV  AX, SS:[SI-8]  ;将 SS*16 + SI - 8中的值放入AX中

基址变址寻址

将段地址寄存器的值*16加上基址寄存器(BX,BP)之一的地址加上变址寄存器(SI, DI)之一的值作为地址.

若使用BX作基址 操作数默认放在DS所决定的数据段中; 若使用BP做基址, 操作数默认放在SS决定的堆栈段中.

示例:

MOV AX, [BX][SI] ; 将 DS*16 +BX + SI中的值放入AX中
MOV AX, [BP][DI]  ;将 SS*16 + BP + DI 中的值放入AX中
MOV  AX SS:[Bx][SI]  ;将 SS*16 + BX + SI 中的值放入AX中

基址变址相对寻址

在基址变址寻址基础上再加一个直接给出的偏移量:

示例:

MOV AX, 1234H[BX][DI] ;将DS * 16 + BX + DI + 1234H中的值放入AX中.

还有几种表示方法与上式等价:

MOV AX, [BX+DI+1234H]MOV AX, 1234H[BX+DI]MOV AX, 1234H[BX][DI]

汇编 标志寄存器 和寻址方式相关推荐

  1. 汇编常用寄存器以及寻址方式

    寄存器概览 常用寄存器 AX accumulator 累加寄存器 BX base 基址寄存器 CX count 计数寄存器 DX data 数据寄存器 SP stack pointer 堆栈寄存器 B ...

  2. X86汇编——标志寄存器

    FLAGS标志寄存器由一组状态标志.一个控制标志以.一组系统标志以及一部分保留未使用的位所组成.其状态标志用于表示逻辑或算术运算的结果,系统标志提供给操作系统使用. 在16位汇编中,我们可以使用16位 ...

  3. 汇编:寄存器的寻址方式

    寻址方式:在指令中得到操作数的方式,说白了也就是cpu怎么样从指令中得到操作数的方式. 操作数当然就是数据. 操作数还分种类: 数据操作数 :全都是在指令当中参加操作的数据. 立即操作数:它在指令中直 ...

  4. 汇编的8种寻址方式,以及2个默认段寄存器

    16位CPU所含有的寄存器有(见图2.1中16位寄存器部分): 4个数据寄存器(AX.BX.CX和DX) 2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP) ,32位CPU增加2个16位 ...

  5. 汇编常见寄存器以及标志位

    汇编常见寄存器以及标志位 通用寄存器 简写 英文全称 中文 作用 AX accumulator 累加器 存放操作数,与外部设备 BX base 通用寄存器 基址寄存器(计算存储器地址时用) CX co ...

  6. 标志寄存器PSW和汇编条件转移指令解释

    标志寄存器PSW 标志寄存器PSW(程序状态字寄存器PSW)    标志寄存器PSW是一个16为的寄存器.它反映了CPU运算的状态特征并且存放某些控制标志.8086使用了16位中的9位,包括6个状态标 ...

  7. 8086汇编复习3 - 标志寄存器 - 使用emu8086

    1 认识标志寄存器 标志寄存器     CPU内部有一种寄存器,具有三种作用:     1)存储相关指令的某些执行结果:     2)用来为CPU执行相关指令提供行为依据:     3) 用来控制CP ...

  8. 汇编中的通用寄存器、标志寄存器、段寄存器

    通用寄存器: 寄存器和变量差不多,目的都是用于保存一些即将操作的数据 EAX(accumulator) 寄存器:扩展累加寄存器(一般在乘/除中会被主动调用),也可以用于其他用途 ECX(Count) ...

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

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

最新文章

  1. Endnote在latex中的应用的两种方法
  2. C# WinForm 弹出模式窗口操作滚动条
  3. MySQL索引面试题分析(索引分析,典型题目案例)
  4. Oracle 查询当前日期
  5. symfony api 错误响应_如何设计一个牛逼的 API 接口
  6. SpringMVC+JWT+Swagger UI+RestFul
  7. Redmi K40游戏增强版首发雷电异形闪光灯:电竞气息十足!
  8. MHA高可用 MHA+Keepalive
  9. hadoop 集群调度 Azkaban2搭建
  10. 编译asp.net 2.0项目到dll文件
  11. 【转】【Python】Python网络编程
  12. Android EagleEye笔记
  13. PCL安装与配置(Windows10+VS2017 )
  14. Vue 使用XLSX导出excel,并且设置标题背景颜色、字体、居中。并且在前端导出成excel文件
  15. Shadowing, Overriding, Hiding and Obscuring
  16. 一、TF2 常用命令
  17. 写一个程序来确定到底谁是凶手
  18. 数字媒体概论——2D图像图形
  19. 基于模糊补偿的液压机械臂轨迹跟踪控制
  20. Oracle 表空间迁移

热门文章

  1. python爬取《你好, 李焕英》豆瓣评论数据
  2. AI Challenger 2018决赛在即,12月18-19日极客峰会免费抢票!
  3. alipay本地jar安装
  4. ctfshow web80-88
  5. 都市丽人荣获多项大奖情感营销触达消费者心流
  6. 解决搜狗输入法ctrl+shift+z 和phpstorm冲突的问题
  7. ITE(新联阳) soc显控芯片介绍
  8. html5制作交互式课件,网易科技频道--Hot Potatoes 教你如何制作交互式Web课件的新工具...
  9. homebrew 下载软件包失败,使用手动下载
  10. Android Binder机制情景源码分析之Binder回调注册和反注册