assembly - 8051微处理器中的累加器寄存器
问题描述
我们的任务是在下一个代码中识别问题:
ORG 0000H
MAIN:
CLR A
MOV A, FFFFH
MOV B, FFH
AGAIN: DEC A
DJNZ B, AGAIN
END
OnMOV A, FFFFH
并且MOV B, FFH
EdSim51 有一个
FFFFH和FFH上的未知标签。
我对这种类型的代码没有任何经验。我认为这是每个寄存器所拥有的位数,但我不确定。谁能给我解释一下。
解决方案
该指令MOV
可以与不同的操作数一起使用。在您的情况下,汇编程序会查找“立即值”。这可以作为标签或文字数字给出。
对于我们人类来说,两者FFFFH
和FFH
看起来都是文字数字,因为我们识别十六进制数字和末尾的“H”。
但是该软件使用了一种最简单的方法:如果第一个字符是十进制数字,则操作数是文字数字。如果它是一个字母,它就是一个标签。
这就是为什么 EdSim51(或其汇编程序,分别)将它们作为标签。由于没有定义任何标签,它会报告您得到的错误。
但是,如果您在两者前面都放一个零“0”,导致0FFFFH
and 0FFH
,第一条指令可能会给您另一个错误:该值对于指令来说太大了,该指令需要 8 位宽度。
推荐阅读
- android - 为什么在 onResume 中调用 startLocationUpdates,在 onPause 中调用 stopLocationUpdates?
- google-chrome - 扩展上下文无效。Chrome 扩展程序
- javascript - AWS API Gateway CORS-header 'Access-Control-Allow-Origin' 缺失
- svg - 如何优化 SVG 路径?
- python - 我的项目在 conda 环境中使用什么包
- java - 从 Java 运行时调用 Python 脚本 OSError
- django - Django 类视图 - MultipleObjectsReturned 错误
- sql - 完成状态出现 2 次及以上时的返回值
- longtable - Longtable、 papaja 和单行距
- java - 具有构建模式的链式继承