汇编网首页登录博客注册
lmze2000的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
文章收藏
友情链接

[2009-06-06 15:46] 第6章 6.1 (1)/(2)检测点,2种方法将指定空间数据改写程序数据

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

s:        mov ax,[bx]
        mov cs:[bx],ax
        add bx,2
        loop s

        mov ax,4c00h
        int 21h

code ends

end start


检测点6.1 (1)

start段 初始化ds为0h段地址,同时清空bx,给cx赋值。
s段完成0:0~0:15地址的数据读取及写入cs段首地址处的内存空间数据。即dw中定义的数据。



6.1 (2)

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,20h        ;初始化栈空间,10字型数据,栈底为20h

        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 BB 13 4E 05-16 00 96 03 B1 13 4E 05   h.....N.......N.
0:0~0:15处的数据。

理解了在程序中如何初始化栈空间,如何控制空间的大小,防止栈的越界问题。
同时发现,在程序中初始化栈空间,ss段地址和cs是同一地址。应该是系统在分配可用内存空间的时候,已经将ss初始化好。
评论次数(3)  |  浏览次数(446)  |  类型(汇编作业) |  收藏此文  | 

[  lmze2000   发表于  2009-06-06 16:14  ]

在进行调试的时候,发现用d命令查看0:0~0:15处的数据与执行后的不同。在论坛上查找资料及做了几次试验后,总于明白了。原来是这样子的。

当执行了int 21h这条指令,我们调试的程序就结束了生命,此时回到了debug的内存空间里。 
所以你在执行int 21h指令之前查看内存才是你想查看的。 

-------------------------------
debug 加载程序:
-d 0:0 f
0000:0000  68 10 A7 00 8B 01 70 00-16 00 96 03 8B 01 70 00   h.....p.......p.

试验:
执行一条语句后.
-t

AX=0B42  BX=0000  CX=0045  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B32  ES=0B32  SS=0B42  CS=0B42  IP=0026   NV UP EI PL NZ NA PO NC
0B42:0026 8ED0          MOV     SS,AX
-d 0:0 f
0000:0000  68 10 A7 00 BB 13 4E 05-16 00 96 03 B1 13 4E 05   h.....N.......N.
-
此时的0:0 f地址的数据与程序最终运行后地址cs:0 f是一样的。
也就是说,当debug开始调试程序,0:0 f地址的数据发生了改变,应该是由中断造成的吧,具体的原因不清,但是已经找到造成不一至的原因:)

继续往下学

[  lmze2000   发表于  2009-06-06 17:27  ]

同时发现,在程序中初始化栈空间,ss段地址和cs是同一地址。应该是系统在分配可用内存空间的时候,已经将ss初始化好。

*******************************
对此更深刻的理解!

在看了多段的程序设计后,原来和自已当初想的不一样,
对于只有一个代码段的情况,是这样,

但是,如果一个程序中有多个段,cs、ds、ss的段首段地是在程序中根据具体的汇编指令来决定的..

[  游客   发表于  2009-06-08 11:06  ]

说的好。继续加油。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码