(32位汇编 六)内存读写及寻址方式
来源:互联网 发布:中巴公路 知乎 编辑:程序博客网 时间:2024/05/18 00:48
我们称计算机CPU是32位或者64位,有很多书上说之所以叫32位计算机是因为寄存器的宽度是32位,这样说是不准确的,因为还有很多寄存器是大于32位的。多少位的机器和寄存器的宽度没有关系,和计算机的寻址宽度有关系,所能查找的内存编号的范围。
内存格式
- 每一个内存单元的宽度为8位。
[编号]
称为地址。- 内存单元:字节 每个字节有个编号,称为内存地址
从指定的内存中写入/读取数据
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的值。
寻址公式
- 寻址公式一:[立即数]
读取内存的值:
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]
- 寻址公式二:[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] // 取地址里面的内容
- 寻址公式三:[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] // 取地址里的内容
- 寻址公式四:[ 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]
- 寻址公式五:[ 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位汇编 六)内存读写及寻址方式
- 一步步学汇编(六)内存寻址方式
- 一步步学汇编(六)内存寻址方式
- 汇编学习(二)内存地址及寻址方式
- 32位内存寻址
- 16位汇编x86_寻址方式
- 16位汇编寄存器和寻址方式总结
- 汇编--学习笔记(二)-寻址方式
- 汇编 寻址方式总结
- [汇编]8086寻址方式
- 汇编寻址方式总结
- 汇编 寻址方式总结
- 汇编寻址方式
- ARM汇编--寻址方式
- 汇编-寻址方式
- 汇编的寻址方式
- 汇编寻址方式总结
- 汇编-ARM寻址方式
- 虚拟机VMware+Ubuntu系统的安装教程
- (32位汇编 四)32位通用寄存器
- (32位汇编 五)mov/add/sub/and/or/xor/not
- spoj Distinct Substrings
- All Roads Lead to Rome (30)
- (32位汇编 六)内存读写及寻址方式
- Intel处理器简介
- (32位汇编 十)SI/DI/BP/SP/IP/CS/DS/ES/SS
- (32位汇编 八)标志寄存器
- (32位汇编 九)ADC/SBB/XCHG/MOVS/STOS/REP
- (32位汇编 十一)修改EIP的值
- (32位汇编 七)堆栈/栈(stack)
- ajaxfileupload.js上传插件的使用(php版)
- Java常见集合框架(十一):Set之LinkedHashSet、CopyOnWriteArraySet