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
原文地址:https://www.cnblogs.com/weiweishuo/p/3082643.html