同一段汇编,两种初值
把循环的次数改成 6,看看结果和步数各变成多少。两组结果都打出来。
开始练习 →
栈为什么适合放函数的局部变量
函数的局部变量放在栈上,是因为【0】。
开始练习 →
call 比 jmp 多做了什么
call 和 jmp 都会跳走,但 call 还会【0】。
开始练习 →
栈帧是什么
一个「栈帧」指的是【0】。
开始练习 →
push 和 pop 换了什么
运行下面这段程序,填写它打印出来的结果。 def run(src, regs=None, guard=200): R = {"eax": 0, "ebx": 0, "ecx"
开始练习 →
自己写:push 和 pop
补全 push(把寄存器的值压上栈)和 pop(弹回寄存器)。
开始练习 →
自己写:call 和 ret
补全 call(把返回地址压栈再跳走)和 ret(弹出返回地址跳回去)。
开始练习 →
两层嵌套调用,栈上有几个帧
A 调用 B,B 又调用 C。在 C 的最深处,栈上有几个返回地址?返回之后又剩几个?
开始练习 →
⚠️ 忘了配对会怎样
压了两次却只弹一次。⚠️ 程序不会报错,把「栈上还剩几个」和「弹出来的是不是最先压进去的那个」都打出来。
开始练习 →
调用约定是给谁定的
「调用约定」规定了参数放哪儿、返回值放哪儿、谁负责保存寄存器。它是【0】。
开始练习 →