一个奇怪的问题,拷贝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 编辑 ] 到底是将那段指令复制到 0:200 呀? 你这 16h 是怎么计算出来的? 原帖由 mik 于 2007-4-14 16:21 发表于 2楼
到底是将那段指令复制到 0:200 呀?
就是将程序自身复制到0:200处。 原帖由 mik 于 2007-4-14 16:38 发表于 3楼
你这 16h 是怎么计算出来的?
我用Debug的U命令查看了代码
然后看到mov ax , 4c00h在0017处,所以推断程序长度为16h
以下Debug的截图。环境是Linux下的DosBOX
[ 本帖最后由 janusle 于 2007-4-14 16:50 编辑 ] 题目要求的应该是用 masm 的伪指令,而不是你在 debug 中数出来的.
若是数出来,那应该是17h个字节,不是16h个字节 伪指令要查查 masm 文档,
第1个空应是: mov ax,@code 对,是17h个字节,因为从0开始的。但是我不明白,为什么我即使填的是16h(一开始我误算),依旧能够正常复制所有指令。
另外,题目应该是利用Debug得出答案的,因为之前并没有关于伪指令的篇章。而且书中前面的篇章,作者经常使用Debug来分析程序。
[ 本帖最后由 janusle 于 2007-4-14 17:15 编辑 ] 原帖由 mik 于 2007-4-14 17:07 发表于 7楼
伪指令要查查 masm 文档,
第1个空应是: mov ax,@code
呵呵,因为只有一个段,
我觉得用mov ax , cs有同样的效果。所以这么写:mrgreen: 王爽的这本书好好吗?
以前没有听说过,我们以前学的汇编,现在想来,垃圾呀?是我们老师编的:em10: :em10: :em10: :em10:
页:
[1]
2