8086汇编复习3 - 标志寄存器 - 使用emu8086
1 认识标志寄存器
标志寄存器
CPU内部有一种寄存器,具有三种作用:
1)存储相关指令的某些执行结果;
2)用来为CPU执行相关指令提供行为依据;
3) 用来控制CPU的相关工作方式;
这种寄存器在8086中称为标志寄存器;标志寄存器简称flag;
8086标志寄存器有16位,其中存储的信息称为程序状态字(PSW);
flag是按位起作用;
flag的1、3、5、12、13、14、15位在8086CPU中没有使用;
进入emu8086;
按emulate按钮,弹出emulator窗口;
按flags按钮,弹出flags窗口,即标志寄存器;各位初始值如图;
按analyse按钮,弹出 lexical flag analyser窗口;表示出flags当前各位的值所表示的意义;
例如ZF是零标志位;
2 零标志,奇偶标志
ZF标志
零标志位;flag第6位;
记录相关指令执行后,结果是否为0;
结果为0,zf=1;否则,zf=0;
mov ax,1
sub ax,1
执行后结果为0;zf=1;
mov ax,1
and ax, 0
执行后,结果为0,zf=1;
有的指令是影响标志寄存器的,大都是运算指令;
有的指令不影响标志寄存器,大都是传送指令;
PF标志
flag第二位;奇偶标志位;
记录指令执行后,结果的所有bit位中1的个数是否为偶数;
1的个数为偶数,pf=1;否则=0;
mov al, 1
add al, 10
执行后,结果为00001011B,3个1,则pf=0;
mov al, 1
or al, 2
执行后,结果为00000011B,2个1,pf=1;
3 符号标志
SF标志
flag的第7位;符号标志;
记录指令执行后,结果是否为负;如果为负,sf=1;否则=0;
计算机中通常用补码表示有符号数据;
计算机中的一个数据可以看作有符号数,也可以看作无符号数;对于同一个二进制数据,计算机可以将它当作无符号数据来运算,也可以当作有符号数据来运算;
CPU在执行add等指令的时候,就已经包含了两种含义,也将得到用同一种信息来记录的两种结果;
SF标志,就是CPU对有符号数运算结果的一种记录,它记录数据的正负;
mov al, 10000001B
add al, 1
执行后,结果为 10000010B,sf=1,表示:如果指令进行的是有符号数运算,那么结果为负;
mov al, 10000001B
add al, 01111111B
执行后,结果为0,sf=0;表示:如果指令进行的是有符号数运算,那么结果为非负;
某些指令影响flag的多个标记位;
指令sub al, al执行后,ZF、PF、SF受影响,分别为:1,1,0;
4 进位标志
CF标志
flag第0位;进位标志;
一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值;
两个8位数据:98H+98H;将产生进位;进位在8位数中无法保存;CPU把进位记录在CF;
mov al, 98H
add al, al ; 执行后,al内容为30H,CF=1;
add al, al ; 执行后,al内容为60H, CF=0;
两个数据做减法,可能向更高位借位;
97H-98H,将产生借位,借位后,相当于计算197H-98H;CF也可以记录这个借位;
mov al, 97H
sub al, 98H ; 执行后,al内容为FFH,CF=1,CF记录了向更高位的借位;
sub al, al ; 执行后,al内容为0,CF=0;
5 溢出标志
OF标志
在进行有符号数运算时,如结果超过了机器所能表示的范围称为溢出;
8位有符号数,机器所能表示的范围是-128 - 127;16位有符号数,机器所能表示的范围是-32768-32767;
mov al, 98
add al, 99
执行后将产生溢出;98+99=197;
mov al, 0F0H;F0H,有符号数-16的补码;
add al, 088H ; 88H,有符号数-120的补码;
执行后将产生溢出;(-16) + (-120) = -136;
如果在进行有符号数运算时发生溢出,那么运算的结果将不正确;
flag的第11位是OF,溢出标志;发生溢出,OF=1;否则OF=0;
CF和OF的区别:
CF是对无符号数运算有意义,OF是对有符号数运算有意义;
8086汇编复习3 - 标志寄存器 - 使用emu8086相关推荐
- 8086汇编复习4 - int指令 - 使用emu8086
int指令 中断信息可以来自CPU的内部和外部:int指令引发的中断是内中断: int n,n为中断类型码: CPU执行int n指令,相当于引发一个n号中断的中断过程:执行过程如下: ...
- 8086汇编复习1 - 并使用emu8086模拟器查看效果
1 基本寄存器 不同的CPU,寄存器的个数.结构是不相同的. 8086CPU有14个寄存器:AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PS ...
- 8086汇编学习之DS寄存器、SS/SP寄存器
相关博客:8086汇编基础知识.通用寄存器.CS/IP寄存器与Debug的使用 一.DS寄存器 一个8086CPU寄存器均是16位的,而数据类型有以下两种: 1Byte = 8bit (字节型数据) ...
- 8086汇编学习之[BX],CX寄存器与loop指令,ES寄存器等
同类学习笔记总结: (一).8086汇编学习之基础知识.通用寄存器.CS/IP寄存器与Debug的使用 (二).8086汇编学习之DS寄存器.SS/SP寄存器 一.汇编程序的基本格式: 1.基本格式与 ...
- 8086汇编寄存器及指令汇总
1 寄存器的分类 通用寄存器: ax,bx,cx,dx,(ah,al,bh,bl,ch,cl,dh,dl): sp,bp,si,di 指令寄存器: ip 标志寄存器: FR 段寄存器: cs,ds ...
- 汇编 标志寄存器 和寻址方式
原文链接: 汇编 标志寄存器 和寻址方式 上一篇: pyecharts 简单使用 下一篇: 汇编 转移指令 标志位简介: 标志寄存器,又称程序状态寄存器(它的内容是Program Status Wor ...
- 【8086汇编基础】05--常用函数库文件--emu8086.inc
8086汇编语言初学者教程(第5部分) 常用函数库 - emu8086.inc 通过引用一些常用函数,可以使你编程更加方便.在你的程序中使用其他文件中的函数的方法是INCLUDE后面接上你要引用的文件 ...
- 标志寄存器PSW和汇编条件转移指令解释
标志寄存器PSW 标志寄存器PSW(程序状态字寄存器PSW) 标志寄存器PSW是一个16为的寄存器.它反映了CPU运算的状态特征并且存放某些控制标志.8086使用了16位中的9位,包括6个状态标 ...
- X86汇编——标志寄存器
FLAGS标志寄存器由一组状态标志.一个控制标志以.一组系统标志以及一部分保留未使用的位所组成.其状态标志用于表示逻辑或算术运算的结果,系统标志提供给操作系统使用. 在16位汇编中,我们可以使用16位 ...
最新文章
- dataframe groupby_PySpark SQL——SQL和pd.DataFrame的结合体
- 深入理解 Spring 之源码剖析IOC
- 关于Jmeter+Ant+Jenkins作为接口、性能自动化框架的误区
- 小程序使用wxs 解决wxml保留2位小数问题
- hadoop 传感器数据_晋城大数据培训
- 简析三星新专利,语音识别技术的新方法
- DataFrame的行列操作
- (转)使用Flexible实现手淘H5页面的终端适配
- VC2012换字体问题
- 2018华为网络技术大赛
- 杭州登山地图是谁开发的_浙江新添7个省级运动休闲小镇!杭州这个地方榜上有名!...
- 根据经纬度查询附近地点
- Arch 安装 deb
- c语言最大乘积问题,利用C语言来求最大连续子序列乘积的方法
- SoX使用手册(中文版)
- 总结JS中Math的方法及使用
- 仿网易云项目前端服务器部署+Nodejs部署
- iOS 获取当前的UIViewController
- 基于深度卷积神经网络(D-CNN)的图像去噪方法
- 世界各国城镇人口占比数据(1960-2018年)
热门文章
- 线性系统理论知识点总结_线性系统理论(七)推广与总结
- 计算机组成原理—— 指令系统
- [YTU]_2865( 结构体--日期计算)
- 5.6 matlab曲线拟合案例(股票预测问题、算法的参数优化问题)
- normest--2-范数的条件数估计
- 合并a[0..mid]和a[mid+1,n-1],其中这两个数组分别有序
- ML_Random_Forests
- Bear and Finding Criminals (模拟)
- 服务器可以pyqt显示吗,用pyqt+socket实现远程操作服务器的一个例子,PyQtsocket,方法,示例...
- pve远程连接 spcie_proxmox折腾 篇一:解决j3455直通iommu分组问题,PVE内核编译教程...