版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5讲选择程序设计掌握JMP指令的作用。在熟悉标志位设置规则的基础上掌握Jcc指令的作用。能够综合运用JMP、Jcc指令进行分支结构程序设计。第5讲选择程序设计1无条件转移指令2无条件转移指令3分支程序设计1无条件转移指令只要执行无条件转移指令JMP,就使程序转到指定的目标地址处,从目标地址处开始执行指令操作数label是要转移到的目标地址(目的地址、转移地址)JMP指令分成4种类型:⑴段内转移、相对寻址⑵段内转移、间接寻址⑶段间转移、直接寻址⑷段间转移、间接寻址JMPlabel
;程序转向label标号指定的地址目标地址的范围:段内段内转移——近转移(near)在当前代码段64KB范围内转移(±32KB范围)不需要更改CS段地址,只要改变IP偏移地址段内转移——短转移(short)转移范围可以用一个字节表达,在段内-128~+127范围的转移代码段代码段目标地址的范围:段间段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址代码段代码段
实际编程时,MASM汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、nearptr或farptr强制段内转移、相对寻址JMPlabel
;IP←IP+位移量位移量是紧接着JMP指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负again:
deccx
;标号again的指令
……
jmp
again
;转移到again处继续执行
……
jmp
output
;转向output
……output:
movresult,al
;标号output的指令段内转移、间接寻址JMPr16/m16
;IP←r16/m16将一个16位寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容jmpax
;IP←AXjmpwordptr[2000h]
;IP←[2000h]
段间转移、直接寻址JMPfarptrlabel
;IP←label的偏移地址 ;CS←label的段地址将标号所在段的段地址作为新的CS值,标号在该段内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行jmpfarptrotherseg
;远转移到代码段2的otherseg段间转移、间接寻址JMPfarptrmem
;IP←[mem],CS←[mem+2]用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,低位字送IP寄存器,高位字送CS寄存器movwordptr[bx],0movwordptr[bx+2],1500hJMPfarptr[bx]
;转移到1500h:02条件转移指令指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令操作数label是采用相对寻址方式的短转移标号表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移距当前IP地址-128~+127个单元的范围之内Jcclabel
;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行Jcc指令的分类Jcc指令不影响标志,但要利用标志(表2.2)。根据利用的标志位不同,16条指令分成3种情况:(1)判断单个标志位状态(2)比较无符号数高低(3)比较有符号数大小(1)判断单个标志位状态这组指令单独判断5个状态标志之一JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等)JZ/JE(JumpifZero/Equal)当ZF=1时发生跳转。JNZ/JNE(JumpifNotZero/NotEqual)当ZF=0时发生跳转。(1)判断单个标志位状态JS和JNS:利用符号标志SF,判断结果是正是负JS(JumpifSign)SF=1时发生跳转JNS(JumpifNotSign)SF=0时发生跳转(1)判断单个标志位状态JO和JNO:利用溢出标志OF,判断结果是否产生溢出JO(JumpifOverflow)OF=1时发生跳转JNO(JumpifNotOverflow)OF=0时发生跳转(1)判断单个标志位状态JP/JPE和JNP/JPO:利用奇偶标志PF,判断结果中“1”的个数是偶是奇JP/JPE(JumpifParity/ParityEven)PF=1时发生跳转JNP/JPO(JumpifNotNotParity/ParityOdd)PF=0时发生跳转(1)判断单个标志位状态JC和JNC:利用进位标志CF,判断结果是否进位或借位JC(JumpifOverflow)PF=1时发生跳转JNC(JumpifNotOverflow)PF=0时发生跳转(2)比较无符号数高低无符号数的大小用高(Above)低(Below)表示利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系:低于(不高于等于):JB(JNAE)CF=1时发生跳转不低于(高于等于):JNB(JAE)CF=0时发生跳转低于等于(不高于):JBE(JNA)CF=1或ZF=1时发生跳转不低于等于(高于):JNBE(JA
)CF=0且ZF=0时发生跳转(3)比较有符号数大小有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)两数的大小分成4种关系:⑴小于(不大于等于):JL(JNGE)SF≠OF时发生跳转⑵不小于(大于等于):JNL(JGE)SF=OF时发生跳转⑶小于等于(不大于):JLE(JNG)SF≠OF或ZF=1时发生跳转⑷不小于等于(大于):JNLE(JG
)SF=OF且ZF=0时发生跳转3分支程序设计分支程序根据条件是真或假决定执行与否判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制;还可以采用MASM6.x提供的条件控制伪指令实现3分支程序设计单分支结构条件成立?语句NYIF<条件表达式>
语句序列ENDIF示例1;计算|X-Y|(绝对值);X和Y为存放于X单元和Y单元的16位操作数;结果存入result
movax,X subax,Y
jgelab1
movcx,0subcx,ax movax,cxlab1: movresult,ax3分支程序设计双分支结构条件成立?语句2N语句1YIF<条件表达式>
语句序列1ELSE
语句序列2ENDIF示例2判断一元二次方程ax2+bx+c=0是否有实根,若有实根则将字节变量tag置为1,否则,置为0.
.modelsmall.stack.dataadb6bdb10cdb4.code.startupmoval,bimulalmovbx,ax
moval,aimulcmovcx,4imulcxcmpbx,ax
jgeyes
movtag,0
jmpdone
yes:movtag,1 .exit0end
done:一定要用JMP指令跳过语句23分支程序设计复杂条件的处理在高级语言中经常出现逻辑运算符AND、OR连接两个或两个以上的关系比较,作为判断条件使用,这种复杂条件判断在汇编语言中被分解成为两个简单判断进行处理。示例3从键盘上输入2个一位数,计算并输出它们的乘积。若通过键盘输入的不是一位数字,则输出字符”E”提示错误。计算两个一位数的乘积.modelsmall.stack.data.code.startupmovah,01hint21hmovbl,almovah,02hmovdl,0Dhint21hmovdl,0ahint21hmovah,1int21hsubal,30hsubbl,30h
mulblmovbl,10divbladdax,3030hmovbx,axmovah,02hmovdl,0Dhint21hmovdl,0ahint21hmovdl,blmovah,02hint21hmovdl,bhint21h.exit0endLab1:movah,02hmovdl,”E”int21hcmpal,”0”jblab1cmpal,”9”jalab1cmpal,”0”jblab1cmpal,”9”jalab13分支程序设计多分支程序设计语句2条件成立?语句1语句nSWITCH<条件表达式>{CASE常量表达式1:
语句1CASE常量表达式2:
语句2…CASE常量表达式n:
语句nDEFAULT:语句n+1}示例4设X为带符号数的字节数,求下面分段函数的值。Y=3X-8X>10X10≥X≥-103X-8X>10其中,存放结果的变量Y是字变量求函数值.modelsmall.stack.data.code.startupmoval,xcmpal,10jglab1cmpal,-10jllab2cbwjmplab3lab1:movbl,3imulblsubax,8jmplab3lab2:movbl,2imulbladdax,10jmplab3lab3:movy,ax.exit0end示例5程序根据键盘输入的1-8数字转向8个不同的处理程序段,若用户输入的是非法数字,则提示重新输入。需要在数据段事先安排一个按顺序排列的转移地址表输入的数字作为偏移量。因为只有2个字节16位偏移地址,所以偏移量需要乘2地址表分支1地址分支2地址...table dwdisp1,disp2,disp3,disp4,... .datamsg db'Inputnumber(1~8):',0dh,0ah,'$'msg1 db'Chapter1:...',0dh,0ah,'$'msg2 db'Chapter2:...',0dh,0ah,'$‘ ...msg8 db'Chapter8:...',0dh,0ah,'$'table dwdisp1,disp2,disp3,disp4 dwdisp5,disp6,disp7,disp8 ;取得各个标号的偏移地址此处等同于offsetdisp1start1: movdx,offsetmsg ;提示输入数字
movah,9 int21h movah,1 ;等待按键
int21h cmpal,'1' ;数字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精打细算在北师大版的故事讲解
- 高一英语必修北师大版教学方法
- 北师大版课件鞋店经营智慧分析与实践
- 塑料制品的消费观念更新与变革
- 苏教版四年级上册数学每日一练练习题汇编
- 北师大版雨后课件教学计划
- 苏教版小学生负数理解教案
- 北师大版上学期语文期末复习策略
- 北师大版四年级数学下册期末单元答案
- 2024年BM系列便携式多功能超声波诊断仪项目合作计划书
- 2024-2030年中国肺癌行业市场发展趋势与前景展望战略分析报告
- QC成果注意事项及发布技巧
- 部编本语文三年级上册第二单元提升练习
- 沙袋围堰施工方案
- 医学计量在中国的现状及发展趋势
- 四人投资合伙协议书通用模板
- 苏教版数学五年级下册《六 圆 练习十五 》课件
- 贪吃对治汇总
- 人教精通版四年级上册英语单元重点词语及句子练习
- 卫生院重点岗位轮岗制度
- 南京旅游职业学院《烹饪工艺与营养》专业建设方案
评论
0/150
提交评论