. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
寄存器(内存访问)
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
问一下本书61页的问题3.8 , 谢谢!
[待解决]
回复[
2
次 ] 点击[
535
次 ]
feier
[帖 主]
[ 发表时间:2007-06-27 20:49 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:5
信誉值:3
注册日期:2007-06-23 22:00
问一下本书61页的 问题3.8
mov ax,1000H
mov ss,ax
mov sp,0010H
mov ax,001AH
mov bx,001BH
push ax
push bx
sub ax,ax
sub bx,bx
pop bx
pop ax
我在机器上试过了,代码根本执行不到mov sp,0010H这句,我把cs=1000,ip=0000,当执行完
mov ax,1000H
ip=0003,
再执行完mov ss,ax这句,
ip=0008了,所以就执行不到mov sp,0010H这句。
mov ss,ax的机器码是两个字节,不应该是5个字节啊
请大家帮忙看看!谢谢了
cxn
[第
1
楼]
[ 回复时间:2007-07-15 20:41 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:179
信誉值:6
注册日期:2007-07-09 19:18
这个问题问的好,这是8086系列cpu就是这样设计的。mov sp,10H 实际上也执行了你可以用debug的R命令查看sp的值发现已经改变了。
之所这样设计是有道理的,ss:sp永远都指向栈顶如果改变了ss的值而不改变sp的值那么ss:sp就会指向错误的栈,这时如果有数据进栈就会发生错误,比如发生中断. 所以cpu在设计时就设计成了如果在改变ss的值后会紧接着再执行一条语句的形式来避免栈出错. 这种设计思想还存在于其它个别的指令上.
13784632020
[第
2
楼]
[ 回复时间:2010-07-08 21:06 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:2
注册日期:2010-07-02 05:46
一楼回答得好,我一直考虑是在指定ss时合并执行了sp这一句,但不知道原因,原来避免出现错误栈啊
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved