org是做什么的

于渊前辈有这么一句注释:
------------------------------------------------------
 
org07c00h          ;告诉编译器加载到7c00h处
------------------------------------------------------

  到了第三章,编译com文件时,要把07c00h改成0100h。如果按照之前的逻辑,就应该这样注释:
-----------------------------------------------------
org0100h                  ;告诉编译器,这个com文件将来肯定被加载到0100h处
-----------------------------------------------------
  明显不对头:com文件的加载地址是随机的,不可能总是加载到0100h处!

  那就是我之前对org的理解有问题了。
  我想这样表述才对:org力求告诉nasm编译器:“你正在编译的这段程序,它的第一条指令相对CS的偏移数值”。编译器据此,能够计算出程序中每个标签的准确偏移数值(相对于CS的)。

  再回头看于渊前辈的注释: org07c00h          ;告诉编译器加载到7c00h处
  这句注释是没有问题的。为什么?因为bios初始化完成之后,会将cs:ip设置为0000h:7c00h。看到没,cs是0,所以偏移地址就是物理地址了。

  最后说一句:许多人都说masm的offset多余,丑陋,说nasm的标签直接取址,很简洁。我想各有千秋吧:至少对新手来说,offset操作符无疑是个醒目的提示:你正在对某个标签取偏移值!------org也只是帮助定位标签的偏移值,因为我们程序的第一条指令可能已经偏移cs若干个byte了。
  以上说明都是在nasm下:masm下面可以有多个org,nasm只能有一个。

  感谢 JerKii的这篇帖子,帖子结的十分漂亮: http://topic.csdn.net/t/20051116/16/4397624.html
  这篇帖子也有涉及: http://hi.baidu.com/lewutian/item/a34dd72ea3a853cdddf69a78

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值