- [laowang] 十进制。 06/30 23:30
- [chinatree] 哇,王老,这都被您发现了,佩服。不过有一点我很迷糊, 0111b=7d,但是按照您那方法,结果为6 06/26 07:17
- [fpamc] 同上…… 06/04 07:14
- [chinatree] 共勉,同达,嘿嘿。 06/03 23:46
- [chinatree] 还有int,iret呢。 05/30 18:48
- [tomato] 什么样的程序?运行结果是什么样的?发上来代码看看... 05/26 00:08
- [游客] 代码发上来运行一下看看。 05/25 01:26
- [游客] 遇到什么问题了?说出来瞧瞧...... 05/24 13:46
- [laowang] DIV ( unsigned DIVide) 无符号数除法指令 格式:DIV SRC //Byt 05/22 23:55
- [tomato] div不是除法指令吗?这个意义还不够? 05/22 23:06
[2012-05-15 12:18] 作业第五章实验(3)请教问题
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处复制的结果中没有返回程序?请教。
[ 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命令查看要复制的指令占的字节个数,然后,再填写上那个正确的字节个数。