. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于检测题6.1第二题引发的疑问  [待解决] 回复[ 1次 ]   点击[ 191次 ]  
hywsunday
[帖 主]   [ 发表时间:2011-04-19 16:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-01 23:17
就是我在做检测题6.1第二题的时候,程序没有错误,也debug调试了,发现程序中的数据确实被修改了,可是同时也发现了一个问题,就是为什么内存单元0:0~0:F这段内存的数据也被修改了啊,这样的话,那不是与原始的意愿相违背的么
assume cs : code

code segment 

        dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
        dw 0,0,0,0,0,0,0,0,0,0
        
start         :        mov ax,cs
                        mov ss,ax
                        mov sp,24h
                        
                        mov ax,0
                        mov ds,ax
                        
                        mov bx,0
                        mov cx,8
s                :        push [bx]
                        pop cs:[bx]
                        add bx,2
                        loop s
                        
                        mov ax,4c00h
                        int 21h
code ends

end        start


程序执行前
d 0:0 f
0000:0000 68 10 A7 00 8B 01 70 00-16 00 A3 03 8B 01 70 00

当执行第一句指令后,内存单元里的数据就变了,成了下面的数据
d 0:0 f
0000:0000 68 10 A7 00 8B 13 E2 0D-16 00 A3 03 B1 13 E2 0D

这是什么原因啊,如果一开始就把0:0~0:F这段内存的数据修改了,那传送还有什么意义啊,不懂~~~~~~~~~~~~
billy_asm
[第1楼]   [ 回复时间:2011-04-19 23:32 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2011-03-05 23:08
首先,要明白,系统内存不单单你的debug程序在用.某些内存单元不是你自己意愿改变的,见怪不怪,因为有别的程序在用。题目的出发点是:学好进入栈命令。你也可以复制内存任何一段你能访问的内存单元。你能发现有数据改变,说明你观察力强!有很好的条件反应。请继续发扬。。。因为它的改变不是你研究的范围,如果带给你困惑。因为你还要向前走,你可以不用管它,你只管题目的出发点:学好push pop命令就OK。书上对知识屏蔽得很好,你自己也要走出困惑。我可以告诉你,传送的意义是要你学会push 和pop ,希望对你有帮助。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved