|
主题 : : 实验3是不是错了? [已解决] |
回复[ 6次 ]
点击[ 365次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-04-25 09:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03 |
这是其中的一段代码
pop ax
pop bx
push ax
push bx
我认为应该改为
pop ax
pop bx
push bx
push ax
才对 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-04-25 09:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03 |
我的理由是
栈 是一种特殊的内存访问方式---先进后出。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-04-25 12:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
不要把寄存器和栈里的数据人为的对应起来,两种都对,取决于当前的上下文和需要的参数,没有上下文环境的代码怎么理解都可以 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-04-25 20:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03 |
取决于当前的上下文和需要的参数,没有上下文环境的代码怎么理解都可以 意思就是说这个代码没有错。看我的调试记录:你会发现ax寄存器的内容 不见了
汇编源码
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start:
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
mov ax,[bx]
mov cs:[bx],ax
add bx,2
loop: s
mov ax,400ch
int 21h
code ends
end start
******************************************
mov ax,2000h
ax=2000 ds=0b4e cs=0b5e ip=3 ss=2000 sp=0
mov ss,ax
ax=2000 ds=0b4e cs=0b5e ip=8 ss=2000 sp=0 ;mov ss,ax 需要占用5个字节,这里还包括mov sp,0
add sp,10(0ah)
ax=2000 ds=0b4e cs=0b5e ip=b ss=2000 sp=a ;
pop ax
ax=0000 ds=0b4e cs=0b5e ip=c ss=2000 sp=c ;
pop bx
ax=0000 ds=0b4e cs=0b5e ip=d ss=2000 sp=e ;
push ax ;取出后放到寄存器里面去
ax=0000 ds=0b4e cs=0b5e ip=e ss=2000 sp=c ;ax怎么会等于0 出栈的内容都放到哪去了? 我的疑问在这
-d 2000:a 结果全是0
push bx
ax=0000 ds=0b4e cs=0b5e ip=f ss=2000 sp=a ;
pop ax
ax=0000 ds=0b4e cs=0b5e ip=10 ss=2000 sp=10 ;
pop bx
ax=0000 ds=0b4e cs=0b5e ip=11 ss=2000 sp=11 ;
注意:bx一直等于0 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-04-25 20:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:4
注册日期:2008-10-14 16:29 |
我可以很负责人的说,实验3的代码没问题。因为这个题目本身就没有说要完成什么功能啊。所以,楼主的第一帖根本就没有什么可以说对错的啊。
3楼的帖子说的就更迷糊了。汇编代码和你后面的跟踪信息不是一个,不知道是什么情况。
对你的跟踪信息来说:
(1) push ax ;取出后放到寄存器里面去
push是入栈操作。
(2)ax怎么会等于0 出栈的内容都放到哪去了? 我的疑问在这
push指令后,并不会更改ax的值,所以,还是0.至于ax为什么是0,就得看你上面的pop ax了,这个才是将当前栈中的数据放到ax中呢。
整个过程没有什么问题,是楼主的理解可能存在问题。
内存、寄存器、入栈、出栈,从哪到哪,博主在看看吧。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-04-26 10:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03 |
嗯谢谢回答这么好,三楼那个代码搞错了。由于网速的问题忘记改了。
这个问题我已近解决了。要细心 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-04-26 10:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03 |
此贴由 贴主 于 [ 2010-04-26 10:25 ] 结贴。 结贴原因:问题已解决 | | |