文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2. 寻址
寻址格式和 MASM 存在差异。
- MOV 操作数大小应该相同,不能直接在内存间复制。
- BYTE/1, WORD/2, DWORD/4, QWORD/8, TWORD/10。
mov rax, 1 ; 立即寻址,操作数是常量。 mov rax, rbx ; 寄存器寻址,操作数在寄存器中。 mov rax, [0x1000] ; 直接寻址,操作数地址常量。 mov rax, [rbx] ; 寄存器间接寻址,操作数在寄存器中。 mov rax, [8+rbx] ; 寄存器相对寻址,额外有个偏移。8[rbx] mov rax, [rbx+rsi] ; 基址变址。[rbx][rsi] mov rax, [8+rbx+rsi] ; 相对基址变址。8[rbx][rsi] mov rax, [8+rbx+4*rsi] ; 8[rbx][4*rsi]
寄存器以名称确定数据尺寸,如无法确定就需添加数据类型。
global _start section .data d: dq 0 section .text main: sub rsp, 0x10 mov dword [rsp], 0x11223344 ; 写入内存,添加数据大小。 mov eax, [rsp] mov [d], rax mov rbx, d ; 将地址存入寄存器 mov rcx, [d] ; 从地址取值存入寄存器 jmp exit _start: jmp main exit: mov rax, 60 xor rdi, rdi syscall
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论