【问题标题】:JL equivalent in 8051 assembly8051 组件中的 JL 等效项
【发布时间】:2015-09-15 21:42:02
【问题描述】:

我正在寻找 8051 组件中的等效 JL(如果更少则跳转)。我想出的最接近的解决方案是

CJNE A,#42,DUMMY
DUMMY: JC IS_LESS ; jump to IS_LESS if A<42

还有更优雅的方式吗?我的意思是没有那个 DUMMY 标签。我想执行类似 CMP 指令的操作。我可以简单地 SUB,但我只想对值进行非破坏性测试。

【问题讨论】:

  • 如果您在汇编程序中为当前地址使用适当的符号,则可以去掉标签,即。 cjne a,#42,$+3 之类的东西,您可以将其粘贴到名为 cmp 的宏中。
  • 那太好了,但是 EdSim51 模拟器会抱怨语法错误(未知标签 $+3)。它在其他编译器中是否有效?
  • 其他汇编器使用. 而不是$ 也许可以试试看或查阅手册:)
  • as31 使用*,所以cjne a, #42, *+3 在那里工作。 edsim 似乎也不支持宏,否则你也可以从宏中发出指令字节。

标签: assembly 8051


【解决方案1】:

正确阅读the manual后,本例中CJNE的语法为CJNE A,#data,rel,其中rel引用为

有符号(二进制补码)8 位偏移字节。由 SJMP 和所有条件跳转使用。范围是 -128 到 +127 相对于以下指令的第一个字节的字节

因此,“JL”指令可以编码为

CJNE A, #42, 0 ; 0 = do not jump
JC IS_LESS     ; jump to IS_LESS if A<42

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多