8051:JMP 指令以意外的方式工作
8051: JMP instruction works in an unexpected way
我正在 Keil uVision 中使用 89C51。
我不知何故养成了使用
的习惯
JMP label ; goto label
根据datasheet,JMP
应该写成JMP @A+DPTR
,我用的是SJMP
、LJMP
和AJMP
应该被使用。
尽管如此,我使用它的方式效果很好。
问题是,为什么?这是 uVision 对语言的补充吗?
这是一种插入适当跳转指令的优化,因此您不必确定需要哪一个。
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.
如果你想要特定类型的跳跃,你总是可以使用相应的助记符。
我正在 Keil uVision 中使用 89C51。
我不知何故养成了使用
的习惯JMP label ; goto label
根据datasheet,JMP
应该写成JMP @A+DPTR
,我用的是SJMP
、LJMP
和AJMP
应该被使用。
尽管如此,我使用它的方式效果很好。
问题是,为什么?这是 uVision 对语言的补充吗?
这是一种插入适当跳转指令的优化,因此您不必确定需要哪一个。
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.
如果你想要特定类型的跳跃,你总是可以使用相应的助记符。