美文网首页
(32位汇编 六)内存读写及寻址方式

(32位汇编 六)内存读写及寻址方式

作者: 1301c72 | 来源:发表于2017-09-22 09:08 被阅读0次

我们称计算机CPU是32位或者64位,有很多书上说之所以叫32位计算机是因为寄存器的宽度是32位,这样说是不准确的,因为还有很多寄存器是大于32位的。多少位的机器和寄存器的宽度没有关系,和计算机的寻址宽度有关系,所能查找的内存编号的范围。

内存格式

  1. 每一个内存单元的宽度为8位。
  2. [编号]称为地址。
  3. 内存单元:字节 每个字节有个编号,称为内存地址

从指定的内存中写入/读取数据

mov dword ptr ds:[0x0012FF34], 0x12345678
mov eax, dword ptr ds:[0x0012FF34]

dword: 要读/写多少字节(byte == 1字节,word == 2字节,dword == 4字节)
ptr: Point 代表后面是一个指针
ds: 段寄存器
0x0012FF34: 内存编号,必须是32位的(对于32位汇编),前面的0可以省略
注意:地址编号不要随便写,因为内存是有保护的,并不是所有的内存都是可以直接读写(需要特别处理)。做练习时,建议地址编号写成esp的值。

寻址公式

  1. 寻址公式一:[立即数]

读取内存的值:

MOV EAX, DWORD PTR DS:[0x13FFC4]
MOV EAX, DWORD PTR DS:[0x13FFC8]

向内存中写入数据:

MOV DWORD PTR DS:[0X123FFC4], eax
MOV DWORD PTR DS:[0X123FFC8], ebx

获取内存编号: LEA指令,取地址

LEA EAX, DWORD PTR DS:[0x13FFC4]
LEA EAX, DWORD PTR DS:[ESP + 8]

  1. 寻址公式二:[reg] reg代表寄存器 可以是8个(32位)通用寄存器中的任意一个

读取内存的值:

MOV ECX, 0x13FFD0
MOV EAX, DWORD PTR DS:[ECX]

向内存中写入数据:

MOV EDX, 0x13FFD8
MOV DWORD PTR DS:[EDX], 0x87654321

获取内存编号:

LEA EAX, DWORD PTR DS:[EDX] // 取地址
MOV EAX, DWORD PTR DS:[EDX] // 取地址里面的内容

  1. 寻址公式三:[reg + 立即数]

读取内存的值:

MOV ECX, 0x13FFD0
MOV EAX, DWORD PTR DS:[ECX + 4]

向内存中写入数据:

MOV EDX, 0x13FFD8
MOV DWORD PTR DS:[EDX + 0xC], 0x87654321

获取内存编号:

LEA EAX, DWORD PTR DS:[EDX + 4] // 取地址
MOV EAX, DWORD PTR DS:[EDX + 4] // 取地址里的内容

  1. 寻址公式四:[ reg + reg*{1, 2, 4, 8} ]

读取内存的值:

MOV EAX, 13FFC4
MOV ECX, 2
MOV EDX, DWORD PTR DS:[EAX + ECX*4]

向内存中写入数据:

MOV EAX, 13FFC4
MOV ECX, 2
MOV DWORD PTR DS:[EAX + ECX*4], 87654321

获取内存编号:

LEA EAX, DWORD PTR DS:[EAX + ECX*4]

  1. 寻址公式五:[ reg + reg*{1, 2, 4, 8} + 立即数 ]

读取内存的值:

MOV EAX, 13FFC4
MOV ECX, 2
MOV EDX, DWORD PTR DS:[EAX + ECX*4 + 4]

向内存中写入数据:

MOV EAX, 13FFC4
MOV ECX, 2
MOV DWORD PTR DS:[EAX + ECX*4 + 4], 87654321

获取内存编号:

LEA EAX, DWORD PTR DS:[EAX + ECX*4 + 2]

相关文章

  • (32位汇编 六)内存读写及寻址方式

    我们称计算机CPU是32位或者64位,有很多书上说之所以叫32位计算机是因为寄存器的宽度是32位,这样说是不准确的...

  • 内存读写-内存寻址

    DTDebug再介绍 左下角就是内存数据窗口。最下面是命令行窗口。我们可以输入命令查看某一块内存的数据db 0x0...

  • 汇编- 寻址方式

    1, 直接寻址 这是最简单的一种寻址方式-该指令的操作数中包含一个具体的地址。 例如: MOV DWORD PTR...

  • 8086 指令系统寻址方式

    整理汇编语言学习笔记,回顾一下8086 指令系统的寻址方式。 寻址与指令 寻址方式(Addressing Mode...

  • 汇编的寻址方式

    寻址的对象 程序是指令的集合,指令包括操作码和操作数。寻址可分为指令的寻址即表示下一条指令的位置,还有便是数据的寻...

  • AT&T 风格汇编语言(chapter 1 寻址方式以及Linu

    汇编语言是更方便人类阅读的计算机指令形式 一、寻址方式(Data Accessing Methods) 立即寻址 ...

  • 植物大战僵尸带你入门游戏辅助

    本文使用CE这一工具并采用汇编间接寻址的方式修改游戏中内存数据,实战操作,游戏还能这么玩!前提也声明,我们修改单机...

  • ARM 汇编指令学习:[1]ARM指令寻址方式

    ARM 汇编指令学习:[1]ARM指令寻址方式 一、数据处理指令的操作数的寻址方式 通常具有下面3种格式: 1、 ...

  • 寄存器&指令

    汇编原理 地址总线:它的宽度决定了cpu的寻址能力,如1G内存寻址能力是1024x1024x1024; 8086地...

  • 寄存器的寻址方式

    汇编语言的寻址方式的总结
    编写时间:2018.3.23作者:aclihui 最近...

网友评论

      本文标题:(32位汇编 六)内存读写及寻址方式

      本文链接:https://www.haomeiwen.com/subject/vyvtextx.html