注册 登录
编程论坛 汇编论坛

[求助]初学汇编 请教关于OFFSET指令的问题

火奴 发布于 2006-10-24 19:48, 10662 次点击

我学习的是intel的汇编

例:.data
aa byte ?
.code
mov EAX,OFFSET aa

OFFSET 指令返回的是数据标号的偏移地址,那么EAX 得到的到底是物理地址还是一个相对数据段的偏移地址?如果是偏移地址,后面编译的时候怎么知道EAX中的地址是数据段的偏移地址?

请指教

10 回复
#2
hu9jj2006-10-24 21:47
EAX得到的是偏移地址。编译过程一般要进行多次扫描,第一次扫描时要计算各条指令所需的字节数并计算标号所代表的地址,后面的编译就将aa标号所处的地址数值替换OFFSET aa。
#3
火奴2006-10-24 23:54
以下是引用hu9jj在2006-10-24 21:47:24的发言:
EAX得到的是偏移地址。编译过程一般要进行多次扫描,第一次扫描时要计算各条指令所需的字节数并计算标号所代表的地址,后面的编译就将aa标号所处的地址数值替换OFFSET aa。

谢谢楼上的回答,但经过计算以后aa所代表的地址应该是物理地址,那么在用aa所处的地址数值替换了 OFFSET aa以后,EAX是如何得到偏移地址的值呢?还是在第一遍扫描的时候就先把偏移地址移交给EAX?

#4
hu9jj2006-10-25 20:06
offset aa得到的本身就是偏移地址,其基址应该在CS中。
#5
火奴2006-10-25 20:35
aa 是数据的标号,应该存在数据段里面,基址在CS中的话怎么可能得到正确的 aa里面的值呢?
#6
hu9jj2006-10-26 21:30
你说的对,基址应该在DS中,是我没注意看数据段和码段的标记。
#7
火奴2006-10-29 18:47

好 谢谢

#8
曾小2006-11-18 14:31

我想请教各位:mov EAX,OFFSET aa 得到的是偏移地址所指向单元中的内容吧!而不是偏移地址!!!
如果是用下面的指令:LEA EAX,aa 就是得到偏移地址!!!

#9
菜鸟上路2006-11-18 14:47
以下是引用曾小在2006-11-18 14:31:48的发言:

我想请教各位:mov EAX,OFFSET aa 得到的是偏移地址所指向单元中的内容吧!而不是偏移地址!!!
如果是用下面的指令:LEA EAX,aa 就是得到偏移地址!!!

第二个是对的,第一个是错的

#10
曾小2006-11-20 13:21

"第二个是对的,第一个是错的"是什么意思啊?
是说 我的发言有问题吗?
麻烦说清楚哦!

#11
li1246013502010-04-12 23:02
offset 【200H】中括号要么?
1