使用AT&T语法时,汇编程序崩溃

时间:2018-10-11 18:46:34

标签: windows assembly nasm

我最近开始使用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

1 个答案:

答案 0 :(得分:1)

Intel and AT&T syntax

是的,我刚刚意识到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