汇编语言标志位 含义 NV UP EI NG NZ AC PE CY
缩写原意:
Overflow of = OV NV [No Overflow]
Direction df = DN (decrement) UP (increment)
Interrupt if = EI (enabled) DI (disabled)
Sign sf = NG (negative) PL (positive)
Zero zf = ZR [zero] NZ [ Not zero]
Auxiliary Carry af = AC NA [ No AC ]
Parity pf = PE (even) PO (odd)
Carry cf = CY [Carry] NC [ No Carry]
==============
The individual abbreviations appear to have these meanings:
OV = OVerflow, NV = No oVerflow. DN = DowN, UP (up).
EI = Enable Interupt, DI = Disable Interupt.
NG = NeGative, PL = PLus; a strange mixing of terms due to the
fact that 'Odd Parity' is represented by PO (rather than
POsitive), but they still could have used 'MI' for MInus.
ZR = ZeRo, NZ = Not Zero.
AC = Auxiliary Carry, NA = Not Auxiliary carry.
PE = Parity Even, PO = Parity Odd. CY = CarrY, NC = No Carry.
调试程序DEBUG如何表达标志状态?
溢出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)
AH&AL=AX(accumulator):累加寄存器
BH&BL=BX(base):基址寄存器
CH&CL=CX(count):计数寄存器
DH&DL=DX(data):数据寄存器
SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):基址指针寄存器
SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器
IP(Instruction Pointer):指令指针寄存器
CS(Code Segment)代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器
OF overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1.
SF sign Flag 符号标志 记录运算结果的符号,结果负时为1.
ZF zero flag 零标志 运算结果等于0时为1,否则为0.
CF carry flag 进位标志 最高有效位产生进位时为1,否则为0.
AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.
PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0.
DF direcion flag 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.
IF interrupt flag 中断标志 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.
TF trap flag 陷阱标志 用于调试单步操作
设置 nv(清除) ov(溢出)
方向 dn(减) up(增)
中断 ei(启用) di(禁用)
正负 ng(负) pl(正)
零 zr(0) nz(非0)
辅助进位 ac(进位) na(不进位)
奇偶校验 pe(偶校验) po(奇校验)
进位 cy(进位) nc(不进位)
如:
OV DN EI NG ZR AC PE CY依次表示OF DF IF SF ZF AF PF CF都为1;
NV UP DI PL NZ NA PO NC依次表示OF DF IF SF ZF AF PF CF都为0.
|
of |
df |
if |
sf |
zf |
af |
pf |
cf |
|
|
标志位为1 |
ov |
dn |
ei |
ng |
zr |
ac |
pe |
cy |
|
标志位为0 |
nv |
up |
di |
pl |
nz |
na |
po |
nc |
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=0100 NV UP EI PL NZ NA PO NC
1392:0100 28C0 SUB AL,AL
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=0102 NV UP EI PL ZR NA PE NC
1392:0102 B010 MOV AL,10
-t
AX=0010 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=0104 NV UP EI PL ZR NA PE NC
1392:0104 0490 ADD AL,90
-t
AX=00A0 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=0106 NV UP EI NG NZ NA PE NC
1392:0106 B080 MOV AL,80
-t
AX=0080 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=0108 NV UP EI NG NZ NA PE NC
1392:0108 0480 ADD AL,80
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=010A OV UP EI PL ZR NA PE CY
1392:010A B0FC MOV AL,FC
-t
AX=00FC BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=010C OV UP EI PL ZR NA PE CY
1392:010C 0405 ADD AL,05
-t
AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=010E NV UP EI PL NZ AC PO CY
1392:010E B07D MOV AL,7D
-t
AX=007D BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=0110 NV UP EI PL NZ AC PO CY
1392:0110 040B ADD AL,0B
-
AX=0080 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1392 ES=1392 SS=1392 CS=1392 IP=0108 NV UP EI NG NZ NA PE NC
1392:0108 0480 ADD AL,80
-另外有人在网上做了很好的总结
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=19481&kindLevel=1&kindId=34937&postId=39398&readSg=1
补码运算时的溢出判断

这里我做个脚注:即两数原码数值部分是什么意思
10000101
11111011 分别是同一个数的原码与补码,去掉最高位的符号位,相加即得128
当两个以补码表示的负数相加时,会遇到两个问题。第一是两个负数的符号位相加,1+1后,本位为零,似乎负数相加变成了正数;其二是两个负数的数值部分之和,如果不向符号位进位,是不是就说明运算结果没有溢出?但不进位最终将导致两个负数相加成了正数,显然是错误的,这该怎么解释?如果两个以补码表示的负数的数值部分之和向符号位进位,会使运算结果依然为负数,那么这个运算结果是正确的吗?下面我们分析一下这个问题:
①只有真正意义上的相加才可能溢出,比如:
正+正,负+负,正-负,负-正
纯粹的减法是不可能溢出的,这一点仅需常识即可作出判断,所以遇到不是真正意义上的加法运算(当然,包括乘法和左移等)要你判断是否有溢出,直接就可以回答:OF=0;
②两正数之和的数值部分向符号位进位,显然是运算结果超过了指定位数的带符号数的表示范围,这就是典型的溢出;
③两负数之和的溢出判断是我们讨论的重点。我们先考察一下负数原码和补码数值部分之间的关系:以8位补码为例,负数原码和补码数值部分之和始终等于128(见上图)。由于这种关系,当原码数值大时对应的补码数值就小,反之也一样。所以,当两补码表示的负数的数值部分之和没有向符号位进位,说明两负数的原码之和必然向符号位进位,即发生溢出;反之,当两补码表示的负数的数值部分之和向符号位进位,那么对应两负数原码的数值之和就不可能向符号位进位,即运算结果没有溢出;并且在这种情形下补码之和的数值部分向符号位的进位,修正了两负数符号位相加本位为零的问题,使得两负数之和依然是个负数。
下面看两个负数补码相加溢出判断的实例:
例一:085h + 9ch
= 10000101b + 10011100b
两数相加,数值部分不会向符号位进位,这是不是就说明没有溢出呢?但由于计算结果为正,显然不对。我们还是看看两个数的原码之和再说:
10000101b的原码 = 11111011b(-123)
10011100b的原码 = 11100100b(-100)
显然,原码之和的数值部分将向符号位进位,显然是溢出无疑。
例二:0e7h + 0b3h
=11100111b + 10110011b
两数相加,数值部分会向符号位进位,这进位是溢出吗?还是看看原码吧!
11100111b的原码 = 10011001b(-25)
10110011b的原码 = 11001101b(-77)
容易看出,两数原码之和没有向符号位进位,即没有发生溢出。
其实归结起来,补码的溢出判断规则就一句话:
同号数相加如果结果的符号位和两加数不同,既是溢出。
这自然说明了:
⑴不是同号数相加,则不可能溢出;
⑵同号数相加有可能溢出;
⑶同号数相加如果结果的符号位和两加数不同,既是溢出。
评论次数(7) | 浏览次数(3316) | 类型(汇编语言) | 收藏此文 |
[ younggay 发表于 2009-07-22 09:59 ]
up
[ zhonghuade 发表于 2009-10-18 19:23 ]
老师!我觉得可以加一些实际的例子来说明补码溢出,比如说:8位机器数运算表示范围-128大于等于x小于等于127,发生溢出的具体情况?用实例来说明能让我们更深刻理解溢出的含义!请您指点!谢谢!
[ release_lag 发表于 2009-12-31 16:48 ]
呵呵,没想到我和楼主想到一起去了。
=============================
回楼上的
如果是两个8位数据相加
第一个加数的范围是:0ffH~80H(负数的范围)
第二个加数的范围是:0H~79H(正数的范围)
那么他们永远不会溢出
原因是他们符号不同,楼主已经说过:不同符号的两数相加,结果不可能溢出
同符号相加时,就检查结果的符号,如果符号与两个数据的符号不同时,则溢出
例如mov al,0e0h
add al,95H
结果是(al)=75H ;75H为正数,运算溢出
[ 游客 发表于 2011-01-01 21:53 ]
顶
[ 游客 发表于 2011-12-17 22:33 ]
文章很不错,可是还有很多地方不太明白。
1、(八位补码溢出判断图示)是根据什么原理推断出来的啊?负数原码和补码数值部分之和始终等于128,为什么?
2、只有真正意义上的相加才可能溢出,什么是真正意义上的相加?
3、请问什么是溢出?文中提到:两正数之和的数值部分向符号位进位,显然是运算结果超过了指定位数的带符号数的表示范围,这就是典型的溢出。运算结果超过了指定位数的带符号数的表示范围——这句话如何理解?不是同号数相加,则不可能溢出,超不超出范围如何判断?
[ 842460904 发表于 2012-09-03 23:38 ]
理论是应该负数原码和补码数值之和等于128,可为什么。fc和它的补码-4相加,即252+(-4)=?好像不在128-127之间。为什么,能解答下吗。谢谢
[ scuzg 发表于 2012-12-20 19:05 ]
0fch展开成二进制数:
11111100,其中最高位是符号位,所以:
7ch+4=80h=128
际原码和补码数值部分之和是128.
汇编语言标志位 含义 NV UP EI NG NZ AC PE CY的更多相关文章
- 汇编语言标记寄存器标记位_NV UP EI NG NZ AC PE CY
在8086CPU中,有一种标记寄存器,长度为16bit: 其中存储的信息被称为程序状态字(Program Status Word,PSW),以下将该寄存器简称为flag. 功能:1)用来存储相关指令的 ...
- 【.net程序破解】实战之标志位破解绕过注册法
今天有时间玩了下一个不错的软件Advanced System Cleaner,可惜要注册 于是想办法给破解了,这是跟之前不同的地方,属于.NET破解教程: 软件地址 - http://www.crsk ...
- TCP/IP 标志位 SYN ACK RST UTG PSH FIN
三次握手:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个 SYN=1,ACK=1标志的数据包给发送端,告诉它,可以 ...
- TCP标志位简析
TCP标志位简析 TCP标志位 URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据: ACK:此标志表示应答域有效, ...
- [apue] 一个查看当前终端标志位设置的小工具
话不多说,先看运行效果: >./term input flag 0x00000500 BRKINT not in ICRNL IGNBRK not in IGNCR not in IGNPAR ...
- USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)
转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...
- Java学习笔记14---使用标志位控制循环
使用标志位控制循环 前面提到了控制循环的常用技术:计数器控制的循环.另一种控制循环的常用技术是在读取和处理一个集合的值时指派一个特殊值.这个特殊的输入值也成为标志值(sentinel value),用 ...
- STM32 串口固件库中定义的几个中断标志位什么意思?
在stm32f10x_usart.h中以上几个宏,很没有规律,诈一看还真不知道为什么会这么定义,其实通过代码就很容易明白: D7~D5:代表中断标志位对应的中断使能位在 CR1.CR2还是CR3寄存器 ...
- 除了创建时指定窗口位置之外,还有3种移动窗口位置的办法(移动的同时往往可以改变窗口大小)(SetWindowPos最有用,它有许多标志位)
首先,在创立窗口对象的时候,CreateWindowEx就可以指定窗口的位置.除此之外,还有三种方法可以改变窗口的位置: procedure TWinControl.CreateWindowHandl ...
随机推荐
- python字符串连接的N种方式
python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 st ...
- Android中GridView通过自定义适配器(未优化)实现图文视图排列
Android中GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用该组件.下面我们通过代码实现如下图例(为了方便截图,将事件处理(土 ...
- Python之Mac上搭建集成开发环境
首先下载一个东西: 找到下载地址:https://download.jetbrains.8686c.com/python/pycharm-professional-2016.2.1.dmg pycha ...
- 配置git同时push到两个远端库的简单方法
最近在写一个开源的论坛系统,在发布代码时选择了github和coding这两个平台,我手懒,不想敲两次git push了,所以说突然有了一个很奇怪的需求:用一条git push同时push到两个远端代 ...
- SQL Server 关于列的权限控制
在SQL SERVER中列权限(Column Permissions)其实真没有什么好说的,但是好多人对这个都不甚了解,已经被人问了几次了,所以还是在这里介绍一下,很多人都会问,我能否单独对表的某列授 ...
- Linux监控工具介绍系列——free
在Linux系统中,我们查看.监控系统内存使用情况,一般最常用的命令就是free.free命令其实非常简单,参数也非常简单,但是里面很多知识点未必你都掌握了.下面总结一下我所了解的free命令.如有不 ...
- sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复. ...
- android 解决ListView点击与滑动事件冲突
如果你的ListView的Item有滑动功能,但又点击Item跳转到其它activity,这样若是在Adapter里面写点击事件是会导致滑动事件获取不到焦点而失效: 解决方法:不要在adapter里面 ...
- hammer.js的六大事件
1.Pan事件:在指定的dom区域内,一个手指放下并移动事件,即触屏中的拖动事件.这个事件在触屏开发中比较常用: Panstart 拖动开始 Panmove 拖动过程 Panend 拖动结束 Panc ...
- 修改 EF的默认连接工厂为 Sql Server 而不是LocalDb
当你用EF6创建一个新项目,不知你是否注意到默认的连接字符串使用了LocalDb而不是SQLServer.但你如果想把默认连接改用SQLSErver而不是LocalDb.这个其实很简单:只需修改下 ...