内核单片机汇编语言程序设计.pptx
《内核单片机汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《内核单片机汇编语言程序设计.pptx(141页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1内核单片机汇编语言程序设计内核单片机汇编语言程序设计2第第4章章 51内核单片机汇编语内核单片机汇编语言程序设计言程序设计4.14.1、汇编指令格式、汇编指令格式4.24.2、寻址方式、寻址方式4.34.3、指令系统、指令系统4.44.4、汇编程序常用伪指令、汇编程序常用伪指令4.54.5、汇编语言程序设计、汇编语言程序设计第1页/共141页3一、基本概念一、基本概念指令使单片机完成基本操作的命令。程序完成某项特定任务的指令的集合。高级语言:汇编语言:机器语言:程序设计语言:用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。独立于机器,面向过程,接近自然语言和数
2、学表达式。第四章51内核单片机汇编语言程序设计第2页/共141页4 汇编程序功能 源程序 (汇编指令程序)汇编 目标程序(机器语言程序)汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。(翻译)手工汇编 机器汇编(常用)汇编的两种方式第3页/共141页5 关于机器汇编的说明两次扫描过程。第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。第二次扫描:在第一次扫描基础上,将符号地址转换成地址(代真);利用操作码表将助记符转换成相应的目标码。第4页/共141页6源程序目标程序地址 ORG 1000HSTART:
3、MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP$END第一次汇编第二次汇编1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE第5页/共141页7n n时间属性:指一条指令执
4、行完毕所需要的时间时间属性:指一条指令执行完毕所需要的时间n n空间属性:指一条指令存储于程序存储器中所占的字节数空间属性:指一条指令存储于程序存储器中所占的字节数n n功能属性:指一条指令所对应的一个特定的操作功能功能属性:指一条指令所对应的一个特定的操作功能 指令的三种属性 STC系列单片机采用了80C51内核,其指令集与MCS51系列单片机完全相同,本章介绍的指令系统可适用于所有51内核的单片机。第6页/共141页8指令的构成指令=操作码+操作数操作码表示该指令所能执行的操作功能。操作数表示参加操作的数的本身或操作数所在的地址。汇编语言指令基本格式标号:操作码助记符目的操作数,源操作数;
5、注释4.1汇编指令格式第7页/共141页9描述符号:Rn工作寄存器R0R7Ri间接寻址寄存器R0、R1Direct直接地址,包括内部128BRAM单元地址、所有SFR地址。#data8位立即数#data1616位立即数addr1616位目的地址addr1111位目的地址rel用补码表示的8位相对偏移量bit可直接位寻址的位第8页/共141页10/bit指定位求反,再参与逻辑操作,但取反后不影响该位的原值(x)x中的内容(x)x中的地址中的内容表示操作流程,将箭尾一方内容送入箭头所指一方的单元中去当前指令地址第9页/共141页114.2 4.2 寻址方式寻址方式寻址方式寻址方式n n寻址方式寻址
6、方式寻找操作数或寻找操作数所在存储寻找操作数或寻找操作数所在存储 单元地址的方式单元地址的方式n n共七种寻址方式:共七种寻址方式:寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址必须掌握第10页/共141页12操作数以常数的形式直接出现在指令中,用“#”作前缀;该常数与操作码一起存放在ROM中,可以立即得到并执行。例如:MOVA,#52H74HA 立即数操作码程序存储器PC+1PC52H立即(数)寻址52H第11页/共141页13例如:MOVDPTR,#5678HDPTR由两个特殊功能寄存器DPH和DPL组成90H56H78H56H78HPCPC+1PC+2操作码低位立即数高
7、位立即数程序存储器SFRDPLDPH 注意:1.只有源操作数能使用立即寻址方式。2.立即数长度必须小于或等于目的操作数的长度。第12页/共141页14操作数存放在R0R7、A或DPTR中;B寄存器在乘、除法指令中是寄存器寻址,在数据传送指令中是直接寻址。其他SFR的寻址方式不属于寄存器寻址。例如:MOVA,R5寄存器寻址101PC操作码程序存储器内部RAMR5AXXXXR6R711101第13页/共141页15指令中直接给出操作数的地址,数据存放在该地址对应的存储单元中。直接寻址方式可以访问的范围:直接寻址片内RAM低128B 单元(00H7FH)SFR(既可用单元地址形式给出,也可用寄存器符
8、号的形式给出)注意:直接寻址方式是访问特殊功能寄存器的唯一方法。第14页/共141页16MOVP0,A(P0代表符号地址,是直接寻址方式)例如:MOVA,63H直接寻址74H63HPCPC+1操作码直接地址程序存储器内部RAM63HAXXMOV80H,AXX第15页/共141页17可用作地址指针的工作寄存器是R0、R1,以及DPTR例如:MOVA,R1;A(R1)PC操作码程序存储器内部RAMA1110011寄存器间接寻址指令中寄存器的内容作为操作数存放的地址间接寻址寄存器前用“”表示前缀1R130H30H58H58H第16页/共141页18使用该方式访问数据存储器时注意:访问片内RAM只能用
9、R0和R1作指针;若片内扩展RAM或片外RAM仅有256B 单元时,既可以用R0或R1作指针间接访问,也可用DPTR作指针间接访问;大于256B 时只能以DPTR作指针间接访问。第17页/共141页19操作数地址=变地址+基地址基地址寄存器:DPTR或PC;变址寄存器:A该寻址方式常用于访问程序存储器,查表。例如:MOVCA,A+DPTRPC操作码程序存储器SFR32HALUA5H变址寻址10010011DPHDPL32A5H32A5HA23H+23H=32C8H32C8H2FH2FH设DPTR=32A5H,A=23H第18页/共141页20 用于相对转移指令中以当前PC值作为基地址,与指令中
10、给定的相对偏移量rel相加,以所得之和作为目的位置的地址当前PC值源地址转移指令所占的字节数(实际上是转移指令的下一条指令的地址)rel:以补码表示的有符号单字节数(-128127),负数表示从当前地址向下转移,正数表示从当前地址向上转移。相对寻址第19页/共141页21PC操作码程序存储器PCALU2050HPC+12051HPC+2偏移量rel=08H例如:JZ08H;rel为正数,从当前地址向上转移当A=0时,PCPC+2+rel/转移当A0时,PCPC+2/程序顺序执行2052H205AH2052H08H+08H=205AHPC205AHXX2052H60H第20页/共141页22PC
11、操作码程序存储器PCALU2050HPC+12051HPC+2偏移量rel=F4H例如:JZF4H;rel为负数,从当前地址向下转移当A=0时,PCPC+2+rel/转移当A0时,PCPC+2/程序顺序执行2052H2046H2052HF4H+FFF4H=2046HPC2046HXX2052H60H第21页/共141页23操作数是二进制位在指令中直接给出位地址,利用位处理器对某一位进行数据传送、逻辑运算等操作例如:MOVC,07H;C(07H)PC操作码程序存储器C20H00PC+1PSWSFRX位寻址07H07XA2H第22页/共141页24 两种位寻址区:(1)内部RAM中的位寻址区:字节
12、地址为20H2FH;(2)SFR的可寻址位。位地址的几种表示方法:1)直接使用位地址;如:PSW的位6可表示为0D6H 2)字节地址带位号;或0D0H.6 3)SFR名带位号;或PSW.6 4)位符号地址表示;或AC 第23页/共141页25数据传送指令共29条,包括:普通传送指令、数据交换指令和堆栈操作指令程序存储器ROM特殊功能寄存器SFR片内RAM128字节扩展数据存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHD4.3指令系统数据传送指令注意:该类指令只有以A为目的操作数的指令影响PSW中的P标志位,其它数据传送指令对各标志位无影响。第24页/共141页26回忆操作数描述符
13、:direct,Rn,Ri,#data,DPTR等。1)以A为目的操作数的传送指令MOVA,#dataMOVA,directMOVA,RnMOVA,RiMOVRn,#dataMOVRn,directMOVRn,A1、普通传送指令片内RAM传送指令MOV;A(Rn);Adata;A(direct);A(Ri)2)以Rn为目的操作数的传送指令;RnA;Rndata;Rn(direct)第25页/共141页27MOVdirect,RnMOVdirect,Ri4)以Ri为目的操作数的传送指令MOVRi,#data;(Ri)dataMOVRi,direct;(Ri)(direct)MOVRi,A;(Ri
14、)()MOVDPTR,#data16;唯一的16位数据传送指令。(direct)(A)MOVdirect,A;3)以direct为目的操作数的传送指令MOVdirect,#data(direct)dataMOVdirect,direct(direct)(direct)(direct)(Rn)(direct)(Ri)5)以DPTR为目的操作数的传送指令第26页/共141页28MOVRn,RnMOVRi,RiMOVRn,RiMOV#data,A注意:1)在数据传送指令中目的操作数和源操作数中不能 同时出现工作寄存器。2)SFR只能用直接寻址方式访问。3)片内RAM高128B(80H-FFH)只能用
15、寄存器间 接寻址方式访问。【例4-1】写出将R0的内容送到R5中的程序段。MOVA,R0MOVR5,A第27页/共141页29扩展数据存储器传送指令对片内扩展RAM或片外扩展RAM及外部接口电路进行数据传送的相关指令:MOVXA,RiMOVXA,DPTRMOVXRi,AMOVXDPTR,A执行过程中会使/WR、/RD有效。;A(Ri);A(DPTR);(Ri)A;(DPTR)A(读)(读)(写)(写)注意:1)通过DPTR间接寻址,可以对整个64KB片外RAM访问。2)通过Ri间接寻址,只能对扩展RAM的低256字节访问,如果地址范围大于256B 时,应谨防地址冲突。第28页/共141页30【
16、例4-2】试编写一程序段,实现将片外RAM地址为01E0H开始的16个单元中的内容传送到片内扩展RAM地址为04FFH开始的单元中。参考程序为:MOVR2,#10HMOVP2,#01HMOVR0,#0E0HMOVDPTR,#04FFHLOOP:ORLAUXR,#00000010BMOVXA,R0ANLAUXR,#11111101BMOVXDPTR,AINCR0INCDPTRDJNZR2,LOOPD7D6D5D4D3D2D1D0T0 x12T1x12 UART_M0 x6BRTR S2SMODBRTx12EXTRAM S1BRSEXTRAM=1时,访问片外扩展RAM第29页/共141页31程序存
17、储器传送指令MOVC(查表指令)MOVCA,A+DPTRMOVCA,A+PCMOVC含义是传送常数。(A)+(DPTR)或PC当前值=一个16位的地址,将该ROM地址中的内容传送给A。以DPTR为基地址的指令,可在ROM的64KB范围内查 表;(常用)以PC为基地址的指令只能在(PC)+1为基点的256B范 围内查表;(不推荐)使用第一条指令前,需事先将表首地址存入DPTR中,相对于表首偏移量存入A寄存器中。第30页/共141页32例如:(A)=30H,当前地址1000HMOVCA,A+PC;A(?H)例如:ORG8000HMOVA,#30HMOVCA,A+PC;A(?H)ORG8030HDB
18、41H,42H,43H,44H,45H例如:(DPTR)=8100H,(A)=40HMOVCA,A+DPTR;A(?H)80331031阅读以下三个程序段,并回答?的内容。8140第31页/共141页33【例4-3】将ROM02FFH单元的内容送片内RAM的50H单元中。参考程序如下:MOVA,#0MOVDPTR,#02FFHMOVCA,A+DPTRMOV50H,A第32页/共141页34【例4-4】设data是一个BCD码常数,试用查表法获得其相应的ASCII码。将09的ASCII码组成一个表依次存放于程序存储器中以TAB为首地址的各单元中。参考程序如下:MOVA,#data MOVDPTR
19、,#TABMOVCA,A+DPTRTAB:DB30H,31H,32HDB33H,34H,35H,36H,37H,38H,39H第33页/共141页352、数据交换指令普通传送指令数据传送是单向的,传送后只有目的操作数变化。数据交换指令是双向传送,交换后两个操作数都变。整字节交换指令XCHA,Rn(A)(Rn)XCHA,direct(A)(direct)XCHA,Ri(A)(Ri)半字节交换指令XCHDA,Ri(A3-0)(Ri)3-0)A寄存器高低半字节交换指令SWAPA(A3-0)(A7-4)第34页/共141页36【例4-5】已知(R0)30H,(A)65H,(30H)8FH,分析执行如下
20、指令后A与30H单元中数据的变化。XCHA,R0XCHDA,R0SWAPA;交换后,(A)=8FH,(30H)=65H;交换后,(A)=85H,(30H)=6FH;交换后(A)=58H第35页/共141页37【例4-6】将片内RAM30H和31H单元中的ASCII码转换成压缩式BCD码存入20H单元。其中30H单元中的数值为低位,31H单元中的数值为高位。分析:09的ASCII码的低4位即是所对应的BCD码。参考程序如下:MOVR0,#30HMOVR1,#31HXCHDA,R1SWAPAXCHDA,R0XCHA,20H第36页/共141页38(2)(SP)(direct)3、堆栈操作指令PUS
21、HdirectPOPdirectPUSHdirect指令执行中,机器自动进行两步操作:(1)SP(SP)+1POPdirect指令执行中,机器也自动进行两步操作:(1)direct(SP)(2)SP(SP)1不影响任何标志位堆栈:按后进先出原则读写的特殊RAM区。在用户初始化程序中要先给堆栈指针赋初值,确定栈底位置。使用指令:MOVSP,#DATA第37页/共141页394FH50H51H52HSP80HPSW=80H例:“PUSHPSW”指令的执行过程执行前:SP=4FH执行后:SP=50H第38页/共141页404FH50H51H52HSPSP80HPSW=H例:“POPPSW”指令的执行
22、过程80H执行前:SP=50H执行后:SP=4FH第39页/共141页41【例4-7】在程序存储器中从标号为TAB1的单元开始依次存放09的平方值,R7中存有09中的某个数,用查表指令取出R7中数据所对应的平方值并存入R7中,要求执行后DPTR中的内容不改变。参考程序如下:PUSHDPHPUSHDPLMOVA,R7MOVDPTR,#TAB1MOVCA,A+DPTRMOVR7,APOPDPLPOPDPHTAB1:DB00H,01H,04H,09H,第40页/共141页42包括:加、减、乘、除;增量、减量;十进制的BCD码调整。1、加法指令不带进位位加法指令ADDA,#data;A(A)+data
23、ADDA,direct;A(A)+(direct)ADDA,Rn;A(A)+(Rn)ADDA,Ri;A(A)+(Ri)无符号数相加时:若C=1,(其值 255)。有符号数相加时:若OV=1,说明有溢出。3.3.2算术运算类指令第41页/共141页43带进位位加法指令ADDCA,#data;A(A)+data+(CY)ADDCA,direct;A(A)+(direct)+(CY)ADDCA,Rn;A(A)+(Rn)+(CY)ADDCA,Ri;A(A)+(Ri)+(CY)ADD和ADDC指令的目的操作数均是A寄存器。ADD和ADDC指令在执行时要影响CY、AC、OV和P标志位。OV仅用来判断有符号
24、数运算是否正确。常用ADD和ADDC指令配合实现多字节加法运算。对于加法指令的说明第42页/共141页44【例4-8】设(A)=28H,(R1)=7CH,分析执行指令ADDA,R1后的结果。001010000111110010100100结果为:A=0A4H,CY=0,AC=1,P=1,OV=1第43页/共141页45【例4-9】设双字节数X存在片内RAM40H、41H单元,Y存在42H、43H单元,编程求Z=X+Y,并存入片内RAM44H、45H、46H单元。(所有数据按高字节存于低地址单元的规则存放)参考程序如下:MOVA,41HADDA,43HMOV46H,AMOVA,40HADDCA,
25、42HMOV45H,AMOVA,#00HADDCA,#00HMOV44H,A第44页/共141页462、减法指令SUBBA,#data;A(A)-data-(CY)SUBBA,direct;A(A)-(direct)-(CY)SUBBA,Rn;A(A)-(Rn)-(CY)SUBBA,Ri;A(A)-(Ri)-(CY)51指令系统只有带借位的减法指令,当需要执行不带借位的减法运算时,可先通过“CLRC”指令,将进位标志CY清零。SUBB指令在执行时要影响CY、AC、OV和P标志位。OV仅用来判断有符号数运算是否正确。对于减法指令的说明第45页/共141页47【例4-10】设(A)=52H,(R0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内核 单片机 汇编语言 程序设计
限制150内