为什么老要先 mov 一下
汇编里到处是「先 mov 进寄存器,算完再 mov 出去」。这是因为【0】。
开始练习 →
两条 mov 加一条 add
运行下面这段程序,填写它打印出来的结果。 def run(src, regs=None, guard=200): R = {"eax": 0, "ebx": 0, "ecx"
开始练习 →
自己写:让解释器认识 mov
补全解释器里 mov 那一支:右边是寄存器就取它的值,是数字就当立即数。
开始练习 →
自己写:让解释器认识 add 和 sub
补全 add 和 sub:都是「左边那个又读又写」。
开始练习 →
把一小段汇编跑起来
把三条指令交给解释器,打出三个寄存器最后的值。
开始练习 →
为什么要看编译器的输出
学会看编译器生成的汇编,最实在的用处是【0】。
开始练习 →
push rbp 那两条在干什么
几乎每个函数开头都有 push rbp 和 mov rbp, rsp。它们是在【0】。
开始练习 →
中括号是什么意思
mov eax, dword ptr [rbp - 4] 里的方括号表示【0】。
开始练习 →
为什么没优化时这么啰嗦
这段汇编把 a 和 b 先存进内存,马上又读回来。这是因为【0】。
开始练习 →
数一数 mov 有多少条
下面这段是 clang -S -O0 -masm=intel 在 x86-64 上对那三行 C 的真实输出(只删掉了 .cfi_* 伪指令)。运行这段程序,填写它打印出来的结果。 ASM = """ pu
开始练习 →