yjiaitfk 发表于 2012-2-15 12:54:15

实验4新手求助

本帖最后由 yjiaitfk 于 2012-2-15 13:45 编辑

mov ax,code
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,18h
s:mov al,
mov es:,al
inc bx
loop s

mov ax,4c00h
int 21h

这段代码有多少个字节呀,我想半天也搞不懂循环次数cx怎么是18h

疾风飘流 发表于 2012-2-15 12:54:16

首先,我们要了解这个题的意思,在题目要求中,是要把"mov ax,4c00h"前的指令(很重要)复制到内存0:200中,那么实际上复制的就是内存的数据(指令在内存中也是数据)。那么这些指令的数据有多长就要看IP了。
指令的IP我个人有两种看法:第一种是记住,一般来说,寄存器与数据之间进行mov要3字节长度,寄存器与寄存器之间进行mov要2字节长度,定义循环要1字节,寄存器与内存单元之间进行mov要2字节长度,inc指令要1字节,loop要2字节。(目前这些就够用的了)。。。根据这些对上面题进行计算可以得出题意要求的指令存放在内存中要24个内存单元,及24个字节。转化为16进制就是18H。另外一种方式是亲自测试,方法就是将这段程序编写后,编译,链接,然后用debug载入,通过U指令来看,这样一目了然,具体IP数据都可以看见。载入后可看见mov ax,4c00h这条指令的启示IP是18H,那么它之前有18H单元(IP最初从0开始)。所以得到了18H。

yjiaitfk 发表于 2012-2-15 14:28:37

呵呵,谢谢了,明白了{:1_1:}

风幻影 发表于 2012-2-24 16:42:47

疾风飘流 发表于 2012-2-15 12:54 static/image/common/back.gif
首先,我们要了解这个题的意思,在题目要求中,是要把"mov ax,4c00h"前的指令(很重要)复制到内存0:200中, ...

我刚提问这个问题,不知为什么没有显示出来,问下,那个mov as,cs 行不行,看到写CODE有点吃惊

疾风飘流 发表于 2012-2-24 23:29:42

风幻影 发表于 2012-2-24 16:42 static/image/common/back.gif
我刚提问这个问题,不知为什么没有显示出来,问下,那个mov as,cs 行不行,看到写CODE有点吃惊

段寄存器与段寄存器之间是不可以之间用MOV语句的,其实这样的都可以用DEBUG自己调试出来。

dnowload 发表于 2012-3-5 01:07:15

疾风飘流 发表于 2012-2-15 12:54 static/image/common/back.gif
首先,我们要了解这个题的意思,在题目要求中,是要把"mov ax,4c00h"前的指令(很重要)复制到内存0:200中, ...

我认为答案的mov cx,18h应该书写成mov cs,18。ip指针指向18说明ip指针经历了从0——17的内存地址,正好18个内存单元才对。你说的24个内存单元并不正确,是在套用十进制24=十六进制18.=标准答案。

疾风飘流 发表于 2012-3-5 12:43:11

dnowload 发表于 2012-3-5 01:07 static/image/common/back.gif
我认为答案的mov cx,18h应该书写成mov cs,18。ip指针指向18说明ip指针经历了从0——17的内存地址,正好18 ...

额,如果不相信的话可以先编译链接后用debug亲自看下,至少我这么做后答案是正确的。

dnowload 发表于 2012-3-5 14:43:52

疾风飘流 发表于 2012-3-5 12:43 static/image/common/back.gif
额,如果不相信的话可以先编译链接后用debug亲自看下,至少我这么做后答案是正确的。

我知道答案是一样的,也就是说 mov cx,18h 和写mov cx,18得到的答案是一样的。你说的的 18h是由十进制的24等于十六进制的18h解释的。所以你说有24个内存单元,你可以去debug一下,ip指向0——17,只有18个内存单元而已。和你解释的24个内存单元是不同含义的。结果相同含义不同。

dnowload 发表于 2012-3-5 15:11:51

疾风飘流 发表于 2012-3-5 12:43 static/image/common/back.gif
额,如果不相信的话可以先编译链接后用debug亲自看下,至少我这么做后答案是正确的。

最后的疑问却让我想明白了问题,这个物理地址确实是用16进制来表示的。我把A——F这留个数给扔掉了。ip   0——17是24个内存单元。

疾风飘流 发表于 2012-3-5 21:59:21

dnowload 发表于 2012-3-5 15:11 static/image/common/back.gif
最后的疑问却让我想明白了问题,这个物理地址确实是用16进制来表示的。我把A——F这留个数给扔掉了。ip   ...

明白就好,大家都是共同进步的

hexiaofengye 发表于 2015-8-23 22:48:42

疾风飘流
多谢!

爱上小刺猬 发表于 2016-1-11 16:47:52

{:10_266:}0-17h??是0-16h吧 我觉得是23个字节

吃货YA鸭 发表于 2017-6-13 13:24:01

本帖最后由 吃货YA鸭 于 2017-6-13 13:44 编辑

做完这个实验才意识到,原来指令也是需要内存的,怪不得看不懂指令数据的意思呢。也就是说,就是把指令的所有十六进制都复制到20:0中,debug程序其中的初始cx是总指令的数据长度。难点是查Mov ax,4c00H指令之前的指令,一共占了多少内存,正常mov赋值的占内存3,mov寄存器赋值的占内存2,loop占内存2,inc占内存1,int占内存2,其中的mov es:,al寄存器占内存3,计算机解析为二步,第一步找到es:占内存1,第二步,mov ,al占内存2
页: [1]
查看完整版本: 实验4新手求助