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

我的博客

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

[2012-05-15 12:18] 作业第五章实验(3)请教问题

ASSUME CS:CODE
CODE SEGMENT
MOV AX,CS
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
此段程序执行完后,符合题目意图,已将此段程序返回程序之前的指令全部复制到了0:200处。疑惑:MOV CX,CX其中CX中存放了程序的长度,难道不包括返回程序?若要包括,那么为什么0:200处复制的结果中没有返回程序?请教。
评论次数(4)  |  浏览次数(529)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2012-05-15 22:49  ]

可以通过实验得出你想要的结果,首先,看一下这段程序占多少个字节,然后,看一下CX的值为多大,第三,再单步跟踪,看看是否复制过去了。

[  laowang   发表于  2012-05-16 00:38  ]

若用P循环结束最后复制过去的是22个字节,不包含返回程序5个字节;若是一步步跟踪下来,程序结束后,则复制过去27个字节,包含返回程序5个字节。
第一次执行到LOOP,0020:0处并没有复制第一条指令过去
第二次执行到LOOP,0020:0处复制了第一条指令
第三次执行到LOOP,0020:0处复制了第二条指令
第四次执行到LOOP,0020:0处并没有复制任何指令
第五次执行到LOOP,0020:0处写入的是MOV AX,00FF
第六次执行到LOOP,0020:0处复制了第三条指令
第七次执行到LOOP,0020:0处没有写入任何指令
第八次执行到LOOP,0020:0处MOV SS,[BP+DI-01]
第九次执行到LOOP,0020:0处复制了第加条指令



用P结束循环后,U查看:返回程序前的全部指令已复制,但同时发现接下来的内存单元中写入了INT 3等三条指令,内容单元地址刚好到0020:1B。接下来T执行,那三条指令没有变化。接下来P执行,那三条指令还是没有变化。
总结:MOV CX,CX的使用,在执行完程序后,看似已将要求内容复制到指定内存单元,符合题意,但却在这个符合题意的表象后,并非我自己想像的那样,仅仅是复制了题目要求的内容,而实际上内存单元中发生了多次根本就没有想到的“新内容写入,改变,复制”。
这种为达到自我目的,而不顾及其他影响的作为(这里仅指程序而并无含沙射影之隙),是我个人不敢苟同的。
当然这里还有一个问题:若将
SUB CX,5
MOV CX,CX
置换了MOV CX,CX行不行呢?估计不行!!
那么这道实验题目,第二个空有无相对更完美一些答案呢?请各位老师指教。

[  laowang   发表于  2012-05-16 00:46  ]

第一句是23个字节和28个字节,写错了。

[  tomato   发表于  2012-05-16 22:15  ]

是多少个字节就填写多少个字节。

可以先随便填写一个值,然后,在debug下用u命令查看要复制的指令占的字节个数,然后,再填写上那个正确的字节个数。

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