打印

菜农正式发布“汇编数组”完整版前再晕大家一次(不晕做中

[复制链接]
1568|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HotC51|  楼主 | 2009-3-3 18:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------
    HotTask51软中断函数
    void __HotASM_ISR__(unsigned char isrNum)
入口: R7   D4D3 中断向量组号  D2D1D0 中断向量号
出口: R7   isrNum
结果: 跳入对应的中断地址 isrNum * 8 + 3
-----------------------------------------------*/
HotASM (__HotASM_ISR__)//(unsigned char isrNum)
{//DPTR保存的是汇编数组函数的首地址__HotASM_ISR__
#define lable__HotASM_ISR__Error (-(size_CPL_C() + size_MOV_A() + size_JNC()))
    asm_CJNE_R7(0x20, size_CPL_C() +size_MOV_A() - 1),//mov a,R7
//lable__HotASM_ISR__Error:
    asm_CPL_C(),
    asm_MOV_A(0xEF),//mov a,0xef//
    asm_JNC(lable__HotASM_ISR__Error),//非法软中断号>(0~0x1f)
    asm_RL_A(),
    asm_RL_A(),
    asm_RL_A(),
    asm_ORL_A(0x03),
    asm_CLR_ACC_2(),
    asm_PUSH_ACC(),//压入中断地址低8位
    asm_CLR_A(),
    asm_PUSH_ACC(),//压入中断地址高8位
    asm_RET()//跳入对应的中断地址 isrNum * 8 + 3
};

/*---------------------------------------------
    HotTask51系统启动函数(直接操作SP)
    void __HotASM_STARTex__(void)
入口: 无
      Keil DPTR = &__HotASM_STARTex__[0]
           R2R1 = DPTR
出口: 无
结果: 一次RETI后继续执行
特点: 本“函数”可以“动态加载”
-----------------------------------------------*/
HotASM (__HotASM_STARTex__)//(void)
{//DPTR保存的是汇编数组函数的首地址__HotASM_START__
#define lable__HotASM_STARTex__Exit (20 + size_JMP_DPTR() + size_DW()) 
    asm_CLR_A(),
    asm_MOV_IE_A(),//关中断
/*------------------------------------------------------------------------
    注意下列方法和__HotASM_START__的最大不同之处和更为凶猛的方法~~~
--------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
    asm_INC_SP(),
    asm_MOV_R0_SP(),//准备搞破坏
    asm_INC_SP(),
    asm_MOV_A_DPL(),
    asm_ADD_A(lable__HotASM_STARTex__Exit),//lable__HotASM_RESET__0
    asm_MOV_iR0_A(),//装入lable__HotASM_STARTEx__Exit低8位
    asm_INC_R0(),
    asm_MOV_A_DPH(),
    asm_ADDC_A(0),
    asm_MOV_iR0_A(),//20//装入lable__HotASM_STARTEx__Exit高8位
/*-----------------------------------------------------------------------*/
    asm_JMP_DPTR(lable__HotASM_STARTex__Exit), //NOP
    asm_DW(0x55aa),
//lable__HotASM_STARTEx__Exit:
    asm_RETI()//(调用RETI二次)
};


相关帖子

沙发
HotC51|  楼主 | 2009-3-3 18:41 | 只看该作者

“汇编数组”以后被移植到其他MCU/DSP甚至PC,可能是个祸害~~~

俺很担心~~~因为它太凶猛~~~

使用特权

评论回复
板凳
HotC51|  楼主 | 2009-3-3 18:42 | 只看该作者

main.c

#include "hottask51.h"

void TimerISR2() interrupt TF2_VECTOR using 3 
{
    TF2 = 0;
    _nop_();
    _nop_();
    _nop_();
}

void UserISR0f() interrupt 0x0f using 3 
{
    _nop_();
    _nop_();
    _nop_();
}

void UserISR1f() interrupt 0x1F using 3 
{//所有非法软中断被拦截到此~~~
    _nop_();
    _nop_();
    _nop_();
}


void main()
{
    comFunction.Vtbl.STARTex();

    comFunction.Vtbl.START();
    comFunction.Vtbl.ISR(TF2_VECTOR);//软中断到Timer2Isr()
    comFunction.Vtbl.ISR(0x1f);//软中断0x1f
    comFunction.Vtbl.ISR(0x20);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0x30);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0x40);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0x50);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0x60);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0x70);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0x80);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0x90);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0xa0);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0xb0);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0xc0);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0xd0);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0xe0);//非法软中断被拦截到0x0f
    comFunction.Vtbl.ISR(0xff);//非法软中断被拦截到0x0f

    comFunction.Vtbl.TEST();
    comFunction.Vtbl.RESET();//软件复位
    while(1);//永远不能执行!!!
}

使用特权

评论回复
地板
HotC51|  楼主 | 2009-3-3 18:46 | 只看该作者

这些程序都用了“反逆向工程”技术~~~和反汇编说声“拜拜

使用特权

评论回复
5
HotC51|  楼主 | 2009-3-3 22:37 | 只看该作者

坐等dengm同志~~~

使用特权

评论回复
6
hotc51| | 2009-3-4 07:20 | 只看该作者

有人不晕否~~~

使用特权

评论回复
7
kanprin| | 2009-3-4 11:52 | 只看该作者

对于keil的编译不熟悉

比如参数传递的规则(所使用到的寄存器)。
如果是在winavr上的AVR汇编数组,或许我会更容易理解,呵呵。

大体的思想是:将函数入口地址入栈,然后执行ret将堆栈值弹出给PC,与UCOS移植部分,初始化时,软件模拟一次中断相类似。

晕是相当的晕,哈哈。

使用特权

评论回复
8
呆板书生| | 2009-3-4 21:13 | 只看该作者

妙哉

使用1f,作为软中断,达到reti的效果

使用特权

评论回复
9
xwj| | 2009-3-5 09:37 | 只看该作者

呵呵,7楼理解正确,8楼理解错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

306

帖子

0

粉丝