,下面的几句汇编研究了一个春节还是不明白,求帮忙细致点剖析下,多谢啊
紧急求助,下面的几句汇编研究了一个春节还是不明白,求帮忙细致点剖析下,谢谢啊!
尤其是其中的 mov ebx, [g_pRunningTask] ;OSTCBCur结构的第一个参数就是esp
mov esp, [ebx] ;恢复堆栈
这2句不明白 谢谢
void osFirstTimeSwitch(void)
{
//OSTaskSwHook();
g_pRunningTask = g_pHighestTask;
printf("UniDsp started!!!!!\n");
g_pRunningTask->usTaskStatus |= OS_TSK_RUNNING;
_asm{
mov ebx, [g_pRunningTask] ;OSTCBCur结构的第一个参数就是esp
mov esp, [ebx] ;恢复堆栈
popad ;恢复所有通用寄存器,共8个
popfd ;恢复标志寄存器
ret ;ret 指令相当于pop eip 但保护模式下不容许使用eip
;永远都不返回
}
}
------解决方案--------------------
你用的是类似于调用的东西吧?ret一般和call配合使用...call子程序,然后ret到call的下一个指令开始执行
------解决方案--------------------
尤其是其中的 mov ebx, [g_pRunningTask] ;OSTCBCur结构的第一个参数就是esp
mov esp, [ebx] ;恢复堆栈
这2句不明白 谢谢
void osFirstTimeSwitch(void)
{
//OSTaskSwHook();
g_pRunningTask = g_pHighestTask;
printf("UniDsp started!!!!!\n");
g_pRunningTask->usTaskStatus |= OS_TSK_RUNNING;
_asm{
mov ebx, [g_pRunningTask] ;OSTCBCur结构的第一个参数就是esp
mov esp, [ebx] ;恢复堆栈
popad ;恢复所有通用寄存器,共8个
popfd ;恢复标志寄存器
ret ;ret 指令相当于pop eip 但保护模式下不容许使用eip
;永远都不返回
}
}
------解决方案--------------------
你用的是类似于调用的东西吧?ret一般和call配合使用...call子程序,然后ret到call的下一个指令开始执行
------解决方案--------------------