探讨一条指令
比较转移指令CJNE A,#data , rel,在实际过程中一般是这样使用: CJNE A,#data,CMP CMP:JC rel 实际上变成了根据进位位C来进行程序跳转,这里进位位C是跳转的关键依据,对C的值带来影响的无非是这三种情况:A>data , A=data , A<date ,关于大于或小于这两种情况下C取何值一般的书都有详细介绍,至于等于,则一般不作介绍,那么等于不重要吗?否,如果被比较的两个数相等时C的值是随机的,则实际过程中如出现相等岂不是程序要乱跳? 只有一本书对等于的情况做了介绍:等于时C的值不变。 用这个说法去套一些程序,不能通解。 那么相等时C到底如何取值,我们可以在Keil中做一个实验,实验程序如下: ORG 0000H SJMP START ORG 0030H START: MOV A, #10 SETB C CJNE A,#8,CMP CMP: MOV 00H,C NOP NOP SETB C CJNE A,#10,CMP1 CMP1: MOV 08H,C NOP NOP SETB C CJNE A,#12,CMP2 CMP2: MOV 10H,C NOP NOP
CLR C CJNE A,#1,CMP3 CMP3: MOV 18H,C NOP NOP CLR C CJNE A,#10,CMP4 CMP4: MOV 20H,C NOP NOP CLR C CJNE A,#12,CMP5 CMP5: MOV 28H,C NOP NOP
SJMP $ END 在C分别取0和1时,就A>data , A=data , A<data三种情况分别讨论,实验结果表明,不管C先前等于什么,在两个被比较数相等时,执行指令后,C的值都是0。如果这样,再去看其它程序,也可以解得通,那么我的结论是正确的吗?请教各位老师!
|