仅以一条代码来揭示程序飞跑的本质!
750102h ;mov 01h,#02h
如当前pc不是指向75h,而是指向01h或02h,那么51内的指令译码器将把她们忠实地翻译成ajmp xx01h 或 ljmp xxxxh 而xx01h xxxxh又是什么呢?天知道!这样恶性飞跑下去那还不死定!
改革一下:
clr a ;0c4h
inc a ;04h
mov r1,a ;0f9h
inc a ;04h
mov @r1,a ;86h
每一字节代码都不能在生成跳转和循环,且都是单字节指令!往那跑去?
跑出去了都要自己回来!“在家”千日好!“跳出”事事难嘛!这样只要平时习惯了用累加器和寄存器把数倒一倒,把那些危险代码都给倒掉,这样虽说给pc的“足”上多加了两字节的“包”可它不好“跑”啊!“足包”====跑!
有朋友会问:要是pc抓做02h--ljmp 又有抓做了老鼻子远的xxh,再抓做隔壁的yyh不就没用了吗? pc那一位最活跃啊?pc0啊!要“扯拐”显然发生在她身上,至于那pc15同志啊,睡得更死猪一样,雷爆(强干扰)来了都打不醒?此外如果干扰都强到了pc高位都出错的地步!关电!关电!不干了!“不是我们不行而是敌人太强大”!反过来要是敌人在你的专政下,只是偶尔出来捣捣乱,但一出来就冲到屁西(pc)高层,就要问问是不是你的王国根基(硬件)有问题了?
而非出在意识形态(软件)上!硬件为本!软件为标!标本兼治铸就坚强体魄,方能百毒不侵!
摘自
http://www.mcu51.com能否这样理解:(两个凡是)
凡是程序里出现了01h的地方都要改成单字节指令,凡是程序里出现了02h的地方都要改成单字节指令!