取消引用 char 指针和 return 结果的汇编指令

Assembly instruction to dereference a char pointer and return the result

我的 CS 书中的一个练习要求一个函数的简短 (x86-64) 汇编片段,该函数将 char 指针作为参数,returns 它指向的(第一个)字符。

书中提出的解决方案如下:

movq (%rdi), %rax
movb (%rax), %al

我原以为一条指令就足够了:

movb (%rdi), %al

这两个是等价的吗?我错过了什么?

在您的第一个片段中,发生了两个指针取消引用:

movq (%rdi), %rax
movb (%rax), %al

rdi指向的8字节内存位置加载到rax。然后,将 rax 指向的 1 字节内存位置加载到 al 中。您可以将其视为将 指针完全取消引用到指向 char 的指针(即 char **)。

而在您的第二个代码段 movb (%rdi), %al 中,有一个指针取消引用,即 rdi 指向的 1 字节位置被加载到 al 中。您可以将其视为取消引用指向 char 指针(即 char *)。