【问题标题】:stack trace in Assembly 8051 with push and pop instructions带有推送和弹出指令的程序集 8051 中的堆栈跟踪
【发布时间】:2017-08-20 09:55:37
【问题描述】:

我是 8051 汇编语言的新手。我的问题是:

我知道地址 40H、41H、42H、43H、44H 的值是 10H、0DH、10H、10H、F0H。

但我不知道如何手动获取这些值。我知道 push 首先将 SP 增加 1,然后将数据复制到 SP 指定的 RAM 中的地址。但是,我可以得到 40H 的值为 10H 但不知道之后如何进行。

非常感谢任何帮助!

【问题讨论】:

    标签: assembly stack-trace 8051


    【解决方案1】:

    当然,您也可以继续跟踪其他以下堆栈操作。接下来是call,它将返回地址放在堆栈上(100Dh,在小端序中将是0Dh 10h)然后你再次有一个push acc,它写入10h,然后是一个push b,它当然写0F0h

    【讨论】:

      【解决方案2】:

      您需要遵循程序中使用堆栈的所有后续指令(以及这些指令的执行顺序)。

      您的程序中使用指令的堆栈是: 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)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-19
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多