8051:JMP 指令以意外的方式工作

8051: JMP instruction works in an unexpected way

我正在 Keil uVision 中使用 89C51。

我不知何故养成了使用

的习惯
JMP label   ; goto label

根据datasheet,JMP应该写成JMP @A+DPTR,我用的是SJMPLJMPAJMP 应该被使用。

尽管如此,我使用它的方式效果很好

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

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

来自Ax51 User's Guide

Generic jumps and calls are two instruction mnemonics that do not represent a specific opcode. JMP may assemble to SJMP, AJMP, LJMP or EJMP. CALL may assemble to ACALL, LCALL or ECALL. These generic mnemonics always evaluate to an instruction, not necessarily the shortest, that will reach the specified program address operand.

如果你想要特定类型的跳跃,你总是可以使用相应的助记符。