您的位置 首页 FPGA

第14章 有条件跳转(X86汇编教程)

本X86汇编教程目录http:www51heicommcu2619html一阵疯狂的游戏后,我又回来了还记得无条件跳转吗?这回我将讲解有条件跳

X86汇编教程目录http://www.51hei.com/mcu/2619.html

一阵张狂的游戏后,我又回来了….还记得无条件跳转吗?这回我将解说有条件跳转.

什么是有条件跳转呢?那便是,有必要达到某某条件才干跳转,比如说有必要数字1和数字2相同才跳转,或许数字1比数字2大才跳转,假如条件没有完成则不跳转,相当于跳转指令不存在.或许你想到了高档言语的IF句子,没错,IF句子也是用有条件跳转完成的.
判别的进程是分两步进行的.先把2个数值运算一下,得出哪个数大哪个小或许是否等于.然后才是有条件跳转指令
前边说过,当咱们运用核算指令的时分标志寄存器会跟着核算成果改动,所以,从标志寄存器能够知道上一次核算出来的成果是负数仍是正数之类的信息.经过这些信息咱们就知道前次核算哪个数字比哪个大(条件是前次核算是运用减法核算),所以,判别的第一步,运算,一般用减法来做,SUBAX,BX这样就能依据有条件跳转指令知道AX和BX哪个大.有时分咱们期望进行一次SUB核算,但不期望某个数值被改动,这种时分,就用CMP指令吧.它会进行一次减法运算,只改动寄存器,不保存成果

指令名 :CMP
指令阐明 :全部用法和SUB减法指令相同.可是核算后核算成果不会保存下来.只会改动标志寄存器,用来判别2个数值的巨细 就用这个!


然后有条件跳转指令,这些指令的运用方法和JMP相同,所以不具体介绍,只简略阐明.


指令名 :JE
指令阐明 :全部用法和JMP跳转指令相同,见下边:
指令 要跳转的方位
与JMP不同的是前次核算成果为0才会跳转(想想用减法指令核算什么数字成果会为0?)没错,这条指令一般是判别2个数字是否相同用的,一个数字减去自己成果当然为0(当然,没说一定要这样,只需前次核算成果是0就能跳转,自己发挥智力开发其它用处吧).



指令名 :JNE
指令阐明 :和上个指令相反,前次核算成果不为0就跳转, 也便是减法核算两个数字不同的状况下

指令名 :JB
指令阐明 :溢出则跳转,什么是溢出呢?当核算(我这儿就假设为是减法核算了) 成果超越寄存核算成果的寄存器,也便是核算成果为17位,但寄存核算成果的寄存器为16位(放不进去)的时分就会溢出(这种状况在加法和乘法中会呈现)还有便是核算成果为小于0的数值(负数啊) ,想想减法核算什么状况下会呈现负数呢?当然是被减数小于减数的时分.所以这个能够判别出第一个数字是否比第二个数字小.

指令名 :JNB
指令阐明 :和JB指令相反,没有溢出和跳转…. (留意,核算成果为0也会跳转),也便是减法核算第1个数字不低于第2个数字的状况下

指令名 :JA
指令阐明 :前次数学核算(我这儿就假设为是减法核算了),成果不是0(那么2个数字不相同)而且没溢出(那就不可能是负数),也便是被减数比减数大才跳转

指令名 :JNA
指令阐明 :溢出或许核算成果相同则跳转, 也便是减法核算第1个数字不高于第2个数字的状况下(包含2个数字相同哟!)


实例:

MOV AX,1000HMOV BX,2000HCMP AX,BX ;CMP指令能虚拟一次减法运算.只改动标志寄存器.JA DaYu ;假如被减数比减数大就跳转(很显然跳转不了啊..)MOV BX,3000HDaYu:CMP BX,AXJA DaYu2 ;假如被减数比减数大就跳转(这回能跳了)MOV AX,1500HDaYu2:MOV AX,4C00H
顺带一提,有条件跳转指令和CMP能够离隔几行…只需中心没有会改动标志寄存器的指令(哪些指令会改标志寄存器请自行查询,一般只要核算指令才会改.)

作业:写篇代码,把一切判别指令用一次!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/317308.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部