荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: sinba (CL, never fly away!), 信区: Program
标  题: 操作系统课程设计——建议5
发信站: BBS 荔园晨风站 (Sat Oct 30 16:02:35 1999), 转信

编程时出错查栈很不方便,我编了一些小模块,以供参考。
分别在sto_bac.asm,user.c中加入一些小程序即可。
要调用时,在该程序头加入 extern int stack(); 即可
stack()过程由上至下将栈元素打出。(注意:第一和第二
个参数是stack()本身返回地址的ip和cs)

在sto_bac.asm中加入:
_stack proc far
     push bp
     mov bp,sp
     pushf
     pop _r_flag
     mov _r_ax,ax
     mov _r_cx,cx
     mov cx,12
get: inc bp
     inc bp
     mov ax,[bp]
     mov _r_bp,ax
     push cx
     call far ptr _stack_p
     pop cx
     dec cx
     jnz get

     pop bp
     call far ptr _stack_ss
     mov _r_bp,ss
     call far ptr _stack_p
     mov _r_bp,sp
     call far ptr _stack_p
     mov cx,_r_cx
     mov ax,_r_ax
     push _r_flag
     popf
     ret
_stack endp

在user.c中加入:

...
extern int r_bp;
...
...
...

stack_p()
{
  printf("%d\n",r_bp);
}
stack_ss()
{
  printf("    SS and SP are:\n");
}

这样就不必为栈而苦恼了。
当出现“cpu遇到非法指令”等情况时,最好查栈
我个人发现:c调用c时的栈与c调用汇编使的栈不同
如果想当然去取返回断点,吃的苦头很大的哟!



--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.145]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店