注册 登录
编程论坛 汇编论坛

[求助]王爽《汇编语言》第五章实验四第3题!

skybluechen 发布于 2007-08-02 00:58, 3450 次点击

小弟刚开始学汇编,选用的是网上好评如中国人口般的王爽的《汇编语言》。目前,我看到第五章。在完成第五章实验4的第3题时,小弟遇到一些问题,望各位大侠救小弟脱离受疑惑困扰的苦海。跪谢!
首先,我们来看看题目的要求。请看附件图片王爽第五章实验4第3题。

只有本站会员才能查看附件,请 登录

接下来,我描述一下我解决问题的过程。
第一次,我所写的源代码如下:
assume cs:code
code segment
mov ax,code
mov ds,ax
mov ax,0020H
mov es,ax
mov bx,0
mov cx,cx
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
第一空填入code是从网上看到的,我原本打算填入cs。第二空填入cx也是从网上看到。据网上说,这样可以通过编译和连接。接下来,利用DEBUG显示出程序在内存中的情况,然后,数出那段指令所占的字节数。最后,根据数得的字节数,修改cx的值。下面一幅图片显示的程序在内存中的情况:
只有本站会员才能查看附件,请 登录

从上图,我看到指令“mov ax,4c00H”在ds:0017处,于是我数得要求复制的指令所占的字节数为17H。
接下来,我将源代码修改为:
assume cs:code
code segment
mov ax,code
mov ds,ax
mov ax,0020H
mov es,ax
mov bx,0
mov cx,17H
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
程序运行前,在DEBUG中使用U命令查看程序在内存中的情况,如下图:
只有本站会员才能查看附件,请 登录

程序运行后,在DEBUG中使用U命令查看复制结果,如下图:
只有本站会员才能查看附件,请 登录

为什么在复制的内容中,loop语句中跟原内容不一致呢?
接下来,我又将代码修改为如下:
assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020H
mov es,ax
mov bx,0
mov cx,17H
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
程序运行前,在DEBUG中使用U命令查看程序在内存中的情况,如下图:
只有本站会员才能查看附件,请 登录

程序运行后,在DEBUG中使用U命令查看复制结果,如下图:

只有本站会员才能查看附件,请 登录

为什么这一次,复制的结果又正确了呢?
请各位大侠指教!

[此贴子已经被作者于2007-8-3 0:34:10编辑过]

8 回复
#2
zklhp2007-08-02 15:59
你注意一下指令的长度!

mov ax,code ;code是个立即数 占2字节

mov ax,cs ;这里少了一字节

值虽一样 长度不同

改法 就是多复制一字节

btw 这个也可以用 movsb 好象病毒里都是这么写的…………


偶也是菜鸟 对否 还请高人指点


#3
skybluechen2007-08-02 21:31
谢谢2楼的兄弟。
不过,看了你的解答,由于初学汇编,我现在还是不很明白。
我现在的想法是,当我把王爽的书看之后,肯定就会明白了。
#4
I喜欢c2007-08-03 12:07
#5
skybluechen2007-08-03 14:50
以下是引用I喜欢c在2007-8-3 12:07:49的发言:

嘿嘿,版主也喜欢灌水吗?

#6
llxf2007-09-30 15:12

楼主想明白了么,为什么?
我还不明白呢

#7
ybdesire2007-09-30 15:34
我开始用的是其他的书,难以入门
现在用的也是那本书,的确很好

有时候我也发现了类似的情况... ...
但我依稀记着在什么书上看到过"debug中的结果不能代表程序实际执行的结果"
不知是也不是,请高人回答
#8
zklhp2007-09-30 22:36
以下是引用ybdesire在2007-9-30 15:34:49的发言:
我开始用的是其他的书,难以入门
现在用的也是那本书,的确很好

有时候我也发现了类似的情况... ...
但我依稀记着在什么书上看到过"debug中的结果不能代表程序实际执行的结果"
不知是也不是,请高人回答

什么意思呢 偶也想知道

#9
xruanjian2011-10-14 13:28
17也错了吧,11h才对的呀
1