关于汇编语言命令解答及存储器问题
ORG 0
STARTl: MOV A,#0FH
LOOP: MOV P2, A
CPL A
CALL DELAY
JMP LOOP
DELAY:
MOV R7,#20
D1: MOV R6,#25
DJNZ R6,$
DJNZ R7,D1
RET
END
这是一个简单的4灯交互闪烁程序, 问题1. LOOP 是什么意思? 2.R7,R6是哪个存储器?为什么这样写?D1? 为什么不像C语言那样直接操作P2口呢?
关于存储器的问题,1.8051的ROM是4KB 地址0000H到0FFFH 通过转换计算的话只有2047位 没有4KB,而RAM 128B 地址000H到007FH 通过计算有 127位加上0位是128位。
请各位朋友们,高手们讨论解答。
补充问题,1.字节和位的关系?
你是不是一点汇编相关书籍都没看就直接看汇编程序了?
LOOP,DELAY,D1都是标号,仅此而已。
至于为什么不能直接给P口赋值,可能就是硬件决定的,要想给P口赋值必须用累加器A。
FFF就是4K,不知道你2047怎么算出来的。128B就是128 Byte,是字节,通常表示位用b,即bit。
8bit为一个Byte。
建议你先看看计算机组成原理,不用太深的书,一般的就可以了。
我正在看例说8051这本书,我知道LOOP DELAY D1是标号, 只是想知道LOOP 有没有特殊的含义。
FFFH转换到10进制是4095 是4K 谢谢!之前是我少算了一位。
R7,R6是哪个存储器?为什么这样写?
1kb=1024bit 1bit=8位 4KB是不是=1024*4*8呢?
为何RAM 和ROM的地址都是从0000H开始,这样不会出错吗?
标号用loop,是因为loop的英文有循环的意思,所以循环部分标号用它。
R7,R6是单片机里的通用寄存器,汇编规定就是这么写的,8051应该是从R1到R7,对于通用寄存器的操作方法要看芯片资料。
51的书里面一般都会讲。
4KB指的是4K字节,再乘以8的话,就是bit了。通常说RAM和ROM大小的单位都是字节,因为寻址的最小单位一般是字节。
RAM和ROM地址重复,但是汇编指令是不同的,ROM和A之间用MOVC,对RAM的操作用MOV和MOVX。
多谢解答。 我现在正在看8051的书,还没有看到你说的命令。应该后面会有。
关于R7 书上好几个寄存器都是从R0~R7的。这样直接操作,为什么不会出问题?
cpl 取反 有逻辑操作指令和位操作指令两种,前者的对象时字节,后者的对象时位 cpl p0就是取反p0口 八位都要取反(注意此时要用累加器A来过渡,你的例子里面体现了的额),如果要操作p1口的某一位,就直接 cpl p1.0 cpl p1.5之类的