鱼C论坛

 找回密码
 立即注册
查看: 3794|回复: 17

这是为什么呢??????帮我解决下

[复制链接]
发表于 2012-1-5 18:43:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ds:data
       data segment
               dw 3,18700,65535,8
       data ends
           
           code segment 
         start : mov ax,data 
                 mov ds,ax
                         mov si,0
                         mov di,32
                         
                         mov cx,4
                s:   mov ax,[si]
             mov [di],ax
             add si,2
             add di,2
          loop s
            mov ax,4c00h
            int 21h
      code ends
  end start          
为什么只有3复制过去了,而其它的值为什么没有复制过去???????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-5 23:42:53 | 显示全部楼层
运行结束后
-d 1415:0
1415:0000  03 00 0c 49 ff ff 08 00-
1415:0010  b8 15 14 8e d8 be 00 00-
1415:0020  03 00 83 c6 02 83 c7 04-
为什么是这样?????????????????            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-5 23:43:45 | 显示全部楼层
运行结束后
-d 1415:0
1415:0000  03 00 0c 49 ff ff 08 00-
1415:0010  b8 15 14 8e d8 be 00 00-
1415:0020  03 00 83 c6 02 83 c7 04-为什么是这样?????????????????            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-6 00:11:19 | 显示全部楼层
本帖最后由 风扫地 于 2012-1-6 00:23 编辑

跟踪发现。。。你的data段太小了。。
结果 ds:20 指到了代码段去了。
也就是就说。。要拷贝到 ds:di 的数据会改写代码段的数据。也就是会修改要执行的代码。。跟踪发现。。 你的代码在执行
设置数据段
mov   ds,ax
后。
发现ds:20和 cs:e  指向是同一段内存空间。。
而ce对应出的代码就是
s:   
                                mov ax,ds:[si]
                                mov ds:[di],ax
                                add si,2
                                add di,2
                                loop s

从逻辑上 这段代码执行了一遍就被重写了。代码发生了变化。。不能完成你需要他完成的工作了。。
你在执行玩第一次loop s后再  u  cs:e  看看。。代码是不是已经发生变化了。

mov ds:[di],ax-------------------->add ax,[bx+si]


建议加长代码段。。data段修改为
     data segment
               dw 3,18700,65535,8
                           dw 8 dup(0)
                           dw 8 dup(0)
                           dw 8 dup(0)
       data ends


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-6 09:14:00 | 显示全部楼层
谢谢了,但是我在问你下,有点看的不是很懂,我执行mov ds,ax后 ds=1415,cs=1419
---ds指向的 物理地址=1415*16+20=14170
---cs指向的 物理地址=1419*16+e=1419e
不是一样啊????????????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-6 09:16:09 | 显示全部楼层
因为刚自学到这,所以连你说的数据段少也是第一次知道,谢谢了,上面那个问题麻烦你能详细点吗?????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-6 12:24:43 | 显示全部楼层
本帖最后由 风扫地 于 2012-1-6 12:27 编辑

可能我们的环境不同吧。我这里的指向是这样的。。不过这里数据段太小是问题所在,注意不要把东西写到你不知道是否是安全内存的地方去。。。
-------------------
你运行完loop s一次后再尝试看看   cs:e 处的代码。。。
在debug中 用 u cs:e   这个命令、、是看看代码是不是发生了变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-6 15:43:09 | 显示全部楼层

dw 8 dup(0)
dw 8 dup(0)
dw 8 dup(0)
请问一下,写上这三行就表示增加data段的大小了,是吧。小弟不懂,你能不能稍微解释一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-6 16:03:35 | 显示全部楼层
谢谢你了。。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-6 16:15:06 | 显示全部楼层
我觉得是对的,你看4个数依次是0003H, 94c0H, ffffH, 0008H.这不就是十进制的3,18700,65535,8吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-6 16:15:57 | 显示全部楼层
上面那个是490CH
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-6 21:04:49 | 显示全部楼层
seuer126 发表于 2012-1-6 15:43
dw 8 dup(0)
dw 8 dup(0)
dw 8 dup(0)

后面会学到这个伪指令。。不必着急。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-6 23:44:54 | 显示全部楼层
数据段太小的话,有时候就会导致数据的丢失,这个知识点在那里啊??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-7 09:43:20 | 显示全部楼层
风扫地 发表于 2012-1-6 21:04
后面会学到这个伪指令。。不必着急。。

谢谢啊,呵呵!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-7 10:24:02 | 显示全部楼层
其实不添加数据段也行的,你的ds:di指到代码段中了,也就是你把di调大,调到没用到的那些空的内存中,就不用添加代码段了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-7 11:19:11 | 显示全部楼层
说实话 还没学到这些内容 不过帮你顶下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-7 11:49:15 | 显示全部楼层
笑浪 发表于 2012-1-7 11:19
说实话 还没学到这些内容 不过帮你顶下

女的?额,第一次碰到女的学编程,而且还是汇编
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-7 13:13:15 | 显示全部楼层
学习了{:1_1:}:D
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 16:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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