【问题标题】:8051: JMP instruction works in an unexpected way8051:JMP 指令以意想不到的方式工作
【发布时间】:2015-05-31 04:47:36
【问题描述】:

我在 Keil uVision 中使用 89C51。

我已经养成了使用的习惯

JMP label   ; goto label

根据数据表,JMP 应该写成JMP @A+DPTR,而我现在使用的应该是SJMPLJMPAJMP

不过,我使用它的方式效果很好

问题是,为什么?这是 uVision 对语言的补充吗?

【问题讨论】:

  • 检查生成的机器码。我想这只是您的汇编程序的一个功能,因此它会生成最合适的指令,但在手册中找不到任何关于它的内容。
  • 如果您使用跳转表,我认为这只是使用JMP 指令的更好方法。
  • 好的,我检查了 hex 文件,它被编译为 SJMP(可能还有其他类型,这是我找到的)。

标签: assembly embedded microcontroller 8051


【解决方案1】:

这是一种插入适当跳转指令的优化,因此您不必确定需要哪个跳转指令。

来自Ax51 User's Guide

通用跳转和调用是两个指令助记符,它们不 表示特定的操作码。 JMP 可以组装成 SJMP、AJMP、LJMP 或 EJMP。 CALL 可以汇编为 ACALL、LCALL 或 ECALL。这些通用 助记符总是计算为一条指令,不一定是 最短,将到达指定的程序地址操作数。

如果您想要特定类型的跳跃,您可以随时使用相应的助记符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2013-12-27
    • 2015-08-05
    • 2016-12-13
    相关资源
    最近更新 更多