开课: HotC51 发表于 2009-3-5 17:25 侃单片机 ←返回版面 | 26楼: (保留罪证)“红杏出墙装疯拳”小贴士--老x的简单版START: |
void MACRO_RETI(void) { asm_RETI() //里面就是一句汇编的RETI,它会抢先与函数自己的RET执行 }; //这个函数自己的RET永远不执行到,因为跳走了
void __HotASM_START__ (void) //启动时运行的代码 { MACRO_CLR_EA; //关中断 MACRO_Check_Crack; //反破解陷阱 MACRO_RETI(); //释放中断优先级 MACRO_RETI(); //再释放一次 MACRO_LJMP_ANY(main); //用压栈和RET做的任意位置长跳转,地址是main主程序 }; //这里其实会有个RET
|
|
菜农来澄清汇编数组和汇编及嵌入汇编最大的不同: 汇编数组内实际存放的是数据而非代码,但用函数指针强行跳入后,数据变“升华” 为代码。 它本来就是为动态链接而设计,故编译期间是找不到静态地址的,至少俺现在无 好办法。 即使能找到静态地址,如汇编的: lcall xxxx; ajmp xxx 都属于此类。 汇编数组是吴旭光教授与菜农为以后能在任何MCS/ARM/DSP上运行OS 所参照PC的动态链接库DLL/LIB所设计的。 以前虽在DSP上应用,但很局限。 这次在51上大面积推广,故菜农熬夜赶制了HotASM,HotCOM.HotMACRO等, 这样可以用汇编数组(宏)通过COM接口直接相互访问,而且可以和C函数通讯。 最近版本已全面支持C函数调用汇编数组宏,且宏在某些语句要比C精炼的多。 并且很容易加入“反逆向代码”且不影响正常程序。 所以,汇编数组的编写应该基于动态链接的思想,虽然这样代码效率会影响些 但不会影响主流。 菜农是实用主义,不爱说教,只看结果,不管过程。 所以不知XWJ的MACRO_RETI是否能运行??? 课毕
HotC51@126.com 2009.3.9于菜地。 团部:http://group.ednchina.com/1623/
|
|
文章评论(0条评论)
登录后参与讨论