鱼C论坛

 找回密码
 立即注册
查看: 2005|回复: 9

求助,汇编语言第六章检测点6.1的一些问题

[复制链接]
发表于 2012-11-18 22:00:13 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 冷色画 于 2012-11-18 22:47 编辑

《汇编语言》第6章的检测点6.1
  我有以下几点疑问,希望各位给我帮助,谢谢!
  首先,因为语文水品不好,我没理解题目的意思,把内存0:0-0:15单元中的内容改写程序。额..就不知到改写到哪里了,经过     debug调试,我知道了是改写到cs:0-cs:15的单元中
   第一个问题:我对          dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h   一句代码有疑问,为什么会有这句代码?dw定义的数据存在cs:0-cs:15的地方,那要改写,为什么还要定义?   这段代码不要行不行?  第二个问题:  我试着把dw的代码删除,进行调试,发现最后cs:0-cs:15的内存空间,前面几个数据是对的,后面数据不对,百思不得其解  希望有人解答,写的有点啰嗦,希望各位不要介意哈,谢谢!

调试的时候我发现倒数第二个循环的时候,ax的值发生了变化,最后一个循环的时候,本来是mov ax,[bx]

变成了mov ax,[bx+17]
纠结
QQ截图20121118215808.jpg

最佳答案

查看完整内容

dw 在cs段开始先定义了一段数据,该段代码先修改定义的数据,cx=8,不会覆盖代码,若你把修改的数据数量增加,如cx改为16,同样会出现以前的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-18 22:00:14 | 显示全部楼层

dw 在cs段开始先定义了一段数据,该段代码先修改定义的数据,cx=8,不会覆盖代码,若你把修改的数据数量增加,如cx改为16,同样会出现以前的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 22:23:54 | 显示全部楼层
是不是第8个数据开始出现错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 22:29:12 | 显示全部楼层
个人认为:程序汇编后,代码段也是以二进制的数据存放于内存中的,有一些指令长,有一些短,上面的例子中如果去掉定义的dw段后,写入的数据长度比执行的代码转换成二进制数据短的时候没有影响,但有一些指令(例如loop)转换成二进制的数据比word数据短,数据会覆盖以后要执行的代码
不知道这样理解对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-18 22:31:25 | 显示全部楼层
ACC 发表于 2012-11-18 22:23
是不是第8个数据开始出现错误?

是从第七个数据开始错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 22:39:58 | 显示全部楼层
我明白了,第一次执行————上的句子,改变一次内存内容,数据覆盖第一行代码,mov ax,0
第二次执行————上的句子改变内存内容,覆盖第二行代码,mov ds,ax
知道第六次执行————上的句子,覆盖其本身,下一次不能执行_________
不再改变内存内容,数据开始出现错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-18 22:41:04 | 显示全部楼层
ACC 发表于 2012-11-18 22:29
个人认为:程序汇编后,代码段也是以二进制的数据存放于内存中的,有一些指令长,有一些短,上面的例子中如 ...

也就是说,最后当数据写到后面几位的时候,把后面要执行的代码给覆盖掉了,导致后面的数据不准确。。可以这样理解吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 22:45:05 | 显示全部楼层
冷色画 发表于 2012-11-18 22:41
也就是说,最后当数据写到后面几位的时候,把后面要执行的代码给覆盖掉了,导致后面的数据不准确。。可以 ...

嗯,代码是循环的,其实现的功能是改变内存数据,当改变了自身代码时,就不能继续执行。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-18 22:51:11 | 显示全部楼层
ACC 发表于 2012-11-18 22:39
我明白了,第一次执行————上的句子,改变一次内存内容,数据覆盖第一行代码,mov ax,0
第二次执行—— ...

这下明白了,就是循环前面的代码占了12个字节,覆盖到循环,就不能继续执行了,能不能解释一下为什么有了dw这段代码就可以了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-1 19:48:08 | 显示全部楼层
有同样的疑问 不过我删了dw那一段以后 只能运行到一半
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 12:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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