运行 一个基本的汇编程序

Running a basic assembly program

我正在努力完成 "Programming from the ground up" 并编写了我的第一个程序:

.section .text
.globl _start
_start:
    movl , %eax
    movl [=11=], %ebx
    int [=11=]x80

我对此有几个问题:

  1. 这使用的是什么程序集?它说:

"This book teaches assembly language for x86 processors and the GNU/Linux operating system."

但是,如果我转到 https://godbolt.org 并选择 Assembly,实际上有数百个选项 -- ARM64 gcc 8.2、ARM gc 8.2、MIPS gcc 5.4,...为什么会有这么多版本?这些都是"assembly for x86 linux"吗?

  1. 有时我看到命令写成 movl [=12=], %ebxmovl %ebx, [=13=]。为什么这些有时会颠倒?

ARM64 gcc 8.2, ARM gc 8.2, MIPS gcc 5.4, ... Are these all "assembly for x86 linux"?

不,这些是 CPU 目标架构。有不同的 CPU 架构,每个都有自己的指令集和寄存器。不同的架构是不兼容的。为什么这么多?好吧,因为垄断是不好的,坦率地说,没有那么多。

Why are these sometimes reversed?

如果你的意思是:

movl    , (%rdi)

mov     DWORD PTR [rdi], 24

然后第一个是AT&T语法,第二个是Intel语法(他们都工作在x86,不管是AMD还是Intel,表达的是一样的东西,只是人类阅读的语法不同而已)。