zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    FAN_int2ExcelColChar functions
    How to enables AX email functionality without Outlook
    Global::validateEmail
    Global::time2StrHHMM_DNT
    Global::pickSpecificTable_DNT
    Global::pickSpecificClass_DNT
    Global::pickClassMethod_DNT
    Optimize date2str function
    How to achieve dialog with lookup control
    Optimize str2date function
  • 原文地址:https://www.cnblogs.com/weiweishuo/p/3082643.html
Copyright © 2011-2022 走看看