【问题标题】:MC8051 Microcontroller addressingMC8051 微控制器寻址
【发布时间】:2016-07-05 15:04:34
【问题描述】:

我有左边给出的代码,我被问到从 0H...15H 的地址中存储了什么。在 0AH 到来之前,我发现所有答案都很容易。我不知道“0D”或“08”或“FE”是从哪里来的。 这是代码:

    WERT equ 127
    org 0               
MOV SP,#0FH
CLR A
MOV PSW,#0FFH
ADDC    A,#WERT
ACALL   UP
SJMP    $
UP:
PUSH    ACC
PUSH    PSW
POP PSW
POP ACC
RET

END

从00h到15H存储的物理内存地址是什么?我回答了所有的问题,直到 0AH 我不知道怎么会有 80H。

【问题讨论】:

  • 链接在这里对我们没有任何好处,需要在问题中发布问题,以便所有信息都在本网站上,而不是在其他地方,可能会导致链接断开。
  • 我已将代码放入文本中。希望你现在能帮助我。对不起,我的英语不是最好的。
  • @WeatherVane 8051 堆栈增长。而且它是哈佛架构,所以代码和数据有不同的地址空间,所以没有重叠。
  • @Jester 谢谢,起初我以为这是一些技巧代码。在分心之后,我可以看到每个 pushpop 必须有两个字节,然后是 22RET

标签: assembly 8051


【解决方案1】:

您是如何计算出前几个字节的?我假设您已经查阅了指令集参考。那么你问的价值观遇到了什么问题?

ACALL的操作码是11UP的绝对地址是0D,这样就可以得到11 0D

同样,SJMP 的操作码是 80,它使用 -2 的相对偏移量跳回到自身,即十六进制的 FE。 (偏移量适用于已经增加的程序计数器。)

【讨论】:

  • 非常感谢您的回答。我面前有一张桌子,所有的字节都写在里面,我们可以在考试中拿它。我使用“MCU 8051 IDE 来查看我的结果是否正确。你给我的答案对我有帮助,但是我从哪里得到 UP 的绝对地址?我对此一无所知。对不起,我只是本节的初学者,所以请不要笑我“哈哈”。再次感谢。
  • 一开始你并不知道,所以发出一个占位符XX 并继续组装。一旦你到达UP你就会知道地址并可以回去填写。
  • 我的天啊,我感觉很笨,所以我开始第一次推送,并注意到地址0D,其中UP 绝对指向推送工作。无论如何,非常感谢我在这里坐了大约几个小时试图弄清楚。谢谢先生
猜你喜欢
  • 2020-09-12
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2023-03-26
  • 2012-02-09
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多