操作系统学习常见疑惑问与答[编码实践部分]—问题1:org指令深入理解

操作系统学习常见疑惑问与答[编码实践部分]
—问题1:nasm:org指令深入理解

作者:yxin1322
 blog: http://blog.csdn.net/yxin1322   转载请注明出处


         大三的时候已经学过了《操作系统原理》这门课,虽然学习过程中做过一些实验,但对操作系统的认识仍然停留在理论的层面上,对于如何才能编程实现一个真正的操作系统缺乏可操作的方案,于是有了我现在进行的学习计划。按照计划,近期我读了一些有关操作系统编写的书籍,也参考了网上很多的文章,接触了不少国内这方面的论坛,总算对编写操作系统有了一个大概的认识。在这期间,我曾经被许多小的问题困扰过,并且我认为许多初学操作系统的同学也会跟我一样有相同的困惑,所以我将自己找到的答案和心得以问答的形式记录在此,希望能给后来者提供参考,同时也当作自己的学习备忘。
         学习还在继续,问题也在不断增加,所以我会不断丰富问答的内容。其中部分回答摘自网上的文章,我会注明,而大部分回答则是我自己的见解。如果大家读后认为回答有不对或理解偏差的地方,还请留言指正。
         需要说明的是我这里讨论的操作系统是指基于IA构架80386以上CPU的操作系统,并不包括其他计算机构架之上的操作系统或嵌入式操作系统。

      问:为什么编写NASM语法的系统引导程序,汇编代码的开始总是使用“org 7c00h”?为什么有时候去掉org指令程序也能正常执行?

       答:对于这个问题,我首先在《NASM中文手册》中找到了org指令的解释: NASM汇编编译器为bin文件格式提供了额外的操作符org,它的功能是指定程序被载入内存时的起始地址。根据书中的解释,我们很容易想到,因为引导程序将会被加载到内存0x7c00处,而且引导程序一般都被编译成bin文件格式(bin文件格式没有文件头,它的文件映像与加载到内存运行时的内存映像是一致的),似乎在引导程序中用 org 7c00h是很符合规范的,可仔细一想,似乎又不对,按《NASM中文手册》的说法,使用 org 7c00h将会指定程序加载入内存的起始地址为7c00h,但我们都知道,引导程序加载到内存的7c00h处是一项标准,并不是在编程时决定的,经过试验也验证了我的想法,将org后的数字改成其他值,bois程序一样将它加载到7c00处。那么是不是可以去掉org指令呢,因为程序被加载到哪里并不关它什么事。于是我将org指令去掉,重新编译,写入软盘引导扇区,用它引导系统。出乎预料,程序不能正常运行——没有正常打印出提示信息!到底怎么回事呢?我决定一探究竟。以下是我的引导代码:

boot.asm
1    %include "PrintLib.inc"
2    
3    	org 07c00h
4    	;org 0100h
5    	mov ax,cs
6    	mov ds,ax
7    	mov es,ax
8    
9    	mov ah,10h
10    	mov al,03h
11    	mov bl,01h
12    	int 10h
13    
14    	PrintString BootMessage,LenOfBootMessage,display_mode_2,0h,(ATTR_BLACK<<4)|ATTR_GREEN,0000h
15    
16    	hlt ;停机
17    
18    
19    	BootMessage:	db "Dreamix Starting Please wait..."
20    	LenOfBootMessage	equ $-BootMessage
21    
22    	times 510-($-$) db 0
23    	dw	0xaa55

         boot.asm 里引用到了PrintLib.inc文件,PrintLib.inc文件中定义了一个向屏幕输出字符串信息的宏,封装了部分10h BISO子功能,文件内容如下:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值