上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
转移指令
作者:未知 申领版权
2010年12月12日 共有 882 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    转移指令
    转移指令是汇编语 言程序员经常使用的一组指令。在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编 写,要么没有多少功能,所以,在汇编语言中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。
    转移指令分无条件转移指令和有条件转移指令两大类。
    1、无条件转移指令(Transfer Unconditionally)
    无条件转移指令包括:JMP、子程序的调用返回指令、中断的调用返回指令等。
    下面只介绍无条件转移指令JMP(Unconditional Jump)。
    JMP指令的一般形式:
    JMP  标号/Reg/Mem
    JMP指令是从程序当前执行的地方无条件转移到另一个地方执行。这种转移可以是一个短(short)转移(偏移量在[-128, 127]范围内),近(near)转移(偏移量在[-32K, 32K]范围内)或远(far)转移(在不同的代码段之间转移)。
    短和近转移是段内转移,JMP指令只把目标指令位置的偏移量赋值指令指针寄存器IP,从而实现转移功能。但远转移是段间转移,JMP指令不仅会改变指令指针寄存器IP的值,而且还会改变代码段寄存器CS的值。
    该转移指令的执行不影响任何标志位。
    

例如:
    
 
    

    
next1:
    

    
JMP
    
next1
    
;向前转移,偏移量之差为负数
    

    
JMP
    
next2
    
;向后转移,偏移量之差为正数
    

    
next2:
    

    

在目前流行的汇编系统中,当段内转移时,有些软件把该转移指令默认为近转移,从而使指令的偏移量用一个字来表示,于是生成3个字节的指令代码,但如果程序员自己清楚转移的幅度在一个短转移的范围之内,那么,可用前置short的办法来告诉汇编程序,让它产生2个字节的指令代码。
    比如:如果程序员知道在上例中的标号next2离“JMP next2”指令的偏移量不会超过127,那么,可用下面的转移方式来省掉一个字节的指令代码。
    
    2、条件转移指令(Transfer Conditionally)
    条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。微机的指令系统提供了丰富的条件转移指令来满足各种不同的转移需要,在编程序时,要对它们灵活运用。
    条件转移指令又分三大类:基于无符号数的条件转移指令、基于有符号数的条件转移指令和基于特殊算术标志位的条件转移指令。
    、无符号数的条件转移指令(Jumps Based on Unsigned (Logic) Data)
    

next2:
    

    
JMP
    
short next2
    
;生成2个字节的转移指令,从而节省一个字节
    

    

    
指令的助忆符
    
检测的转移条件
    
功能描述
    
JE/JZ
    
ZF=1
    
Jump Equal or Jump Zero
    
JNE/JNZ
    
ZF=0
    
Jump Not Equal or Jump Not Zero
    
JA/JNBE
    
CF=0 and ZF=0
    
Jump Above or Jump Not Below or Equal
    
JAE/JNB
    
CF=0
    
Jump Above or Equal or Jump Not Below
    
JB/JNAE
    
CF=1
    
Jump Below or Jump Not Above or Equal
    
JBE/JNA
    
CF=1 or AF=1
    
Jump Below or Equal or Jump Not Above
    

、有符号数的条件转移指令(Jumps Based on Signed (Arithmetic) Data)
    

指令的助忆符
    
检测的转移条件
    
功能描述
    
JE/JZ
    
ZF=1
    
Jump Equal or Jump Zero
    
JNE/JNZ
    
ZF=0
    
Jump Not Equal or Jump Not Zero
    
JG/JNLE
    
ZF=0 and SF=OF
    
Jump Greater or Jump Not Less or Equal
    
JGE/JNL
    
SF=OF
    
Jump Greater or Equal or Jump Not Less
    
JL/JNGE
    
SF≠OF
    
Jump Less or Jump Not Greater or Equal
    
JLE/JNG
    
ZF=1 or SF≠OF
    
Jump Less or Equal or Jump Not Greater
    

、特殊算术标志位的条件转移指令(Jumps Based on Special Arithmetic Tests)
    

指令的助忆符
    
检测的转移条件
    
功能描述
    
JC
    
CF=1
    
Jump Carry
    
JNC
    
CF=0
    
Jump Not Carry
    
JO
    
OF=1
    
Jump Overflow
    
JNO
    
OF=0
    
Jump Not Overflow
    
JP/JPE
    
PF=1
    
Jump Parity or Jump Parity Even
    
JNP/JPO
    
PF=0
    
Jump Not Parity or Jump Parity Odd
    
JS
    
SF=1
    
Jump Sign (negative)
    
JNS
    
SF=0
    
Jump No Sign (positive)
    

例5.15 编写一程序段,它把寄存器AX-BX的绝对值存入BX中。
    例5.16 已知一个字节变量char,试编写一程序段,把其所存的大写字母变成小写字母。
    

解:
    
next:
    

    
SUB
    
BX, AX
    
JNS
    
next
    
NEG
    
BX
    

    
解:
    
next:
    

    
char
    
DB  'F' 
    
;变量说明
    

    
MOV
    
AL, char
    
CMP
    
AL, 'A'
    
JB
    
next
    
;注意:字符是无符号数,不要使用指令JL
    
CMP
    
AL, 'Z'
    
JA
    
next
    
ADD
    
char, 20H
    
;小写字母比大写字母的ASCII码大20H
    

    

如果不知道(或忘了)大小写字母ASCII码之间的关系,那么,可用数值表达式'a'-'A'、'b'-'B'、…、'z'-'Z'等来代替具体的数值20H。
    例5.17 编写一段程序,完成下面计算公式,其中:变量X和Y都是字类型。
    

解:
    
 
    

    
X
    
DW  ?
    
;变量说明
    
Y
    
DW  ?
    

    
 
    
MOV 
    
AX, X
    
MOV
    
BX, AX
    
;用BX来临时存放计算结果
    
CMP
    
AX, 0
    
JLE
    
setdata
    
CMP
    
AX, 500
    
JG
    
case3
    
ADD
    
BX, 100D
    
;BX=X 100
    
JMP 
    
setdata
    
next:
    
SUB
    
BX, 50D
    
;BX=X-50
    
setdata:
    
MOV
    
Y, BX
    
;把计算结果赋给变量Y
    

    

例5.18 下面循环体的指令代码字节数超过128,试改写该循环。
    
    

 

相关新闻

对好点子说“不”
原则1聚焦最重要目标
高效执行4原则
如何使用本书
什么是高效执行4原则
真正的敌人——日常事务
单纯发号施令并不管用
是什么导致执行不力
致读者的一封信
战略与执行

您可能对这些感兴趣  

干货分享|10本最受国外孩子喜爱的英文词典——上
从孩子的表现看父母的缺点!请家长对号入座,看看你是哪一类?
20条制作PPT的视觉原则
培训简史:培训者必知的历史轨迹
广田丰管理培训生人才培养调查报告
第4讲 作为上司的职业经理
第3讲 作为同事的职业经理
第2讲 作为下属的职业经理
第1讲 培养经理人的管理素养
酒店前台新员工上岗培训计划

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》