Linux BIOS启动代码DS与ES寄存器初始化分析

3 篇文章 0 订阅

       学习Linux内核的时候看到一段代码最初有点不解,具体的代码如下:

go:  mov ax,cs

       mov ds,ax

       mov es,ax

       上面的代码是对ds与es两个寄存器的初始化,但是从一般程序设计的角度考虑,总觉得第一句似乎是么有什么意义。为什么不修改成直接用cs寄存器对ds和es两个寄存器进行初始化呢?就向下面这样:

go:  mov ds,cs

       mov es,cs

       我觉得我似乎发现了一点小问题,但是毕竟这教程是中国人编辑的,随便写写也是有可能的。何况,书中我已经发现过其他的错误了。后来查看Linus的源代码发现居然也是这个样子,一下子觉得应该不会是不谨慎造成的,一定是有其他原因。我按照上面自己思考的方式修改了代码测试结果如下:


       启动的时候出现的居然是乱码!怎么回事儿呢?维基百科查了一下恍然大悟。原来cs寄存器被称为代码的段寄存器,用来指示处理器读取将要执行的指令地址。这样的话,这个值肯定是一直在变的,无法将ds和es进行正确的初始化。

评论 1 您还未登录,请先 登录 后发表或查看评论
相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

grey_csdn

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值