实际上这是一道再简单不过的问题了,不知道为什么论坛上有许多人都对它存有疑惑。正确答案就是:
第一个空毫无疑问应该是:
mov ax,cs
关键是第二个空,应该是:
mov cx,17h
接下来我来分析一下:
cs中存储了这段代码的起始位置,而不是用什么ds。
这道题的关键是我们需要复制的字节数,可我们怎么知道是23个字节(也就是17h)呢,首先将
mov cx,___这个空用0代替(因为无论如何cx都占2个字节,以后再把0替换过来),也就是mov cx,0。
然后编译连接代码,生成.exe程序放到debug中。再-r,就可以看到cx中的取值(cx中存放的是这个.exe程序的总字节数),cx=001c,001c等于28,但是要注意应该去掉mov ax,4c00h(对应机器码B8004C)和int 21h(对应机器码CD21)两句代码所占的字节数,总共五个字节,所以应该是28-5=23,转换成十六进制就是17h。然后重新编辑源程序,把mov cx,0替换成mov cx,17h就行了。
第一个空毫无疑问应该是:
mov ax,cs
关键是第二个空,应该是:
mov cx,17h
接下来我来分析一下:
cs中存储了这段代码的起始位置,而不是用什么ds。
这道题的关键是我们需要复制的字节数,可我们怎么知道是23个字节(也就是17h)呢,首先将
mov cx,___这个空用0代替(因为无论如何cx都占2个字节,以后再把0替换过来),也就是mov cx,0。
然后编译连接代码,生成.exe程序放到debug中。再-r,就可以看到cx中的取值(cx中存放的是这个.exe程序的总字节数),cx=001c,001c等于28,但是要注意应该去掉mov ax,4c00h(对应机器码B8004C)和int 21h(对应机器码CD21)两句代码所占的字节数,总共五个字节,所以应该是28-5=23,转换成十六进制就是17h。然后重新编辑源程序,把mov cx,0替换成mov cx,17h就行了。
经过我的测试,这样做是绝对正确的。