PA - 一些坑

6A: push Ib

问题首先发现是在这里 tests/add.c

main 中循环判断 add 的结果是否正确。

关键汇编代码如下

ebx 记录循环次数,每次减一,减到0结束循环,问题的关键出在这里边。通过手动修改,我发现循环次数大于4就会出问题,报很奇怪的错误。

通过手动查看代码发现问题

em… 6a 01 在opcode table解释为 push Ib,这给人一种误解,是push一个字节,然后我上网搜索不能push一个字节,需要对单字节扩展。

所以处理 push Ib 的时候对单字节操作数进行符号扩展就好了。