| 作者 | 主题 |
|---|---|
|
老学童 奇侠
经验值:8218 发帖数:765 精华帖:32 |
楼主
主题:JPZ指令前为什么要+0
最近一段时间读了一些德国人写的程序,发现一个不理解的编程方式,就是凡是在执行‘JPZ’这个跳转指令前,经常要将前面计算的DWORD或DINT类型值进行一个+0计算后,再执行JPZ这个指令,有点匪夷所思,例如:
... NULL: L #l_z_sp; // DWORD类型 +D ; T #l_z_sp; // = IN1 + IN2 in ms L 0; +D ; JPZ pos; ... 又例如: ... T #l_date; // DINT类型 JU kdgr; grl: TAK ; L 0; +D ; JPZ kdgr; ... 在执行+0前,累加器1中肯定是一个32位值,加上一个16位的0值能起什么作用呢?难道只是为了将原先的数值暂存到累加器2中?临时变量里有啊!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
|
|
n次看你的背影 奇侠 经验值:7974 发帖数:2321 精华帖:73 |
1楼
主题:回复:JPZ指令前为什么要+0
老学童大侠,我是这样理解的:JPZ(大于等于0跳转指令),它是根据程序状态字中的CC1和CC0这两个位的状态判断是否执行跳转,如果CC 1=0/CC 0=0 or CC 1=1/CC 0=0那么执行跳转,否则不跳转;而只有在进行算术运算后CC 1和CC 0的状态才会被刷新。所以编程者做了一条空加法指令(其实用减去0也可以),这样就刷新了程序状态字中的CC1和CC0的状态,然后用了这条JPZ指令来判断是否跳转。
另外直接装载0用>=比较指令,判断程序状态字的RLO位,用JC或者JNC来跳转也是一样的。
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
|