mov ax,x和mov ax,word ptr x有什么不同的呢?debug时发现,mov ax,x 执行后,ax的值为0...mov ax,word ptr

g3110 2010-10-27 07:42:34
assume cs:code
code segment
x:
mov ax,0
mov bx,ax
mov ax,offset x
mov ax, word ptr x; 和mov ax,x和mov ax,word ptr x有什么不同的呢?
;debug时发现,mov ax,x 执行后,ax的值为0...mov ax,word ptr x则相当于在执行mov ax,cs:[0]指令。
mov ax,4c00h
int 21h
code ends
end

...全文
1405 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 g3110 的回复:]我这里的x定义的是一个标号。。
那么mov ax,word ptr x 是代表什么呢
为什么会相当于在执行mov ax,cs:[0]这条指令[/Quote]
这时 mov ax, word ptr x 就是将 标号 x: 处的 word 赋予 ax。由于你的代码里,x: 是在 code 段的最开始处,其偏执就是 0000 了,所以裸汇编指令就是 mov ax, word ptr cs:[0000]。有 cs: 的段前缀,是由于 x: 是在 code 段里,你的 assume 语句标示了 cs: 指向 code 段。


[Quote=引用 11 楼 g3110 的回复:]"如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,于 mov ax, word ptr x 完全不是一样意思。
"
那么这种情况下mov ax,word ptr x与 mov ax,x有什么不同呢。。[/Quote]
不是说了的吗,mov ax, word ptr x 就是如 mov ax, cs:[0000] 这样的指令;mov ax, x 则是 mov ax, offset x 亦即 mov ax, 0000 这样的指令。前者拿的是 x: 地址处的数据;后者则是 x: 的地址。
masmaster 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zara 的回复:]
MOV AX, X 的具体意义要看 X 的类型。如果它是定义的数据变量,那么就是和 mov ax, word ptr x 功能一样;只是后者在 x 不是定义为 word 类型时,避免提示警告甚至是错误。
如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,于 mov ax, word ptr x 完全不是一样意思。
[/Quote]
正解~~
taoran12 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zara 的回复:]
MOV AX, X 的具体意义要看 X 的类型。如果它是定义的数据变量,那么就是和 mov ax, word ptr x 功能一样;只是后者在 x 不是定义为 word 类型时,避免提示警告甚至是错误。
如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,于 mov ax, word ptr x 完全不是一样意思。
[/Quote]

正解
g3110 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zara 的回复:]
MOV AX, X 的具体意义要看 X 的类型。如果它是定义的数据变量,那么就是和 mov ax, word ptr x 功能一样;只是后者在 x 不是定义为 word 类型时,避免提示警告甚至是错误。
如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,于 mov ax, word ptr x 完全不是一样意思。
[/Quote]
"如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,于 mov ax, word ptr x 完全不是一样意思。
"
那么这种情况下mov ax,word ptr x与 mov ax,x有什么不同呢。。
zara 2010-10-28
  • 打赏
  • 举报
回复
MOV AX, X 的具体意义要看 X 的类型。如果它是定义的数据变量,那么就是和 mov ax, word ptr x 功能一样;只是后者在 x 不是定义为 word 类型时,避免提示警告甚至是错误。
如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,于 mov ax, word ptr x 完全不是一样意思。
finkle_zhang 2010-10-28
  • 打赏
  • 举报
回复
楼上的ID相似度好高啊
难得糊涂ha 2010-10-28
  • 打赏
  • 举报
回复
作用是一样的
g3110 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zara 的回复:]
MOV AX, X 的具体意义要看 X 的类型。如果它是定义的数据变量,那么就是和 mov ax, word ptr x 功能一样;只是后者在 x 不是定义为 word 类型时,避免提示警告甚至是错误。
如果 X 定义的是个标号,如楼主所表示的,那么它就和 mov ax, offset x 是一样的,于 mov ax, word ptr x 完全不是一样意思。
[/Quote]
我这里的x定义的是一个标号。。
那么mov ax,word ptr x 是代表什么呢
为什么会相当于在执行mov ax,cs:[0]这条指令
g3110 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 finkle_zhang 的回复:]
楼上的ID相似度好高啊
[/Quote]
呵呵。我同学帮顶贴。。。
g3110 2010-10-27
  • 打赏
  • 举报
回复
明白了。。。mov ax,word ptr x 从字开始。。
g3110 2010-10-27
  • 打赏
  • 举报
回复
大侠帮帮忙啊。。。。

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧