预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共141页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1第4章51内核单片机汇编语言程序设计一、基本概念汇编程序功能关于机器汇编的说明时间属性:指一条指令执行完毕所需要的时间 空间属性:指一条指令存储于程序存储器中所占的字节数 功能属性:指一条指令所对应的一个特定的操作功能4.2寻址方式操作数以常数的形式直接出现在指令中,用“#”作前缀; 该常数与操作码一起存放在ROM中,可以立即得到并执行。 例如:MOVA,#52H例如:MOVDPTR,#5678H DPTR由两个特殊功能寄存器DPH和DPL组成 操作数存放在R0~R7、A或DPTR中; B寄存器在乘、除法指令中是寄存器寻址,在数据传送指令 中是直接寻址。 其他SFR的寻址方式不属于寄存器寻址。 例如:MOVA,R5 指令中直接给出操作数的地址,数据存放在该地址对应的存 储单元中。 直接寻址方式可以访问的范围:MOVP0,A (P0代表符号地址,是直接寻址方式) 可用作地址指针的工作寄存器是R0、R1,以及DPTR 例如:MOVA,@R1;A←((R1)) 使用该方式访问数据存储器时注意: 访问片内RAM只能用R0和R1作指针; 若片内扩展RAM或片外RAM仅有256B单元时,既可以用R0或R1作指针间接访问,也可用DPTR作指针间接访问;大于256B时只能以DPTR作指针间接访问。 操作数地址=变地址+基地址 基地址寄存器:DPTR或PC;变址寄存器:A 该寻址方式常用于访问程序存储器,查表。 例如:MOVCA,@A+DPTR 用于相对转移指令中 以当前PC值作为基地址,与指令中给定的相对偏移量rel相加, 以所得之和作为目的位置的地址 当前PC值=源地址+转移指令所占的字节数 (实际上是转移指令的下一条指令的地址) rel:以补码表示的有符号单字节数(-128~127),负数表示从当前地址向下转移,正数表示从当前地址向上转移。 PCPC操作数是二进制位 在指令中直接给出位地址,利用位处理器对某一位进行数据 传送、逻辑运算等操作 例如:MOVC,07H;C←(07H) 两种位寻址区: (1)内部RAM中的位寻址区:字节地址为20H~2FH; (2)SFR的可寻址位。 位地址的几种表示方法: 1)直接使用位地址;如:PSW的位6可表示为0D6H 2)字节地址带位号;或0D0H.6 3)SFR名带位号; 或PSW.6 4)位符号地址表示;或AC 数据传送指令共29条, 包括:普通传送指令、数据交换指令和堆栈操作指令回忆操作数描述符:direct,Rn,@Ri,#data,DPTR等。 1)以A为目的操作数的传送指令 MOVA,#data MOVA,direct MOVA,Rn MOVA,@Ri MOVdirect,Rn MOVdirect,@Ri 4)以@Ri为目的操作数的传送指令 MOV@Ri,#data;(Ri)←data MOV@Ri,direct;(Ri)←(direct) MOV@Ri,A ;(Ri)←(A) MOVDPTR,#data16;唯一的16位数据传送指令。 MOVRn,Rn MOV@Ri,@Ri MOVRn,@Ri MOV#data,A扩展数据存储器传送指令 对片内扩展RAM或片外扩展RAM及外部接口电路进行数 据传送的相关指令: MOVXA,@Ri MOVXA,@DPTR MOVX@Ri,A MOVX@DPTR,A 执行过程中会使/WR、/RD有效。 【例4-2】试编写一程序段,实现将片外RAM地址为01E0H开始的16个单元中的内容传送到片内扩展RAM地址为04FFH开始的单元中。 程序存储器传送指令MOVC(查表指令) MOVCA,@A+DPTR MOVCA,@A+PC MOVC含义是传送常数。 例如:(A)=30H,当前地址1000H 【例4-3】将ROM02FFH单元的内容送片内RAM的50H单元中。 参考程序如下: MOVA,#0 MOVDPTR,#02FFH MOVCA,@A+DPTR MOV50H,A 【例4-4】设data是一个BCD码常数,试用查表法获得其相应的ASCII码。将0-9的ASCII码组成一个表依次存放于程序存储器中以TAB为首地址的各单元中。 参考程序如下: MOVA,#data MOVDPTR,#TAB MOVCA,@A+DPTR …… TAB:DB30H,31H,32H DB33H,34H,35H,36H,37H,38H,39H 2、数据交换指令【例4-5】已知(R0)=30H,(A)=65H,(30H)=8FH,分析执行如下指令后A与30H单元中数据的变化。 【例4-6】将片内RAM30H和31H单元中的ASCII码转换成压缩式BCD码存入20H单元。其中30H单元中的数值为低位,31H单元中的数值为高位