[英]Assembly instruction to dereference a char pointer and return the result
我的 CS 书中的一个练习要求 function 的一个简短 (x86-64) 汇编片段,该片段将 char 指针作为参数并返回它指向的(第一个)字符。
书中提出的解决方案如下:
movq (%rdi), %rax
movb (%rax), %al
我原以为一条指令就足够了:
movb (%rdi), %al
两者是等价的吗? 我错过了什么?
在您的第一个片段中,发生了两个指针取消引用:
movq (%rdi), %rax
movb (%rax), %al
也就是说,将rdi
指向的 8 字节 memory 位置加载到rax
中。 然后,将rax
指向的 1 字节 memory 位置加载到al
中。 您可以将其视为完全取消引用指向char
的指针(即char **
)的指针。
而在您的第二个片段movb (%rdi), %al
中,有一个指针取消引用,即rdi
指向的 1 字节位置被加载到al
中。 您可以将其视为取消引用指向char
的指针(即char *
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.