. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
转移指令的原理
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
关于OFFSET的产生的2个疑问
[已解决]
回复[
3
次 ] 点击[
319
次 ]
zdpopup
[帖 主]
[ 发表时间:2009-06-25 03:41 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:8
信誉值:10
注册日期:2009-06-18 18:17
问题1:
例如:
MOV AX,OFFSET 标号 是把 标号的偏移地址送入AX
但是我写
MOV AX,标号 也是把标号的偏移地址送入AX,和前面一样,也能运行.
哪有什么不同,有必要用OFFSET 吗?
问题2:
DATA SEGMENT
...
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE DS:DATA
MOV AX,DATA ;这句中也是段的标号,取得段间的偏移
但如果我写成 MOV AX,OFFSET DATA 能运气,但结果是0,肯定不对.
为什么又不能这样写?
所以在这我有点混淆了,但书上好像没提这个.
请指证,解说下.谢谢
younggay
[第
1
楼]
[ 回复时间:2009-06-25 08:37 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
哪有什么不同,有必要用OFFSET 吗?
=============
在楼上提到的那中情况下是一样的,那是因为编译器的默认处理,不过,在某些情况下offset的加入一是让程序更明确,而是在个别的操作下它也是很必要的。这个慢慢在学习的过程中体会吧。
MOV AX,DATA ;这句中也是段的标号,取得段间的偏移
但如果我写成 MOV AX,OFFSET DATA 能运气,但结果是0,肯定不对.
为什么又不能这样写?
===================
如果标号是段名的话,默认是取的这个段的段地址。此时如果加上offset后,就是取的这个段的偏移地址。我们在定义一个数据段的时候,偏移地址都是从0开始的,所以,你加上了offset后,结果是0,这是正确的现象。
所以,offset的使用还是要视你的操作目的而灵活使用吧。
zdpopup
[第
2
楼]
[ 回复时间:2009-06-25 09:33 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:8
信誉值:10
注册日期:2009-06-18 18:17
谢谢,明白一些.再慢慢体会吧.
zdpopup
[第
3
楼]
[ 回复时间:2009-06-25 09:34 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:8
信誉值:10
注册日期:2009-06-18 18:17
此贴由 贴主 于 [ 2009-06-25 09:34 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(younggay):3分
此问题已结贴!
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved