【发布时间】:2017-08-20 09:55:37
【问题描述】:
我知道地址 40H、41H、42H、43H、44H 的值是 10H、0DH、10H、10H、F0H。
但我不知道如何手动获取这些值。我知道 push 首先将 SP 增加 1,然后将数据复制到 SP 指定的 RAM 中的地址。但是,我可以得到 40H 的值为 10H 但不知道之后如何进行。
非常感谢任何帮助!
【问题讨论】:
标签: assembly stack-trace 8051
我知道地址 40H、41H、42H、43H、44H 的值是 10H、0DH、10H、10H、F0H。
但我不知道如何手动获取这些值。我知道 push 首先将 SP 增加 1,然后将数据复制到 SP 指定的 RAM 中的地址。但是,我可以得到 40H 的值为 10H 但不知道之后如何进行。
非常感谢任何帮助!
【问题讨论】:
标签: assembly stack-trace 8051
当然,您也可以继续跟踪其他以下堆栈操作。接下来是call,它将返回地址放在堆栈上(100Dh,在小端序中将是0Dh 10h)然后你再次有一个push acc,它写入10h,然后是一个push b,它当然写0F0h。
【讨论】:
您需要遵循程序中使用堆栈的所有后续指令(以及这些指令的执行顺序)。
您的程序中使用指令的堆栈是: 1. push acc --- 将 10H 放入堆栈(在位置 40h) 2. call --- 将返回地址放入堆栈(即地址 0x100D 以小端顺序放入堆栈。因此,位置 41h 为 0Dh,位置 42h 为 10h)
现在 jmp 指令没有被执行。相反,由于调用指令,控制权被转移到a_x_b_plus1。
所以, 3. push acc --- 再次将 10H 放入堆栈(在位置 43h) 4. push b --- 将 F0h 放入堆栈(位置 44h)。
【讨论】: