. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于检测点10.4的问题,谢谢!  [待解决] 回复[ 5次 ]   点击[ 464次 ]  
loveasm
[帖 主]   [ 发表时间:2007-06-22 21:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-06-22 21:18
看了答案是ax=000bh,但不知为何??
newer1
[第1楼]   [ 回复时间:2007-08-01 10:48 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:3
注册日期:2007-06-28 20:23
引用

xingluren 老兄的帖子                                           

注意 书中有印刷错误 mov ax,6的机器码不是B8 00 00
而是 B8 06 00

内存地址 机器码 汇编指令
1000:0 b8 06 00 mov ax,6   
1000:2 ff d0    call,ax
1000:5 40 inc ax
1000:6          mov bp,sp
       add ax,[bp]



首先看一下cpu的执行情况
cs      ip      汇编指令
1000    0       mov ax,6   
1000    2       call,ax         
ax = 6  
call ax 相当于
push ip  ip = 5
jmp  ax
那么cpu 转到
1000    6       mov bp,sp
                add ax,[bp]
此时 ss:[bp] = ?  等于5
不就是刚刚压入的ip吗,又mov bp,sp
使bp指向栈顶
所以 add ax,[bp]  ax = 6 + 5 = 11 = 0bh
...
对于这一章的检测题要多从原理上分析.
________________________________________
up4tree
[第2楼]   [ 回复时间:2007-09-17 14:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-08-29 11:41
add ax,[bp] 
中的[bp]的段地址不是ds的吗?
怎么会是“此时 ss:[bp] = ?  等于5 ”中的ss 呢?
up4tree
[第3楼]   [ 回复时间:2007-09-17 14:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-08-29 11:41
add ax,[bp] 
中的[bp]的段地址不是ds的吗?
怎么会是“此时 ss:[bp] = ?  等于5 ”中的ss 呢?
gzadsl2002
[第4楼]   [ 回复时间:2007-10-26 22:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-10-26 21:57
只要在[]中使用BP,段地址默认在SS。。。

请看 8.1中的第(3)。
xiaofeng176
[第5楼]   [ 回复时间:2008-05-10 16:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2008-04-17 11:21
寄存器bp 默认的段地址是ss啊 纸书P149业有写啊!! 任意时刻,ss:sp都是指向栈顶的 即ss:sp与ss:bp是一样的。也就是5啊!!我是这样理解的!!!!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved