取消引用char指针并返回结果的汇编指令

问题描述 投票:1回答:1

[我的CS书中的一个练习要求为函数提供一个简短的(x86-64)汇编代码段,该函数以char指针作为参数并返回其指向的(第一个)字符。

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

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

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

movb (%rdi), %al

两个相等吗?我想念什么?

assembly x86 x86-64 att
1个回答
2
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.