汇编语言的标志寄存器和条件转移指令
来源:互联网 发布:电子证书制作软件 编辑:程序博客网 时间:2024/06/05 07:05
16位CPU内部有一个16位的标志寄存器,它包含9个标志位。这些标志位主要用来反映处理器的状态和运算结果的某些特征。各标志位在标志寄存器内的分布如图2.2所示。
图2.2 16位/32位标志寄存器的示意图
上面9个标志位可分为二组:运算结果标志位(有背景色的标志位)和状态控制标志位。前者受算术运算和逻辑运算结果的影响,后者受一些控制指令执行的影响。
条件转移指令(Transfer Conditionally)
条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。微机的指令系统提供了丰富的条件转移指令来满足各种不同的转移需要,在编程序时,要对它们灵活运用。
条件转移指令又分三大类:基于无符号数的条件转移指令、基于有符号数的条件转移指令和基于特殊算术标志位的条件转移指令。
、无符号数的条件转移指令(Jumps Based on Unsigned (Logic) Data)
指令的助忆符
检测的转移条件功能描述JE/JZ
ZF=1Jump Equal or Jump ZeroJNE/JNZ
ZF=0Jump Not Equal or Jump Not ZeroJA/JNBE
CF=0 and ZF=0Jump Above or Jump Not Below or EqualJAE/JNB
CF=0Jump Above or Equal or Jump Not BelowJB/JNAE
CF=1Jump Below or Jump Not Above or EqualJBE/JNA
CF=1 or AF=1Jump Below or Equal or Jump Not Above、有符号数的条件转移指令(Jumps Based on Signed (Arithmetic) Data)
指令的助忆符
检测的转移条件功能描述JE/JZ
ZF=1Jump Equal or Jump ZeroJNE/JNZ
ZF=0Jump Not Equal or Jump Not ZeroJG/JNLE
ZF=0 and SF=OFJump Greater or Jump Not Less or EqualJGE/JNL
SF=OFJump Greater or Equal or Jump Not LessJL/JNGE
SF≠OFJump Less or Jump Not Greater or EqualJLE/JNG
ZF=1 or SF≠OFJump Less or Equal or Jump Not Greater、特殊算术标志位的条件转移指令(Jumps Based on Special Arithmetic Tests)
指令的助忆符
检测的转移条件功能描述JC
CF=1Jump CarryJNC
CF=0Jump Not CarryJO
OF=1Jump OverflowJNO
OF=0Jump Not OverflowJP/JPE
PF=1Jump Parity or Jump Parity EvenJNP/JPO
PF=0Jump Not Parity or Jump Parity OddJS
SF=1Jump Sign (negative)JNS
SF=0Jump No Sign (positive)例5.15 编写一程序段,它把寄存器AX-BX的绝对值存入BX中。
解:next:…SUBBX, AXJNSnextNEGBX…例5.16 已知一个字节变量char,试编写一程序段,把其所存的大写字母变成小写字母。
解:next:…charDB 'F' ;变量说明…MOVAL, charCMPAL, 'A'JBnext;注意:字符是无符号数,不要使用指令JLCMPAL, 'Z'JAnextADDchar, 20H;小写字母比大写字母的ASCII码大20H…如果不知道(或忘了)大小写字母ASCII码之间的关系,那么,可用数值表达式'a'-'A'、'b'-'B'、…、'z'-'Z'等来代替具体的数值20H。
例5.17 编写一段程序,完成下面计算公式,其中:变量X和Y都是字类型。
解: …XDW ?;变量说明YDW ?… MOV AX, XMOVBX, AX;用BX来临时存放计算结果CMPAX, 0JLEsetdataCMPAX, 500JGcase3ADDBX, 100D;BX=X+100JMP setdatanext:SUBBX, 50D;BX=X-50setdata:MOVY, BX;把计算结果赋给变量Y…例5.18 下面循环体的指令代码字节数超过128,试改写该循环。
…MOV CX, COUNT;给循环计数器赋初值(>0)again:循环体指令序列;循环体的首地址偏移量大于128LOOP again解: …MOV CX, COUNTagain:循环体指令序列DEC CXJNZ again;把LOOP指令改为条件转移指令- 汇编语言的标志寄存器和条件转移指令
- 汇编语言的标志寄存器和条件转移指令
- -------汇编语言--标志寄存器--转移指令---
- 汇编语言条件转移(短转移)指令列表
- 汇编语言常用的标志寄存器
- 汇编语言-转移指令的原理
- x86 汇编语言标志寄存器
- 汇编语言-标志寄存器
- 汇编语言之标志寄存器
- 关于汇编语言寄存器和指令操作的整理
- 关于汇编语言寄存器和指令操作的整理
- 关于汇编语言寄存器和指令操作的整理
- 关于汇编语言寄存器和指令操作的整理
- 关于汇编语言寄存器和指令操作的整理
- 关于汇编语言寄存器和指令操作的整理
- 汇编语言之转移指令和原理
- 条件转移指令和无条件转移指令练习
- 转移地址在寄存器的JMP指令
- PHP程序员从入门到大师
- C primer plus第11章(字符串和字符函数)习题(10选择排序)
- android中Touch事件的处理逻辑
- 随笔
- 关于不同版本qt上字体问题的解决方案
- 汇编语言的标志寄存器和条件转移指令
- ListCtrl获取首列值相同的插入算法
- C#数据库还原与备份
- 走出浮躁的泥沼:仅专注就能胜过大部分人
- (C# 版描述)选择排序算法以及排序时间的测试 --数据结构
- 2013年3月13日----控制不同的文字字体
- 1028. List Sorting
- 2013-03-13
- typedef的用法