您好、欢迎来到现金彩票网!
当前位置:老k棋牌 > 栈内容 >

用内存0:0~0:15单元中的内容改写程序中的数据

发布时间:2019-07-20 00:42 来源:未知 编辑:admin

  请问mov cs:[bx],ax 为什么出来一个CS? 没有 mov cs:[bx],ax 刚好把八个单元中的值累加到AX,然后怎么个情况啊。。迷茫了。。。拜托各位说的详细点。

  问题为:下面的程序实现一次用内存0:0~0:15单元中的内容改写程序中的数据。展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  程序把数据段0:0~0:15单元中的内容逐字(双字节)读出,然后写到代码段对应的偏移位置,从而达到改写程序中数据的目的。

  mov cs:[bx],ax的目的操作数是基址寻址,默认的段寄存器是数据段寄存器,若要写到其它段,必须加段寄存器前缀。因为要把数据写到代码段,所以,必须在目的操作数前面加上代码段寄存器前缀。

  但,这段程序未等执行完毕就会产生不可预料的结果。因为程序主题指令很短,未等执行完毕,就被改写,继而导致结果不可预料。

  参考王爽老师的汇编语言,前面汤旺河边朋友回答的挺正确的,补充一点就是说题目意思是把程序中的数据改写了,其实就是dw定义的8个字型数据,用什么来改呢,题目中有要求是从内存0:0~0:15中提取数据来更改。所以使用的是mov cs:[bx],ax。cs指向程序开始的地方,王爽老师书第6章6.1节有一段话“程序在运行的时候CS中存放代码段的段地址,所以可以从CS中得到它们的段地址”。

  可以看到程序在debug中运行调试中是正确的,内存0:0~0:15中的数据把程序中的数据(由dw所定义的字型数据)更改了,这个程序应该是正确的。原先我也以为这个程序会出错就是以为它会把Start对应的程序更改了这不就会有问题嘛,后来反省过来其实人家意思只是把start前面的数据段更改下而已,并不会影响下面代码的执行。

http://theenigmaco.com/zhannarong/343.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有