- [游客] 没问题。 06/11 08:21
- [游客] 哪里有问题,:)指明下.一起研究 06/10 17:22
- [游客] 有点儿问题。 06/10 16:26
- [tomato] 正确。 06/10 15:11
- [lmze2000] 另有点注意的就是,dd是字节型数据,所以在进行循环的时候,用inc bx就可以,inc bx,2是针 06/09 17:39
- [游客] 说的好。继续加油。 06/08 11:06
- [游客] 还是按照书上的格式,写下你的理解和回答吧。 06/08 10:57
- [lmze2000] 同时发现,在程序中初始化栈空间,ss段地址和cs是同一地址。应该是系统在分配可用内存空间的时候,已经 06/06 17:27
- [lmze2000] 在进行调试的时候,发现用d命令查看0:0~0:15处的数据与执行后的不同。在论坛上查找资料及做了几次 06/06 16:14
- [lmze2000] mov cx,__ 改成 sub cx,__ 这样要正确一些, 原题的意思就是要复制程序中mov 06/04 15:32
[2009-06-06 15:46] 第6章 6.1 (1)/(2)检测点,2种方法将指定空间数据改写程序数据
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初始化好。
[ 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 ]
说的好。继续加油。