运行 一个基本的汇编程序
Running a basic assembly program
我正在努力完成 "Programming from the ground up" 并编写了我的第一个程序:
.section .text
.globl _start
_start:
movl , %eax
movl [=11=], %ebx
int [=11=]x80
我对此有几个问题:
- 这使用的是什么程序集?它说:
"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"吗?
- 有时我看到命令写成
movl [=12=], %ebx
和 movl %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,表达的是一样的东西,只是人类阅读的语法不同而已)。
我正在努力完成 "Programming from the ground up" 并编写了我的第一个程序:
.section .text
.globl _start
_start:
movl , %eax
movl [=11=], %ebx
int [=11=]x80
我对此有几个问题:
- 这使用的是什么程序集?它说:
"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"吗?
- 有时我看到命令写成
movl [=12=], %ebx
和movl %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,表达的是一样的东西,只是人类阅读的语法不同而已)。