. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
CALL和RET指令
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
检测点10.3有个问题
[待解决]
回复[
2
次 ] 点击[
488
次 ]
xuan214
[帖 主]
[ 发表时间:2009-03-20 14:02 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:4
注册日期:2009-02-22 23:57
下面的程序执行后,ax中的数值为多少?
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,0
1000:3 9A 09 00 00 10 call far ptr s
1000:8 40 inc ax
1000:9 58 s:pop ax
add ax,ax
pop bx
add ax,bx
我想问的是为什么这里ax代表的是IP 而bx就是cs? 我实验了下 把ax和bx的位置对调下结果完全不同```
crazyman
[第
1
楼]
[ 回复时间:2009-03-22 14:12 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
我想问的是为什么这里ax代表的是IP 而bx就是cs? 我实验了下 把ax和bx的位置对调下结果完全不同```
==============
楼主是没有搞明白call指令的运行机制。
1000:3 9A 09 00 00 10 call far ptr s
这条指令运行后,已经将其下一条的段地址和偏移地址放入栈空间了,也就是相当于push 1000H 和 push 8H。
下面的指令pop ax 和pop bx 就把栈里的数据取出来了,那么ax和bx的值就会对应之前压入栈中cs和ip,自然就是楼主看到的那样了。
在做检测点的时候,一定要充分理解本章节的知识点,这样就能体会到检测题的作用了。
xuan214
[第
2
楼]
[ 回复时间:2009-04-13 14:47 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:4
注册日期:2009-02-22 23:57
懂咧`忘了出栈和入栈的次序了
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved