声明“extern struct cpu *cpu asm("%gs:0");”是什么意思意思是?

2024-01-04

当我阅读 xv6 源代码时,我对下面声明的语法感到困惑。谁能给我解释一下吗?

extern struct cpu *cpu asm("%gs:0");

我假设你明白什么extern struct cpu *cpu方法。你的问题是:asm("%gs:0")部分意思是?

这段代码使用了一个名为的 gcc 扩展汇编标签 https://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm-Labels说变量cpu由汇编字符串定义%gs:0.

这不是此扩展的用途,并且被视为hack https://gcc.gnu.org/ml/gcc/2015-08/msg00075.html.

有关于 gs(和 fs)的精彩讨论here https://stackoverflow.com/a/10810340/2189500,但总之 gs 指向当前线程的本地存储。 gs 中数据的格式取决于您的操作系统(Windows 与 Linux 有很大不同)。这个特定的代码表示在偏移处0从 gs 中,有一个指向 a 的指针struct cpu.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

声明“extern struct cpu *cpu asm("%gs:0");”是什么意思意思是? 的相关文章

  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 如何编译GCC生成的asm?

    我正在玩一些汇编代码 有些事情困扰着我 我编译这个 include
  • 为什么 FMA _mm256_fmadd_pd() 内在函数有 3 个 asm 助记符:“vfmadd132pd”、“231”和“213”?

    有人可以向我解释一下为什么融合乘法累加指令有 3 种变体 vfmadd132pd vfmadd231pd and vfmadd213pd 而只有一个 C 内在函数 mm256 fmadd pd 为了简单起见 在 AT T 语法中 有什么区别
  • ELF动态符号表

    我有一个关于 ELF 动态符号表的问题 对于 FUNC 类型的符号 我注意到某些二进制文件中的值为 0 但在其他二进制文件中 它具有一些非零值 这两个二进制文件都是由 gcc 生成的 我想知道为什么会出现这种差异 有没有编译器选项来控制这个
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 在 x86 汇编中将 64 位常量移至内存

    我正在使用 Intel x64 程序集 NASM 编译器 尝试将 0x4000000000000000 常量移至内存 该常量在 ieee 754 标准双精度中应等于 2 0 我正在使用的代码是 define two 0x4000000000
  • 添加冗余赋值可以在未经优化的情况下编译时加快代码速度

    我发现一个有趣的现象 include
  • 在GCC中添加父目录的包含路径

    我想将父目录中的文件包含在我正在处理的项目中 所有的头文件都在父目录中 有没有办法在命令行上使用 I 来搜索父目录中的包含而不使用绝对路径 我知道我可以使用 makefile 解决这些问题 并且我可能最终会这样做 但我想知道是否有一个可以使
  • 无法链接 Boost 正则表达式

    我目前正在尝试编译一个KIT 的收缩层次实现 http algo2 iti kit edu english routeplanning php这需要 Boost Regex 提供的 Makefile 已经确保 并且我还手动仔细检查了这一点
  • C++11 Geany 设置

    我正在学习 C 我需要在 Geany 中为 C 11 正确设置编译和构建命令 我以为我的理解是正确的 但是当使用时auto 我收到以下错误 warning auto will change meaning in C 0x please re
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • Grub 和进入实模式(低级汇编语言编程)

    我一直在开发一个玩具操作系统 并一直使用 grub 作为我的引导加载程序 最近尝试使用 VGA 时 我发现无法使用硬件中断 我发现这是因为我被 grub 置于保护模式 有人知道如何在不删除 grub 的情况下回到实模式吗 如果您使用 GRU
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 如何在 GCC C++ 中编写多行内联汇编代码?

    这看起来不太友好 asm command 1 command 2 command 3 我真的必须在每一行加上双引号吗 另外 由于多行字符串文字在 GCC 中不起作用 我也无法欺骗它 我总是在互联网上找到一些例子 该人手动插入制表符和换行符而
  • 调用可以是 cdecl 或 stdcall 的函数

    我需要编写调用外部函数的代码 该函数可以是 32 位 Windows 应用程序中的 stdcall 调用或 cdecl 我的代码 调用者 无法提前知道其中的哪一个 现在 如果我尝试从定义为 stdcall 的调用站点调用 cdecl 函数
  • PAE(物理地址扩展)如何实现大于4GB的地址空间?

    维基百科文章的摘录物理地址扩展 http en wikipedia org wiki Physical Address Extension x86 处理器硬件架构通过用于选择附加内存的附加地址线进行了增强 因此物理地址大小从 32 位增加到
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 各种中断的区别:SCI、SMI、NMI、普通中断

    我正在学习英特尔架构 到目前为止我遇到过几种类型的中断 SCI 系统控制中断 硬件使用的系统中断 用于向操作系统通知 ACPI 事件 SCI 是一个有效 低电平 可共享的电平中断 SMI 系统管理中断 由遗留系统上的中断事件生成的操作系统透

随机推荐

  • Django 外键查询最佳实践

    模型 py class Category models Model name models CharField max length 50 class SubCatergory models Model parent category mo
  • Plotly:并排图之间的 shareX

    我想要两个并排的图共享相同的 X 轴和相同的工具栏 这意味着 通过放大第一个图 第二个图应自动调整大小到相同的缩放区域 一种方法是将图堆叠在另一个之上 使用shareX TRUE 但我需要他们并排 在 python 中似乎有一种方法可以做到
  • 便宜又令人愉快的 rand() 替换

    在对大型游戏程序进行分析后 我发现库函数 rand 消耗了总处理时间的相当一部分 我对随机数生成器的要求不是很繁重 它是否通过大量纯随机性统计测试并不重要 我只是想要一些便宜又令人愉快而且速度非常快的东西 有什么建议么 很少有常用的算法比L
  • 如何使用 useContext 更改 Context 的值?

    使用useContextReact 16 8 的 hook 效果很好 您可以创建组件 使用挂钩并利用上下文值 不会出现任何问题 我不确定如何将更改应用于上下文提供程序值 1 useContext 钩子严格来说是消费上下文值的一种手段吗 2
  • 从 Windows 服务通过调制解调器播放语音

    我正在开发一个 VB NET Windows 服务 该服务持续检查 BMS 数据库是否有新警报 并拨打电话远程警告操作员 我目前正在使用 NET TAPI 包装器和 SAPI 5 3 互操作程序集 我通过电话交谈的步骤是 初始化TAPI接口
  • 如何从主机到 mysql docker 容器执行 mysqldump 命令

    我想为在 docker 容器中运行的数据库创建 mysql 转储 但是 我不想进入容器并执行命令 而是从主机执行此操作 有没有办法做到 我尝试了一些东西 但可能我的命令是错误的 docker exec d mysql sh mysqldum
  • 如何修复 checkmarx 信任边界违规

    我保留用户输入请求中的值 查克马克思抱怨有违反信任边界 从元素请求获取用户输入 该元素的值在没有经过适当清理或验证的情况下流经代码 并最终存储在服务器端 Session 对象中 我还发现这个帖子 https stackoverflow co
  • Java 基本数据类型修饰符是什么?

    好吧 我已经用 Java 编程三年了 现在 我认为自己非常有经验 然而 在查看 Java SE 源代码时 我遇到了一些意想不到的事情 in class Double public static final double MIN NORMAL
  • MPI 中的幽灵细胞交换模式

    我正在使用 MPI 实现分布式图像 灰度 卷积 我现有的模式是在根进程中将图像读取为一维扁平数组 然后将它们分散到所有进程 行分解 然后执行MPI Gather在根进程中 然后再次将图像作为一维展平数组写出 显然 这不会给出预期的结果 因为
  • Arduino 无法被识别

    我不确定这是问问题的正确地方 但我在 stackoverflow 上看到过其他 Arduino 线程 所以我认为没问题 我的 arduino uno 兼容板未被识别 我在 Windows 8 和 Windows XP 上尝试过 当我打开设备
  • 以编程方式设置并保存与导入资源关联的图标

    我有一些自动生成的数据被导出到我的 Unity 项目中 为了帮助我 我想为这些资产分配一个自定义图标以清楚地识别它们 这当然可以通过编辑器本身实现 但理想情况下我希望在导入时自动发生 为此 我编写了一个 AssetPostProcessor
  • 有 WEBGL 手册吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有某种 WebGL 手册列出了所有功能等 我尝试谷歌但一无所获 这两个资源对我帮助很大 Mozill
  • jquery 选择器不适用于使用 Cassette 的脚本标记内的元素

    当尝试使用访问数据加载时 index data onload 我回来了 undefined 如果没有周围的脚本标签 一切都会正常工作 这是使用加载的Cassette http getcassette net 它将它包装在脚本标签内 我究竟做
  • 从 Keras model.evaluate 和 model.predict 获得不同的结果

    我已经使用 word2vec 训练了一个模型来预测主题类别 并使用 keras 训练了一个 lstm 模型 并且在训练过程中获得了大约 98 的准确率 我保存了模型 然后将其加载到另一个文件中以尝试测试集 我使用model evaluate
  • 通过 HTTP / mod_svn 访问 SVN 存储库的旧版本

    使用 Apache 的 mod svn 模块 您不仅可以通过 SVN 客户端访问存储库 还可以使用相同的 URL 直接通过 HTTP 访问存储库 在这种情况下 您只会得到一个显示 HEAD 修订版的普通目录列表 如果 SVN 存储库已在 S
  • Spotify Web API 将新的可控设备添加到 Spotify 设备列表

    我尝试设置一个能够通过 Spotify Web API 使用 Spotify 功能的新设备 有一个API调用https developer spotify com web api get a users available devices
  • JavaScript - 双击选择“前代码块”内的所有文本

    我的博客上有一些代码块 我希望当有人双击代码块时 需要选择该代码块的所有代码 请看下面的代码 这是我到目前为止所得到的 尽管它使用的是jQuery Now 是否可以使用本机 JavaScript 无需 jQuery 抱歉 如果我问了一个愚蠢
  • 使用 opencv 流式传输 m3u8 文件

    我正在尝试使用 python 中的 cv2 和以下代码从 GoPro 捕获实时流 VIDEO URL http 10 5 5 9 8080 live amba m3u8 cam cv2 VideoCapture VIDEO URL cv2
  • 从 csv 字符串中进行 SQL 搜索

    我正在做一个搜索页面 我必须使用单个文本框搜索多个字段 所以我将在存储过程中以 CSV 字符串形式获取搜索文本 我的表如下 ID Name age 5 bob 23 6 bod harry 34 7 charles 44 我需要一个像这样的
  • 声明“extern struct cpu *cpu asm("%gs:0");”是什么意思意思是?

    当我阅读 xv6 源代码时 我对下面声明的语法感到困惑 谁能给我解释一下吗 extern struct cpu cpu asm gs 0 我假设你明白什么extern struct cpu cpu方法 你的问题是 asm gs 0 部分意思