assembly - 如果两个端口位相等、大于或小于彼此,如何比较它们?

标签 assembly 8051

我正在研究 8051 汇编器,我想知道一个命令可以帮助我比较两个端口位并确定它们是否相等,所以我搜索了它并发现 CJNE 可能有用并尝试过将其放入如下程序中...我不确定我是否走在正确的道路上,也许 Xnor 命令更好,但我找不到它的命令,并且由于某种原因我无法测试它。

 ORG 00H
 MOV R0 ,#01H
 MOV R1, #00H
 CJNE  R0,#00H,LOOP
 LOOP: MOV C, P1.0
 ANL C,P3.0
 MOV P2.0,C 
 SJMP LOOP
 END     

如果我想知道一个端口位是否大于或小于其他端口位,我可以使用 ANL 命令吗?

最佳答案

不是 8051 的专家,但比较后,如果相等(分支 EQ 或 NE)则设置零标志,如果大于则设置进位标志(CS 或 CC 用于设置或清除)。在CJNE(比较,不相等则跳转)之后,您可以使用JC [进位集的目标 - 即>]检查进位标志。无需进行第二次比较 - 标志仍将从第一次比较开始设置。

CJNE  R0,#00H,NOTEQUAL
; equal code goes here, then branch out
NOTEQUAL:
JC GREATER
; less than code goes here, then branch out
GREATER:
; greater code goes here

JNC 是未设置进位标志的指令 - 即它小于或等于,但您已经消除了等于,因此它将小于。

关于assembly - 如果两个端口位相等、大于或小于彼此,如何比较它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36906950/

相关文章:

assembly - 不同类型处理器的汇编语言有何不同?

caching - 处理器如何获取缓存行?

c - 采取线性输入,转换为几何序列并舍入?

c - 8位处理器必须面对字节顺序问题吗?

microcontroller - 通过 8051 微 Controller 上的中断进行 UART 传输

c - 有谁知道为什么 gcc 4.8.4 在无限循环中优化这段代码?

c++ - 将 C++ 代码转换为 SPIM 程序集

assembly - 确定数字的符号

c - 使用 Keil uVision 的 8051 C 中断处理

c - 在 C 中为 8 位 MCU 做除法的最快方法是什么?