汇编语言 多种寻址方式实现内存读写

在调试器中编程,用多种寻址方式实现:在一块可读写的内存中写入“11H,22H,33H,44H”,重复100次

首先在“内存布局”页面寻找可读写内存

img

找到相应位置

img

下面每次运行完毕后均重新运行恢复上述情形

直接寻址

设置ECX=100,ESI=004B8000H

img

代码

img

结果

img

寄存器间接寻址

设置ECX=100,ESI=004B8000H,EAX=11223344H

img

代码

img

结果

img

寄存器相对寻址

设置ECX=100,ESI=004B0000H,EAX=11223344H

img

代码

img

结果

img

基址变址寻址方式

设置ECX=100,ESI=004B8000H,EDI=00000000H

img

代码

img

结果

img

相对基址变址寻址

设置ECX=100,ESI=004B8000H,EDI=00000000H

img

代码

img

结果

img

带比例因子相对基址变址寻址

设置ECX=100,ESI=0H

img

代码

img

结果

img

编写一段程序,该程序实现将自身复制到一块可读写的内存中

原理就是把程序所在地址的值搬到其他内存,其中其他地址与程序地址一一对应且依次增加,实现了程序的复制。最关键的在于“对应且增加”多少次,即ECX的值,这要根据程序大小来计算

 

设置EDI=0H

代码如下

img

其中ECX=1AH是数了数程序有26字节后加上的,结果如下,完美实现

 

posted @ 2022-03-13 11:20  Xiaohanahahah  阅读(249)  评论(0编辑  收藏  举报