汇编指令中的寄存器的名字代表的是该寄存器的直接地址/地址
汇编中的主程序对应于C语言中的主函数main();汇编中的子程序对应于C语言中的功能函数(可以是用户自己编写完成自己需要的功能函数)
8051指令格式:1byte,2byte,3byte
指令字节最长3byte ;最短1byte(操作码占用1byte),指令中含有8bit立即数,占用1byte,含有直接地址或相对转移地址占用1byte;指令中含有16bit立即数或目标地址(addr16)占用2byte
注意:寄存器不占用字节
一,8051内部RAM配置
8051内部存储器包括ROM(程序存储器)和RAM(数据存储器)
数据存储器RAM:共有256个单元(256各单元分为高128byte和低128byte)
高128byte(地址范围80H~FFH):用来存放特殊功能寄存器(只能采用直接寻址方式)。如PSW,SP,PC等
低128bgte(地址范围00H~7FH):是单片机中供用户使用数据存储器单元(通用寄存器)
*低128byte可以分为3个区域:
(1)寄存器区(00H~1FH):这32个单元是作为通用寄存器使用的,分为4组,每组8个寄存器,每个寄存器按R7~R0编号;cup使用时只能使用其中的1组,具体使用哪一组是由PSW中的RS0,RS1位的状态组合来选择的,通常使用0组
RS0 | RS1 | 哪一组 |
0 | 0 | 0组 |
0 | 1 | 1组 |
1 | 0 | 2组 |
1 | 1 | 3组 |
(2)位寻址区(20H~2FH):这16个单元既可以作为一般的RAM(存放程序中的位变量)使用也可以进行字节操作或对每一位进行操作,是8051位处理器的位数据存储区
(3)用户RAM区(30H~7FH):这80个单元可供用户使用一般RAM区且只能以存储器单元形式使用,堆栈开辟在此区
*高128byte存放的是专用寄存器(80H~FFH)详细了解可查资料这里就不一一表示出来了
计算机以cpu为中心,不属于cpu都是属于外部设备(除存储器)
cpu是通过设备接口电路IO跟设备打交道的,并不是直接与设备打交道
8051内核(cpu)是与内部RAM用总线连接在一起的,是把内部RAM用作cpu的寄存器;cpu与存储器是计算机最重要的资源(cpu比存储器重要)
二,8051内部ROM的配置
用来存放程序代码以及不能改变的常量
8051的中断向量表用来存放各中断源的中断服务程序:0000H~0003H(3byte存放第一条指令)0000H会跳转到0040H处去执行;0003H(外部中断0);000BH(定时计数器0);0013B(外部中断1);001BH(定时计数器1);0023(串行口);002BH(定时计数器2);地址之间相距8byte
注意:实际应用中,主程序入口地址不能低于该地址值,一般可将程序都地址设置为0040H
cpu执行一段指令有3个阶段:1,取指 2,指令译码 3,执行指令
PSW用来保存cpu执行指令时的状态信息,其中有的位用来设置处理器,8051中PSW是16bit的
ARM中的PSW是32bit的功能更加强大
8051内部RAM地址范围00H~1FH的32个单元是cpu的通用寄存器R7~R0,编程中不能用做其他用途
SP:栈指针寄存器,用于cpu子程序时保存恢复断点地址及现场数据(cpu的栈内存是用来保护现场和恢复现场用的);栈是在RAM空间中开辟的一个数据缓冲区,8051的栈单元是8bit(1byte的),它只能通过栈指针寄存器sp来操作,且只能从开口端向缓冲区写入数据或读取数据(按后进先出顺序)
8051的栈有4种类型:
满栈递增(FA):是把sp所指向的内容加1;向上增长型
满栈递减(FD):是把sp所指向的内容减1;向下增长型
空栈递增(EA)
空栈递减(ED)
空栈是指sp所指向的内容是空的,即无效数据
满栈是指sp所指向的内容是满的,即有效数据
数据入栈指令PUSH;数据出栈指令POP
注意:栈的开辟不允许占用cpu的通用寄存器,要开辟在30H~7FH的用户RAM区,且用户要预留足够的栈空间
主程序初始化阶段,栈内存还未使用,则它的栈底单元是永远不会使用的(因为8051是满栈结构)