简单说来,该指令用来修正该指令以后出现的(变量/标志的)内存地址,也就是说如果有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的这种规定了。
相关文章
- 09-28有意思的flex 色子布局
- 09-28Python中的迭代是什么意思?
- 09-28KB,Kb单位换算,网络带宽中的Kbps和KB/s到底是什么意思? (注:B和b的区别)
- 09-28Html中的position:absolute的意思
- 09-28Android Studio 3.5报错,无法从‘https://services.gradle.org/distributions/gradle-5.4.1下载安装的解决方案
- 09-28maven项目中 org.hibernate.MappingNotFoundException: resource:*.hbm.xml not found问题的解决方案
- 09-28[Python]Python的class(类)中的object是什么意思
- 09-28无法访问org.springframework.core.NestedRuntimeException 找不到org.springframework.core.NestedRuntimeException的类文件
- 09-28一组很有意思的Principles
- 09-28有意思的算法题:有10个文件,每个文件大概有10G,求里面最大的100个数;