荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店