于渊《orange's 一个操作系统实现》的字符串输出函数disp_str有bug会导致异常

于渊先生的《orange’s 一个操作系统实现》的字符串输出函数disp_str有bug会导致异常

发现在同一个函数中两次使用disp_str就会导致异常,这个问题困扰了我很久,一般来说都是堆栈的没有恢复好的问题,在反复的检查后发现堆栈并没有什么问题,disp_str是一个汇编程序,莫名觉得是符号问题,鬼使神差的使用c程序对其包装发现没有这样的问题,一直往堆栈方向想,但后来想到自己大一写汇编函数的时候都会小心翼翼的把每个涉及到的寄存器进行保护,想到这里,可能有一些使用到的寄存器没有保护到,导致出现bug了,于是乎将该函数涉及到的寄存器都做了一遍保存,在函数返回的时候进行恢复,总算是解决了。

写汇编函数的时候一定要注意对会使用到的寄存器的恢复,很难清楚调用函数的c被编译后有没有使用到这些寄存器。

; ========================================================================
;          void disp_str(char * info);
; ========================================================================
disp_str:
    push    ebp
    push    esi
    push    edi
    push    eax
    push
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值