显示不同体系结构的操作码的差异

时间:2013-01-07 07:53:07

标签: gcc x86 x86-64 gas

我有一个脚本(按预期)允许我看到为不同架构生成的操作码的差异(特别是对 x86 vs x86_64 的x87指令感兴趣)。

#!/usr/bin/env bash

cat - <<__EOF> a.cpp
int main()
{
    double const x(1.0);
    asm volatile ("fldl (%0)" : : "a" (&x));
    return 0;
}
__EOF
EXEC_STR='g++ a.cpp -c -O0 -o /dev/null -m${BITNESS} -mfpmath=387 -Wa,-adhlns="${BITNESS}.lst"'
FILTER_STR='awk "/\/APP/, /\/NO_APP/" ${BITNESS}.lst | cut -f 2- > ${BITNESS}_.lst'
BITNESS=32 bash -c "${EXEC_STR} && ${FILTER_STR}"
BITNESS=64 bash -c "${EXEC_STR} && ${FILTER_STR}"
diff -w -B 32_.lst 64_.lst

输出:

3c3
<   fldl (%eax)
---
>   fldl (%rax)

cut -f 2-除了切掉第一列外,还用操作码删除了这个列(这是不可取的)。

还有其他方法可以获得理想的结果吗?以及如何过滤掉文本?

0 个答案:

没有答案