janusle 发表于 2007-04-14 16:10

一个奇怪的问题,拷贝16h和17h次结果是一样的

最近在重新看王爽的那本汇编书,目前看到第五章,然后里面有个实验四,其中第三题的题目(见附件中的图片p.jpg)




然后我的答案如下
code segment
   mov ax , cs
   mov ds , ax
   mov ax , 0020h
   mov es , ax
   mov bx , 0
   mov cx , 16h
s:mov al ,
   mov es: , al
   inc bx
   loop s

   mov ax , 4c00h
   int 21h   

code ends
end
其中加粗的部分,为我补全的代码
'
我用debug调试下来发现,mov cx , 16h和mov cx , 17h都可以将"mov ax , 4c00h"之前的指令复制到内存0:200处。

这是为什么?

[ 本帖最后由 janusle 于 2007-4-14 16:14 编辑 ]

mik 发表于 2007-04-14 16:21

到底是将那段指令复制到 0:200 呀?

mik 发表于 2007-04-14 16:38

你这 16h 是怎么计算出来的?

janusle 发表于 2007-04-14 16:41

原帖由 mik 于 2007-4-14 16:21 发表于 2楼
到底是将那段指令复制到 0:200 呀?


就是将程序自身复制到0:200处。

janusle 发表于 2007-04-14 16:48

原帖由 mik 于 2007-4-14 16:38 发表于 3楼
你这 16h 是怎么计算出来的?


我用Debug的U命令查看了代码

然后看到mov ax , 4c00h在0017处,所以推断程序长度为16h


以下Debug的截图。环境是Linux下的DosBOX

[ 本帖最后由 janusle 于 2007-4-14 16:50 编辑 ]

mik 发表于 2007-04-14 17:03

题目要求的应该是用 masm 的伪指令,而不是你在 debug 中数出来的.

若是数出来,那应该是17h个字节,不是16h个字节

mik 发表于 2007-04-14 17:07

伪指令要查查 masm 文档,

第1个空应是: mov ax,@code

janusle 发表于 2007-04-14 17:13

对,是17h个字节,因为从0开始的。但是我不明白,为什么我即使填的是16h(一开始我误算),依旧能够正常复制所有指令。


另外,题目应该是利用Debug得出答案的,因为之前并没有关于伪指令的篇章。而且书中前面的篇章,作者经常使用Debug来分析程序。

[ 本帖最后由 janusle 于 2007-4-14 17:15 编辑 ]

janusle 发表于 2007-04-14 17:18

原帖由 mik 于 2007-4-14 17:07 发表于 7楼
伪指令要查查 masm 文档,

第1个空应是: mov ax,@code


呵呵,因为只有一个段,
我觉得用mov ax , cs有同样的效果。所以这么写:mrgreen:

aobai 发表于 2007-04-14 18:54

王爽的这本书好好吗?
    以前没有听说过,我们以前学的汇编,现在想来,垃圾呀?是我们老师编的:em10: :em10: :em10: :em10:
页: [1] 2
查看完整版本: 一个奇怪的问题,拷贝16h和17h次结果是一样的