求助,汇编语言第六章检测点6.1的一些问题
本帖最后由 冷色画 于 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,
变成了mov ax,
纠结
冷色画 发表于 2012-11-18 22:51 static/image/common/back.gif
这下明白了,就是循环前面的代码占了12个字节,覆盖到循环,就不能继续执行了,能不能解释一下为什么有了 ...
dw 在cs段开始先定义了一段数据,该段代码先修改定义的数据,cx=8,不会覆盖代码,若你把修改的数据数量增加,如cx改为16,同样会出现以前的问题 是不是第8个数据开始出现错误? 个人认为:程序汇编后,代码段也是以二进制的数据存放于内存中的,有一些指令长,有一些短,上面的例子中如果去掉定义的dw段后,写入的数据长度比执行的代码转换成二进制数据短的时候没有影响,但有一些指令(例如loop)转换成二进制的数据比word数据短,数据会覆盖以后要执行的代码
不知道这样理解对不对 ACC 发表于 2012-11-18 22:23 static/image/common/back.gif
是不是第8个数据开始出现错误?
是从第七个数据开始错的 我明白了,第一次执行————上的句子,改变一次内存内容,数据覆盖第一行代码,mov ax,0
第二次执行————上的句子改变内存内容,覆盖第二行代码,mov ds,ax
知道第六次执行————上的句子,覆盖其本身,下一次不能执行_________
不再改变内存内容,数据开始出现错误 ACC 发表于 2012-11-18 22:29 static/image/common/back.gif
个人认为:程序汇编后,代码段也是以二进制的数据存放于内存中的,有一些指令长,有一些短,上面的例子中如 ...
也就是说,最后当数据写到后面几位的时候,把后面要执行的代码给覆盖掉了,导致后面的数据不准确。。可以这样理解吗? 冷色画 发表于 2012-11-18 22:41 static/image/common/back.gif
也就是说,最后当数据写到后面几位的时候,把后面要执行的代码给覆盖掉了,导致后面的数据不准确。。可以 ...
嗯,代码是循环的,其实现的功能是改变内存数据,当改变了自身代码时,就不能继续执行。。。。。 ACC 发表于 2012-11-18 22:39 static/image/common/back.gif
我明白了,第一次执行————上的句子,改变一次内存内容,数据覆盖第一行代码,mov ax,0
第二次执行—— ...
这下明白了,就是循环前面的代码占了12个字节,覆盖到循环,就不能继续执行了,能不能解释一下为什么有了dw这段代码就可以了呢? 有同样的疑问 不过我删了dw那一段以后 只能运行到一半
页:
[1]