把一段汇编翻回 C
看懂这段汇编在算什么,用一行 Python 表达同一件事,并验证结果一致。
阅读更多 →
自己写:数指令种类
统计一段汇编里每种指令各有多少条,按条数从多到少输出前三种。
阅读更多 →
C 的哪一行变成了哪几条
运行下面这段程序,填写它打印出来的结果。 C_LINES = 3 ASM_LINES = 11 print(str(ASM_LINES) + "/" + str(round(ASM
阅读更多 →
数一数 mov 有多少条
下面这段是 clang -S -O0 -masm=intel 在 x86-64 上对那三行 C 的真实输出(只删掉了 .cfi_* 伪指令)。运行这段程序,填写它打印出来的结果。 ASM = &quo
阅读更多 →
为什么没优化时这么啰嗦
这段汇编把 a 和 b 先存进内存,马上又读回来。这是因为【0】。
阅读更多 →
中括号是什么意思
mov eax, dword ptr [rbp - 4] 里的方括号表示【0】。
阅读更多 →
push rbp 那两条在干什么
几乎每个函数开头都有 push rbp 和 mov rbp, rsp。它们是在【0】。
阅读更多 →
为什么要看编译器的输出
学会看编译器生成的汇编,最实在的用处是【0】。
阅读更多 →
把一小段汇编跑起来
把三条指令交给解释器,打出三个寄存器最后的值。
阅读更多 →
自己写:让解释器认识 add 和 sub
补全 add 和 sub:都是「左边那个又读又写」。
阅读更多 →