汇编语言(二)
我们再看一个稍微复杂赢一点的例子
loop:
add edx, DWORD PTR [rax]
add rax, 4
cmp rax, rcx
jne loop
这段代码计算一个32位整数数组的总和,就像一个简单的for循环一样。
循环的“主体”是 add edx, DWORD PTR [rax]
:这条指令是从迭代器rax中加载数据并将其添加到累加器edx中。接下来,我们通过 add rax, 4
将迭代器向前移动4字节。然后,发生了一个件稍微复杂的事情。
跳转
汇编没有高级语言中的if、for、函数或其他控制流结构。它所拥有的是goto,或者在低级编程世界中称为“跳转”。
跳转指令将指令指针移动到其操作数指定的位置。这个位置可以是内存中的绝对地址、相对于当前地址的地址,甚至是在运行时计算出的。为了避免直接管理这些地址的麻烦,你可以在任何指令前加上一个字符串和冒号,并在转换为机器码时使用这个字符串作为标签,该标签将被替换为该指令的相对地址。
标签可以是任何字符串,但编