社区
汇编语言
帖子详情
ORG伪指令的作用是什么?
JerKii
2005-11-16 04:03:51
对于COM文件,我们通常会在程序中添加ORG 100H的指令,如果不加的话,使用ML /AT ...就会产生警告!
对于一些特殊的程序,如引导程序,在程序中就会有ORG 7C00H,我想知道这些指令究竟有什么用?似乎在最终生成的二进制文件也看不出任何变化啊?
...全文
1608
5
打赏
收藏
ORG伪指令的作用是什么?
对于COM文件,我们通常会在程序中添加ORG 100H的指令,如果不加的话,使用ML /AT ...就会产生警告! 对于一些特殊的程序,如引导程序,在程序中就会有ORG 7C00H,我想知道这些指令究竟有什么用?似乎在最终生成的二进制文件也看不出任何变化啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
phoebuslv
2010-06-04
打赏
举报
回复
不错额
minico
2005-11-18
打赏
举报
回复
“所以我们的程序(最终由编译器来完成)就必须迎合BIOS的这种规定了。”
=======================================
我觉得应该是连接器生成的,也就是最后的地址调整是连接器完成的。
DragonBill
2005-11-17
打赏
举报
回复
分啊分啊
大熊猫侯佩
2005-11-16
打赏
举报
回复
^.^
JerKii
2005-11-16
打赏
举报
回复
1
哎,自己琢磨了一下,终于弄清楚了,唉!白费了20啊!:(
下面是我的总结:
简单说来,该指令用来修正该指令以后出现的(变量/标志的)内存地址,也就是说如果有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的这种规定了。
伪指令
及其
作用
伪指令
及其
作用
汇编
伪指令
是什么?
汇编
伪指令
ORG
伪指令
的意义
ORG
0x7C00
伪指令
说明其后面程序的目标代码在内存中存放的起始地址是0x7C00
ORG
伪指令
:
ORG
是Origin的缩写:起始地址,源。 在汇编语言源程序的开始通常都用一条
ORG
伪指令
来实现规定程序的起始地址。 如果不用
ORG
规定则汇编得到的目标程序将从0000H开始。例如:
ORG
2000H START:MOV AX,#00H 汇编语言源程序中若没
汇编语言
伪指令
详解(附实例)
伪指令
不是真正的指令,并没有与之对应的的机器码,不会被执行。
伪指令
所起的
作用
主要是对汇编过程进行控制。常见的
伪指令
如下所示:目录(1)
ORG
———汇编起始指令(2)END——汇编结束命令(3)EQU——赋值指令(4)DB——字节定义
伪指令
(5)DW——定义字命令(6)DS——定义存储空间指令(7)BIT——位地址符号命令 功能:规定该
伪指令
下面的目标程序的起始地址 格式:
ORG
16位地址 举例:
ORG
0080H ;表示下面的程序从地址0080H开始
指令和
伪指令
的区别及
作用
指令:是一种语句,它在程序汇编翻译时变得可执行,汇编器将其翻译成机器语言字节,并且在运行时由CPU加载和执行每一条指令语句表示CPU具有的一个基本能力,比如数据传送,两数相加或相减,移位等,而这种能力是在目标程序运行时完成的,是依赖于CPU、存储器、IO等接口设备来实现的。
伪指令
:顾名思义,它不是真正的指令,也就是不是最终的指令,是用于指示汇编程序如何汇编源程序,所以这种语句又叫命令语句,例如
伪指令
告诉汇编程序,该源程序如何分段,有哪些逻辑段在程序段中,哪些是当前段等等,
伪指令
语句的这些命令功能是..
汇编语言
21,460
社区成员
41,600
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章