博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORG 07C00H的意思
阅读量:4946 次
发布时间:2019-06-11

本文共 907 字,大约阅读时间需要 3 分钟。

简单说来,该指令用来修正该指令以后出现的(变量/标志的)内存地址,也就是说如果有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的位置

转载于:https://www.cnblogs.com/pavkoo/p/3513880.html

你可能感兴趣的文章
java中random()函数用法介绍
查看>>
C# OLEDB读取EXCEL表格时,某些字段为空解决方法
查看>>
Web前端开发HTML基础(1)
查看>>
bzoj1934: [Shoi2007]Vote 善意的投票
查看>>
The New Methodology新方法论
查看>>
Linux 进程管理剖析: Linux 同步方法剖析 内核原子,自旋锁和互斥锁
查看>>
day06---selenium剩余操作和自动登录
查看>>
Promise 基础学习
查看>>
干货!前端常见兼容性问题
查看>>
linux下mail命令使用
查看>>
晚安西南-----远控房魅影二之FKQ1440-14
查看>>
【例题】一笔画问题
查看>>
cuda8.0 + cudnn6 + tensorflow1.4 xing
查看>>
C# 字符串转换值类型
查看>>
nginx rewrite
查看>>
Oracle 身份验证方式
查看>>
整体贪心 + 局部01背包 之 hdu 2546
查看>>
浏览器渲染和服务器渲染区别
查看>>
sublime 自定义配置python开发环境
查看>>
打印图形
查看>>