简单说来,该指令用来修正该指令以后出现的(变量/标志的)内存地址,也就是说如果有ORG 0x12345h,那么在该指令以后的变量的地址将被修正为0x12345+old_addr。
对于DOS中的COM文件,在被DOS装载进内存后,系统会在内存的CS:0000 – CS:0100区域创建一个PSP,这里存放了一些系统所需的信息,比如通过命令行所传递的参数等,COM文件的代码将被装载到CS:0100 – CS:XXXX的内存区域,所以说如果COM代码中不通过使用ORG 100h来进行修正的话,该段中的变量将不能被正确访问,这时,对改变量的访问将导致PSP中的数据被访问了,从而得不到预期的结果。对于EXE文件,其所采用的方式可能就不一样了,具体是怎样的,目前还不知道。。。
对于一些引导程序,这些程序将被BIOS装载到内存中的指定地方,通常为0000:7C00,这跟DOS装载COM文件的机制是一样的,只不过DOS是将COM文件的代码装载到CS:0100处。所以在,引导程序的汇编代码中,需要指定ORG 7C00H来对代码中的变量的内存地址进行修正。
如:
      ORG 7C00H
msg  db ‘HELLO WORLD’,0
      MOV DX, OFFSET msg
在有ORG 7C00H的情况下,MOV DX, OFFSET msg对应的指令为MOV DX,7C4B(这里4B为msg在当前数据段中的偏移位置)如果没有ORG 7C00H,那么真正被执行的指令将为MOV SI,004B,试想,BIOS已经将该代码装载到0000:7C00处,0000:0000 – 0000:7C00之间的数据可能为其他更重要的数据,如果使用004B就得不到我们所要访问字符串msg,因为我们的字符串被BIOS放在7C4B这里了,所以我们的程序(最终由编译器来完成)就必须迎合BIOS的这种规定了。

计算机接电启动后,先运行存储在RAM中BIOS程序,然后BIOS程序将 系统引导程序的开始位置 加载到内存:0000:7C00的位置

ORG 07C00H的意思的更多相关文章

  1. 操作系统篇-hello world(免系统运行程序)

     || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言     今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...

  2. 操作系统开发系列—1.HelloWorld ●

    org 07c00h ;伪指令,告诉编译器程序会被加载到7c00处 mov ax, cs mov ds, ax mov es, ax call DispStr ;调用显示字符串例程 jmp $ ;无限 ...

  3. 重拾OS的实现

    好久没看OS实现了- -.感觉最近过的乱七八糟的.最为一名学渣,苟活于学霸之间实在是很辛苦啊.不过还是感觉要坚持下去比较好,决定每天学一点,写点感想.也算是通过这个平台逼迫一下自己.= =#. 今天回 ...

  4. 自制操作系统 (三) 从启动区执行操作系统并进入C世界

    qq:992591601 欢迎交流 2016.04.03 2016.05.31 2016.06.29 这一章是有些复杂的,我不太懂作者为什么要把这么多内容都放进一天. 1读入了十个柱面 2从启动区执行 ...

  5. 自制操作系统(二) 让bootsector开机启动打印一首诗

    qq:992591601 欢迎交流 2016-03-31作 2016-06-01.2016-06-27改 我总结了些基本原理: 1.软盘的第一个扇区为启动区 2.计算机读软盘是以512字节为单位来读写 ...

  6. 自制一个能显示helloworld的最简单OS

    <自己动手写操作系统> org 07c00h mov ax,cs mov ds,ax mov es,ax call DispStr jmp $ DispStr: mov ax,BootMe ...

  7. [reprint]如何编写引导程序 Hello World

    在存储介质(硬盘.软盘.光盘)中有一块特殊的区域,叫做引导区.在计算机启动后,BIOS会读取引导区内的代码到内存中去,然后将执行这些代码.引导区的位置和大小与计算机的平台有关,对于IBM-PC兼容机, ...

  8. 《Orange'S:一个操作系统的实现》笔记(一)

    感觉自己对于操作系统始终没有一个清楚的概念,尤其最近困扰于实模式.保护模式以及寻址方式等一些概念.转而一想,所有的程序,最终都是操作的计算机资源,需要和操作系统打交道,所以操作系统有必要深入了解一下. ...

  9. 操作系统内核Hack:(三)引导程序制作

    操作系统内核Hack:(三)引导程序制作 关于本文涉及到的完整源码请参考MiniOS的v1_bootloader分支. 1.制作方法 现在我们已经了解了关于BootLoader的一切知识,让我们开始动 ...

随机推荐

  1. 用fabric部署维护kle日志收集系统

    最近搞了一个logstash kafka elasticsearch kibana 整合部署的日志收集系统.部署参考lagstash + elasticsearch + kibana 3 + kafk ...

  2. Pytho中两种方式导入模块的差别

    1.使用import module,只是把模块导入,访问模块中的函数名或者是属性是必须使用点运算符(.)来访问,否则直接访问会提示找不到这些函数或者属性. 2.使用from numpy import ...

  3. delphi 从TWebBrowser WebBrowser得到全部html源码

    delphi 从TWebBrowser WebBrowser得到全部html源码 http://blog.csdn.net/webouse/article/details/3912174   网上查询 ...

  4. POJ 2028

    #include <iostream> #define MAXN 200 using namespace std; int mark[MAXN]; int main() { //freop ...

  5. [C++]iostream的几种输入形式

    做ACM题的时候,发现cin并不能满足所有输入要求.比如说: 每行给出一款运动鞋信息,若该款写不打折,则先后给出每种运动鞋单价P,所购买的数量Q:若打折,则先后给出每种运动鞋单价P,所购买的数量Q,折 ...

  6. ExtJs布局之Column

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  7. 使用RockMongo管理MongoDB

    http://blog.csdn.net/mydeman/article/details/7082730

  8. SSH开发实践part2:双向1-N连接配置

    1 OK,上一篇已经介绍了项目开发的前期准备工作,具体内容可以参考:http://www.cnblogs.com/souvenir/p/3783686.html 按照开发步骤,我们现在已经可以开始进行 ...

  9. iOS多线程 GCD

    iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main que ...

  10. initWithFrame方法的理解

    initWithFrame方法的理解   有时候,知道initWithFrame方法如何用,但是么有弄明白initWithFrame方法到底是什么? 那就通过查资料弄明白.     1. initWi ...