[我的CS书中的一个练习要求为函数提供一个简短的(x86-64)汇编代码段,该函数以char指针作为参数并返回其指向的(第一个)字符。
本书中提出的解决方案如下:
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
中。您可以将其视为取消引用C0]的指针(即char
)。