,会导致类似的错误,而且更不容易发现。
2.位置不妥
指令2、3最可能出现这种错误。显然程序设计的思想是BCD码的高位在低地址单元,低位在高地址单元,从高到低依次存放。因此相加时必须从低位加起,所以作为被加数、加数的指针R0、R1必须通过程序前的一段指令调整到指向低位,调整的方法是原指针加字节数。但实际上直接加字节数后使得R0、R1指到最低字节的后面一个字节去了,故必须
首先将这1减掉,指向最低字节。从表面上看,指令2、3放在指令5后面似乎也实现了从低字节逐渐向高字节的推进作用,很多开发者一不留神就想当然的这样做了,结果前面的一层作用被疏漏掉了,导致程序错误。
3.指令不当
例如指令6由于疏忽写成ADD指令,则结果无法正确。
4.非法调用
按照子程序的说明,调用该子程序是非常容易的。但有时由于疏忽,没有按照入口要求送数出现非法调用现象,导致出错。这类错误在调试时会使得开发者一时不知错在子程序还是调用它的程序。例如,在调用前R7必须按字节数目正确置数,如果忘了此步,显然结果是无法正常的。
【例二】7135A/D转换结果读取中断子程序。
;*************************************************************************
;AD转换结果读取中断程序:(/INT0)
;万位引起中断: 其它各位采用查询方式
;结果暂存在AD单元中(3字节)
;*************************************************************************
ICL7135: CLR IE0 ;因为是电平触发,故必软件清中断标志
PUSH ACC ;保护现场
PUSH 02H ;R2
PUSH 01H ;R1
PUSH 00H
PUSH DPL
PUSH DPH
MOV DPTR, #I8155_PA ;读8155A口的A/D结果
MOVX A, @DPTR
MOV R2, A ;万位入R2
ANL A, #0F0H
&