鱼C论坛

 找回密码
 立即注册
查看: 3860|回复: 12

实验4新手求助

[复制链接]
发表于 2012-2-15 12:54:15 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 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,[bx]
  mov es:[bx],al
  inc bx
  loop s
  
  mov ax,4c00h
  int 21h

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

最佳答案

查看完整内容

首先,我们要了解这个题的意思,在题目要求中,是要把"mov ax,4c00h"前的指令(很重要)复制到内存0:200中,那么实际上复制的就是内存的数据(指令在内存中也是数据)。那么这些指令的数据有多长就要看IP了。 指令的IP我个人有两种看法:第一种是记住,一般来说,寄存器与数据之间进行mov要3字节长度,寄存器与寄存器之间进行mov要2字节长度,定义循环要1字节,寄存器与内存单元之间进行mov要2字节长度,inc指令要1字节,loop要2 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-15 14:28:37 | 显示全部楼层
呵呵,谢谢了,明白了{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 16:42:47 | 显示全部楼层

我刚提问这个问题,不知为什么没有显示出来,问下,那个mov as,cs 行不行,看到写CODE有点吃惊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 23:29:42 | 显示全部楼层
风幻影 发表于 2012-2-24 16:42
我刚提问这个问题,不知为什么没有显示出来,问下,那个mov as,cs 行不行,看到写CODE有点吃惊

段寄存器与段寄存器之间是不可以之间用MOV语句的,其实这样的都可以用DEBUG自己调试出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 01:07:15 | 显示全部楼层
疾风飘流 发表于 2012-2-15 12:54
首先,我们要了解这个题的意思,在题目要求中,是要把"mov ax,4c00h"前的指令(很重要)复制到内存0:200中, ...

我认为答案的mov cx,18h应该书写成mov cs,18。ip指针指向18说明ip指针经历了从0——17的内存地址,正好18个内存单元才对。你说的24个内存单元并不正确,是在套用十进制24=十六进制18.=标准答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 12:43:11 | 显示全部楼层
dnowload 发表于 2012-3-5 01:07
我认为答案的mov cx,18h应该书写成mov cs,18。ip指针指向18说明ip指针经历了从0——17的内存地址,正好18 ...

额,如果不相信的话可以先编译链接后用debug亲自看下,至少我这么做后答案是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 14:43:52 | 显示全部楼层
疾风飘流 发表于 2012-3-5 12:43
额,如果不相信的话可以先编译链接后用debug亲自看下,至少我这么做后答案是正确的。

我知道答案是一样的,也就是说 mov cx,18h 和写mov cx,18得到的答案是一样的。你说的的 18h是由十进制的24等于十六进制的18h解释的。所以你说有24个内存单元,你可以去debug一下,ip指向0——17,只有18个内存单元而已。和你解释的24个内存单元是不同含义的。结果相同含义不同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 15:11:51 | 显示全部楼层
疾风飘流 发表于 2012-3-5 12:43
额,如果不相信的话可以先编译链接后用debug亲自看下,至少我这么做后答案是正确的。

最后的疑问却让我想明白了问题,这个物理地址确实是用16进制来表示的。我把A——F这留个数给扔掉了。ip   0——17是24个内存单元。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 21:59:21 | 显示全部楼层
dnowload 发表于 2012-3-5 15:11
最后的疑问却让我想明白了问题,这个物理地址确实是用16进制来表示的。我把A——F这留个数给扔掉了。ip   ...

明白就好,大家都是共同进步的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-23 22:48:42 | 显示全部楼层
疾风飘流
多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-11 16:47:52 | 显示全部楼层
0-17h??是0-16h吧 我觉得是23个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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:[bx],al寄存器占内存3,计算机解析为二步,第一步找到es:占内存1,第二步,mov [bx],al占内存2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表