gcc如何使用ah、bh、ch、dh?

gcc如何使用ah、bh、ch、dh?,gcc,assembly,compilation,x86,Gcc,Assembly,Compilation,X86,我正在写一个项目,需要阅读和处理gcc输出的汇编指令。关于一些汇编规则,我有几个问题: 1) gcc使用ah、bh、ch、dh的情况是什么 2) 如果我关闭优化,它还会使用它们吗 3) 如果我关闭优化,gcc是否有一些将源代码转换为程序集的“规则”?我的意思是,我能知道gcc如何使用ah的所有可能场景吗?编译器可以在认为需要8位存储的任何时候使用它们。听起来像个XY问题。你想做什么?我想做一些与污染分析相关的事情。相关:(但这个问题的前提是错误的;它有时确实使用部分寄存器,例如foo=(bar>

我正在写一个项目,需要阅读和处理gcc输出的汇编指令。关于一些汇编规则,我有几个问题:

1) gcc使用ah、bh、ch、dh的情况是什么

2) 如果我关闭优化,它还会使用它们吗


3) 如果我关闭优化,gcc是否有一些将源代码转换为程序集的“规则”?我的意思是,我能知道gcc如何使用ah的所有可能场景吗?

编译器可以在认为需要8位存储的任何时候使用它们。听起来像个XY问题。你想做什么?我想做一些与污染分析相关的事情。相关:(但这个问题的前提是错误的;它有时确实使用部分寄存器,例如
foo=(bar>>8)&0xFF;
可以编译成
movzx ebx,ah
如果编译器确实需要EAX中的完整
条来做其他事情。一般来说,gcc避免使用高8寄存器;我不认为我见过它将它们用作额外的8位暂存寄存器(以及al..dl)。因此,它主要用于读取较大整数的第二个字节,但也可能用于其他用途。在
-O0
,它可能仍在一个表达式中使用AH。即使在
-O0
,通常也没有简单的规则。GCC也将AH与SAHF指令和FPU比较指令结合使用离子。