static inline gd_t *get_gd(void){gd_t *gd_ptr; asm volatile("mov %0, x18\n" : "=r(gd_ptr)"); return gd_ptr;} 其返回的不是函数内部的指针吗,怎么可以作为 左值
时间: 2024-02-01 18:13:45 浏览: 91
这段代码中的返回值是一个指针,而指针本身是可以作为左值的。指针作为左值时,可以对指针所指向的内存进行修改。
在这段代码中,`get_gd()`函数返回的是指向`gd_t`类型的结构体的指针,可以通过这个指针访问和修改`gd_t`结构体中的成员变量。例如:
```c
gd_t *gd = get_gd();
gd->some_member = some_value;
```
这里将`get_gd()`返回的指针赋值给了`gd`变量,然后对`gd`指针所指向的`gd_t`结构体中的成员变量`some_member`进行了修改。
相关问题
uboot 中 asm volatile("mov %0, x18\n" : "=r(gd_ptr)"); 这段代码怎么理解
这段代码是使用内嵌汇编写的 ARM64 汇编代码。它的作用是将寄存器 x18 的值赋值给变量 gd_ptr。
具体来说,"mov %0, x18\n" 是一条汇编指令,它的作用是将 x18 寄存器的值移动到一个占位符 %0 所代表的位置。"=r(gd_ptr)" 是一个输出操作限制符,它表示将变量 gd_ptr 映射到占位符 %0 上,并且使用 r 寄存器来实现寻址。
因此,整个内嵌汇编代码的意思是将 x18 寄存器的值赋值给变量 gd_ptr。这种技巧在操作系统等底层开发中经常使用,可以直接操作硬件寄存器,提高代码的效率。
阅读全文