微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于汇编语言命令解答及存储器问题

关于汇编语言命令解答及存储器问题

时间:10-02 整理:3721RD 点击:
先讨论汇编语言,我知道大家现在可能都在用C语言了,我之前也学过C语言。当我学习汇编语言的时候发现汇编更直接简洁,所以我认为同进掌握汇编和C这样才能更好的运用单片机。
                  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之类的

                                                              

                                       

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top