. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->第一个程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验3是不是错了?  [已解决] 回复[ 6次 ]   点击[ 365次 ]  
ghost2003
[帖 主]   [ 发表时间: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
才对
ghost2003
[第1楼]   [ 回复时间:2010-04-25 09:16 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03
我的理由是
栈 是一种特殊的内存访问方式---先进后出。
versaariel
[第2楼]   [ 回复时间:2010-04-25 12:13 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
不要把寄存器和栈里的数据人为的对应起来,两种都对,取决于当前的上下文和需要的参数,没有上下文环境的代码怎么理解都可以
ghost2003
[第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
mywiil
[第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中呢。

整个过程没有什么问题,是楼主的理解可能存在问题。

内存、寄存器、入栈、出栈,从哪到哪,博主在看看吧。
ghost2003
[第5楼]   [ 回复时间:2010-04-26 10:22 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03
嗯谢谢回答这么好,三楼那个代码搞错了。由于网速的问题忘记改了。

这个问题我已近解决了。要细心
ghost2003
[第6楼]   [ 回复时间:2010-04-26 10:25 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03
此贴由 贴主 于 [ 2010-04-26 10:25 ] 结贴。 结贴原因:问题已解决
得分情况: 4楼(mywiil):10分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved