汇编小册(九) 动起来

本文最后更新于9 个月前,文中所描述的信息可能已发生改变。

嘿,伙计,这是你一直等待的时刻,我们要写一些代码。

首先我们来看一个 Go 的代码例子。

go
// Go
a := 1

我们将变量 a 的值设置为 1 。

在第 8 节我们讨论过,在使用高级语言编程时,我们可以声明变量来临时存储数据。寄存器,你可以看作汇编语言的变量。

shell
// X86-64 处理器的汇编
mov rax, 1;

我们将寄存器 rax 的值设置为 1 。

我们在这里使用了 mov 指令(“移动”的缩写)。它会将右侧 1 这个值移动到左侧的 rax 寄存器中。

现在看起来,变量和寄存器真的很相似吧,但它们的差异点也需要记住。

使用变量时,我们可以声明任意个数的变量,并且可以随心所欲的命名它们。

使用寄存器时,仅限于处理器指定。我们也不能命名它们。

go
// Go
a := 1
b := a

b 的值为 1 。

shell
// X86-64 处理器的汇编
mov rax, 1;
mov rbx, rax;
上面这个例子,你认为 rbx 的值是什么?

我们将一个寄存器的值设置为另一个寄存器的值,rbx 的值为 1 。

让我们最后再来看一个关于 mov 例子吧!加油!你能记住 mov 的重点。

go
// Go
a := 1
b := 2

a = b

我们先将 a 的值设置为 1,在最后,a 的值为 2,因为我们执行了 a = b,把 b 赋值给了 a 。

shell
// X86-64 处理器的汇编
mov rax, 1;
mov rbx, 2;

mov rax, rbx;
你认为最后 rax 的值是多少呢?

即使我们先将 rax 的值设置为 1,不过最后 rax 值应该是 2,因为我们将 rbx 的值 2,设置给了 rax。

套你猴子,如何设计一个数据库的索引模块
汇编小册(八) 寄存器