我最近开始使用NASM进行汇编编程,因此请原谅我的任何错误。无论如何,我一直在尝试编译两个非常简单的程序,它们做完全相同的事情(或应该做),一个使用Intel语法,另一个使用AT&T语法。当我使用intel语法对其进行编码时,该程序似乎可以正常工作。但是,当我尝试使用AT&T语法对其进行编码时,由于我认为是分段错误或某些原因,程序在运行时崩溃。显然,它与intel-counterpart并没有做同样的事情,因此,如果有人指出我的代码出了什么问题,那太好了
顺便说一句:我正在64位Windows 10上对此进行编程,但是我认为这不会很有用,因为该程序本身几乎什么也做不到...
这是我的代码:
Intel语法:
.intel_syntax noprefix
.global main
main:
push rbp
mov rbp, rsp
mov rax, QWORD PTR [rbp + 0x8]
mov rbx, QWORD PTR [rbp + 0xc]
mov rax, rbx
mov rsp, rbp
pop rbp
ret
AT&T语法(程序崩溃):
.global main
main:
pushq %rbp
movq %rbp, %rsp
movq %rax, 0x8(%rbp)
movq %rbx, 0xc(%rbp)
movq %rax, %rbx
movq %rsp, %rbp
popq %rbp
ret
答案 0 :(得分:1)
是的,我刚刚意识到AT&T操作数的顺序是相反的,所以我在这里回答我自己的问题,也许这只是为什么您应该阅读文档和指南
的一个示例修复:
.global main
main:
pushq %rbp
movq %rsp, %rbp
movq 0x8(%rbp), %rax
movq 0xc(%rbp), %rbx
movq %rbx, %rax
movq %rbp, %rsp
popq %rbp
ret