资源描述:
《汇编教程条件转移指令》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1汇编语言程序设计条件转移指令指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令操作数label是采用短转移,称为相对寻址方式JccJcclabel;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行相对寻址方式Jcc指令的操作数label是一个标号一个8位位移量Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移,且距当前IP地址-128~+127个单元的范围之内,属于段内短距离转移相对寻址方式Jcc指令为2个字节,
2、条件不满足时的顺序执行就是当前指令偏移指针IP加2JccJcc指令的分类不影响标志,但要利用标志。根据利用的标志位不同,16条指令分成3种情况:1.判断单个标志位状态2.比较无符号数高低3.比较有符号数大小Jcc条件转移指令中的条件ccJcc1.判断单个标志位状态这组指令单独判断5个状态标志之一⑴JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等)⑵JS和JNS:利用符号标志SF,判断结果是正是负⑶JO和JNO:利用溢出标志OF,判断结果是否产生溢出⑷JP/JPE和JNP/JPO:利用奇偶
3、标志PF,判断结果中“1”的个数是偶是奇⑸JC/JB/JNAE和JNC/JNB/JAE:利用进位标志CF,判断结果是否进位或借位Jcc例:JZ/JNZ指令testal,80h;测试最高位jznext0;D7=0(ZF=1),转移movah,0ffh;D7=1,顺序执行jmpdone;无条件转向next0:movah,0done:...testal,80h;测试最高位jnznext1;D7=1(ZF=0),转移movah,0;D7=0,顺序执行jmpdone;无条件转向next1:movah,0ffhdone
4、:...例:JS/JNS指令;计算
5、X-Y
6、(绝对值);X和Y为存放于X单元和Y单元的16位操作数;结果存入resultmovax,Xsubax,Yjnsnonnegnegax;neg是求补指令nonneg:movresult,ax例:JO/JNO指令;计算X-Y;;X和Y为存放于X单元和Y单元的16位操作数;若溢出,则转移到overflow处理movax,Xsubax,Yjooverflow...;无溢出,结果正确overflow:...;有溢出处理例:JP/JNP指令andal,7fh;最高位置“0”,
7、同时判断“1”的个数jnpnext;个数已为奇数,则转向nextoral,80h;否则,最高位置“1”next:...;设字符的ASCII码在AL寄存器中;将字符加上奇校验位;在字符ASCII码中为“1”的个数已为奇数时;则令其最高位为“0”;否则令最高位为“1”例:JC/JNC指令xoral,al;AL=0,CF=0again:testbx,0ffffh;等价于cmpbx,0jenextshlbx,1jncagainincaljmpagainnext:...;AL保存1的个数;记录BX中1的个数记录BX中
8、“1”的个数xoral,al;AL=0,CF=0again:cmpbx,0jznextshlbx,1;也可使用shrbx,1adcal,0jmpagainnext:...;AL保存1的个数另一种做法比较无符号数高低无符号数的大小用高(Above)低(Below)表示利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系:⑴低于(不高于等于):JB(JNAE)⑵不低于(高于等于):JNB(JAE)⑶低于等于(不高于):JBE(JNA)⑷不低于等于(高于):JNBE(JA)Jcc例:比较无符
9、号数cmpax,bx;比较ax和bxjnbnext;若ax≥bx,转移xchgax,bx;若ax<bx,交换next:...比较有符号数大小有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)两数的大小分成4种关系:⑴小于(不大于等于):JL(JNGE)⑵不小于(大于等于):JNL(JGE)⑶小于等于(不大于):JLE(JNG)⑷不小于等于(大于):JNLE(JG)Jcc例:比较有符号数cmpax,bx;比较ax和bxjnlnext;若ax≥bx,转移xc
10、hgax,bx;若ax<bx,交换next:...16位数转换为ASCII码实验内容1、设X,Y为存放在X,Y单元中的16位操作数,判断X>Y,若成立执行X-Y,否则计算
11、X-Y
12、,并把结果存入RESULT中2、假设有100个16位无符号数存放在数据段,把它们的和求出来,作为32位数存在DX和AX中3、数据段有一个首地址为ARRAY的N字数组,要求测试其中正数、0、负数的个数,正数个数放在DI中,0的个数放在SI