内存运行方式
内存地址
十六进制 0x00000000
读写内存的方式
//将立即数写入内存
MOV BYTE PTR DS:[00000000],1
//将寄存器中的内容写入内存
MOV DWORD PTR DS:[00000000],EAX
//当寄存器宽度超过一个内存地址宽度时,内存会自动向后分配空间,连续使用;
//被赋值内容宽度需大于等于赋值寄存器的宽度,若大于,则被复制内存自动缩小宽度。
//将内存写入寄存器
MOV EAX,DWORD PTR DS:[0x00000000] //0x可省略
//在汇编中,绝大多数指令不允许将内存中的数据移动到内存,必须经过寄存器
内存地址的5中表示形式
- 立即数:中括号里直接写数字
- [reg]:reg表示8个通用寄存器中的任意一个
- [reg + 立即数]
- [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
- [reg + reg * {1, 2, 4, 8} + 立即数]