条件转移指令是指在满足一定条件时进行相对转移
判A内容是否为0转移指令JZrelJNZrel第一指令的功能是:如果(A)=0,则转移,不然次序执行(执行本指令的下一条指令)
转移到什么地方去呢
如果按照传统的办法,就要算偏移量,很麻烦,好在现在我们能借助于机器汇编了
因此这第指令我们能这样理解:JZ标号
即转移到标号处
下面举一例说明:MOVA,R0JZL1MOVR1,#00HAJMPL2L1:MOVR1,#0FFHL2:SJMPL2END在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH
而如果R0中的值不等于0,则次序执行,也就是执行MOVR1,#00H指令
最终的执行结果是R1中的值等于0
第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移
把上面的那个例程中的JZ改成JNZ试试吧,看看程序执行的结果是什么
比较转移指令CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,#data,标号
这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的
但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的
如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了
例:MOVA,R0CJNEA,#10H,L1MOVR1,#0FFHAJMPL3L1:JCL2MOVR1,#0AAHAJMPL3L