当PC指针指向数据场后,运行轨迹不可跟踪将使系统导入一个不可预知的区域从而死机. 第一:如果所有的程序都是单字节的时候,飞跑从理论上不会产生 第二:如果数据区域永远也不能解释成,分支循环中断等非顺序运行指令时程序出错将只限于一个功能程序块内,这样我们完全可以加NOP NOP NOP LJMP "出错处理"这软件陷阱把它捕获到,而且其恶劣性可以局限在一个程序块内! 第三:那些数据可能被误翻译成"非顺序运行"呢? 1.01H 11H ......0F1H -----AJMP ACALL 2.02H 12H 22H 32H LJMP LCALL RET RETI 3.10-20-------80H JBC BIT,REL--------SJMP REL 4.0B4-0B5-0B6----------0BFH CJNE A,# CJNE @RI,# CJNE RN,# 6.0D5H 0D8-------------0DFH DJNZ 地址,REL DJNZ RN,REL 8.73H JMP @A+DPTR 第四:怎么在上述程序中不产生上述"非法数字" 一个例子典型梦中人:MOV A,#02H 指令机器码 7402 如果指针指向02H将和后面的指令数据一起被翻译成跳转---LJMP "不知道什么地方" 我们这样用:MOV A,#03H DEC A 呵呵怎么样前面怎么运行都跑不出去,后面又是单字节 就到这里吧! |