第3章80C51单片机汇编语言概述单片机原理及应用(C51编程)-李全利-高教出版社_第1页
第3章80C51单片机汇编语言概述单片机原理及应用(C51编程)-李全利-高教出版社_第2页
第3章80C51单片机汇编语言概述单片机原理及应用(C51编程)-李全利-高教出版社_第3页
第3章80C51单片机汇编语言概述单片机原理及应用(C51编程)-李全利-高教出版社_第4页
第3章80C51单片机汇编语言概述单片机原理及应用(C51编程)-李全利-高教出版社_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/2/11第3章80C51单片机汇编语言概述单片机可执行程序生成示例

3.1汇编指令格式与寻址方式

3.2汇编器的伪指令3.380C51的指令系统

3.4汇编语言程序示例

3.52023/2/123.1单片机可执行程序生成示例

3.1.1编辑源文件

【例3-1】编写程序,实现将30H至3FH共16个RAM单元初始化为“55H”的功能。

ORG0000HMAIN:MOVR7,#16;R7存放单元数量16MOVR0,#30H;R0作为地址寄存器,初值为30HMOVA,#55H;数据55H放入累加器中LOOP:MOV@R0,A;累加器内容送入R0指向的单元中

INCR0;调整地址指向下一单元

DJNZR7,LOOP;循环直至16个单元全都完成

SJMP$;踏步暂停

END2023/2/133.1.2汇编与连接汇编连接后得到目标文件。3.1.3可执行程序的写入:记录长度|起始地址|记录类型|指令代码|校验和2023/2/143.2汇编指令格式及寻址方式

3.2.1汇编语言的指令格式[标号:]指令助记符[操作数1,][操作数2,][操作数3,][;注释]

标号是指令的符号地址,以非数字字符开头;

助记符是指令功能的英文缩写;

操作数是指令要操作的数据或数据的地址;

注释字段可以增加程序的可读性。运算符(表3.1):NOT、HIGH、LOW、MOD、SHL、SHR、AND、OR、XOR等。

例:17/5结果为3、17MOD5结果为2。

2023/2/15Rn(n=0~7)-当前工作寄存器组中的寄存器R0~R7之一Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1@----------间址寄存器前缀#data------8位立即数/#data16-----16位立即数direct------片内低128个RAM单元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范围:-128~+127bit---------片内RAM位地址、SFR的位地址(×)------表示×地址单元或寄存器中的内容/----------位操作数的取反操作前缀3.2.2汇编指令功能描述符号2023/2/16一、寄存器寻址寻址方式:寻找(源)操作数或指令转移地址的方式仅介绍5种操作数寻址方式操作数在寄存器中寻址空间:R0~R7、A、B(AB形式)和DPTR特点:传送和执行速度快【例】若(R0)=30H,执行MOVA,R0后,(A)=30H

3.2.3操作数寻址方式2023/2/17二、直接寻址操作码后接字节存放的是操作数地址寻址空间:片内RAM低128字节SFR(符号形式)另一类直接寻址是转移目标地址的寻址。如:LJMPADDR16【例】若(50H)=3AH,

执行MOVA,50H后,(A)=3AH

2023/2/18三、寄存器间接寻址寄存器中的内容是操作数的地址寻址空间:片内RAM(@Ri、SP)片外RAM(@Ri、@DPTR)【例】若(R0)=30H,(30H)=5AH

执行MOVA,@R0后,(A)=5AH

指令助记符:片内:MOV片外:MOVX2023/2/19四、立即寻址操作数在指令编码中寻址空间:ROM对于MOVDPTR,#2100H指令,立即数高8位“21H”装入DPH

【例】执行MOVA,#50H

结果:(A)=50H

2023/2/110五、变址寻址操作数地址:基地址+偏移量寻址空间:ROM变址寻址还用于跳转指令,如JMP@A+DPTR

【例】(A)=0FH

(DPTR)=2400H执行MOVCA,@A+DPTR”后结果:(A)=88H

2023/2/1113.3汇编器的伪指令

伪指令是汇编器能够识别并对汇编过程进行某种指示的命令。

一、状态控制伪指令ORG、END二、符号定义伪指令EQU、BIT例:LENEQU10三、存储空间初始化伪指令DB,DW例:DB-1,2

四、其他伪指令见表3.3所示。2023/2/1123.4.1数据传送类指令(29条)一般不影响标志寄存器PSW的状态。传送类指令有两大类3.480C51的指令系统

一般传送(MOV)特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP

2023/2/113一、一般传送指令16位传送(仅1条)8位传送MOVDPTR,#2100H;DPTR←#2100H

以A为目的,例如:MOVA,#55H;A←#55HMOVA,55H;A←(55H)MOVA,R0;A←(R0)MOVA,@R0;A←((R0))

以Rn为目的,例如:MOVR7,A;R7←(A)MOVR7,#55H;R7←#55HMOVR7,55H;R7←(55H)2023/2/114

以direct为目的,例如:MOV30H,A;(30H)←(A)MOV30H,#55H;(30H)←#55HMOV30H,55H;(30H)←(55H)MOV30H,R0;(30H)←(R0)MOV30H,@R0;(30H)←((R0))

以@Ri为目的,例如:MOV@R0,A;(R0)←AMOV@R0,#55H;(R0)←#55HMOV@R0,55H;(R0)←(55H)2023/2/115二、特殊传送指令

入栈指令PUSH堆栈操作指令PUSH和POP堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元,向上生长。PUSHdirect;SP←(SP)+1,(SP)←(direct)出栈指令POPPOPdirect;(direct)←((SP)),SP←(SP)-1注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。

数据交换指令XCH、XCHD和SWAP数据交换属于同时进行的双向传送XCHA,55H;(A)XCHA,R7;(A)XCHA,@R0;(A)((R0))(55H)

字节交换,例如:(R7)

半字节交换,例如:XCHDA,@R0;SWAPA;间址操作数的低半字节与A的低半字节互换。累加器的高低4位互换2023/2/117

读片外RAM片外RAM(或接口)传送指令MOVX片外RAM中经常存放数据采集与处理的中间数据

MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri

;A←((Ri))

写片外RAMMOVX@DPTR,A;((DPTR))←AMOVX@Ri,A;((Ri))←A注意:用@Ri寻址时,高8位地址由P2口提供

以DPTR内容为基址读ROM中常数表项指令MOVCROM中可以存放程序代码,还经常存放常数表

MOVCA,@A+DPTR;A←((A)+(DPTR))

以PC内容为基址MOVCA,@A+PC;A←((A)+(PC))常数表存放约束小,称为远程查表指令。占用DPTR

常数表存放约束大,称为近程查表指令。不占用DPTR

2023/2/1193.4.2算数运算类指令(24条)算数运算结果要影响PSW中标志位

CY为1,无符号数(字节)加减发生进位或借位OV为1,有符号数(字节)加减发生溢出错误

AC为1,十进制数(BCD码)加法的结果应调整

P为1,存于累加器A中操作结果的“1”的个数为奇数

标志位意义标志位与相关指令影响指令标志ADD、ADDC、SUBBDAMULDIVCY√√00AC√√××OV√×√√P√√√√2023/2/120算数运算影响标志位示例有2个参与相加的机器数,一个是84H,另一个是49H。试分析运算过程及其对状态标志的影响。结果:CY为0;AC为0;OV为0;P为1

1、对于无符号数:第一个数为132(84H),第二个数为73(49H),相加后,由于CY为0,所以结果为CDH(即205)。运算结果分析:2、对于有符号数:第一个数为-124(84H),第二个数为73(49H),相加后,由于OV为0,没有溢出。所以结果为-33H(CDH为-33H的补码)。3、对于BCD数:第一个数为84(84H),第二个数为49(49H),相加后,中间结果为CDH,加66H进行调整,结果:CY=1,数值33H(即十进制的133)。结论:同样的两个机器数,编程人员对其不同的数据属性约定,会产生不同的运算结果解释。所以,编程人员在程序设计的开始,就应该首先确定参与运算的数据是采用有符号数还是采用无符号数或是采用BCD数。

2023/2/123一、加法不带进位加法ADDA,#55H;A←(A)+#55HADDA,55H;A←(A)+(55H)ADDA,R7;A←(A)+(R7)ADDA,@R0;A←(A)+((R0))带进位加法(这组指令方便了多字节加法的实现)

ADDCA,#55H;A←(A)+#55H+(CY)ADDCA,55H;A←(A)+(55H)+(CY)ADDCA,R7;A←(A)+(R7)+(CY)ADDCA,@R0;A←(A)+((R0))+(CY)2023/2/124加1INCA;A←(A)+1INC55H;(55H)←(55H)+1INCR7;R7←(R7)+1INC@R0;(R0)←((R0))+1INCDPTR;DPTR←(DPTR)+1十进制调整DAA;调整A的内容为正确的BCD码两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的和。

2023/2/125二、减法带借位减法用此组指令完成不带借位的减法,只需先清CY为0即可

CY为1,表示D7位需借位

AC为1,表示D3位需借位OV为1,表示“D6有借位D7无借位”或“D7有借位D6无借位”SUBBA,#55H;A←(A)-#55H-(CY)SUBBA,55H;A←(A)-(55H)-(CY)SUBBA,R7;A←(A)-(R7)-(CY)SUBBA,@R0;A←(A)-((R0))-(CY)2023/2/126减1这组指令仅DECA

影响P标志。其余指令都不影响标志位的状态。DECA;A←(A)-1DEC55H;(55H)←(55H)-1DECR7;R7←(R7)-1DEC@R0;(R0)←((R0))-12023/2/127三、乘法和除法乘法指令:

MULAB;A与B相乘无符号结果:B中为积的高8位,A中为积的低8位。

CY总是被清0;OV=1表示积大于FFH

除法指令:

DIVAB;A除以B

无符号结果:A中为商的整数部分,B中为余数

CY总是被清0;OV=1表示除数为02023/2/1283.4.3逻辑运算与循环类指令(24条)一、逻辑与逻辑:与、或、异或、清0和取反循环:左、右移,带进位位左、右移与操作常用于对某些不关心位进行“清0”,同时“保留”另一些关心位

ANL55H,#55H;(55H)←(55H)∧#55HANL55H,A;(55H)←(55H)∧(A)ANLA,#55H;A←(A)∧#55HANLA,55H;A←(A)∧(55H)ANLA,R7;A←(A)∧(R7)ANLA,@R0;A←(A)∧((R0))2023/2/129二、逻辑或或操作常用于对某些关心位进行“置1”,不关心位保持不变

ORL55H,#55H;(55H)←(55H)∨#55HORL55H,A;(55H)←(55H)∨(A)ORLA,#55H;A←(A)∨#55HORLA,55H;A←(A)∨(55H)ORLA,R7;A←(A)∨(R7)ORLA,@R0;A←(A)∨((R0))2023/2/130三、逻辑异或异或操作常用于对某些关心位进行“取反”,不关心位保持不变

XRL55H,#55H;(55H)←(55H)⊕#55HXRL55H,A;(55H)←(55H)⊕(A)XRLA,#55H;A←(A)⊕#55HXRLA,55H;A←(A)⊕(55H)XRLA,R7;A←(A)⊕(R7)XRLA,@R0;A←(A)⊕((R0))2023/2/131五、累加器循环移位四、累加器清0和取反CLRA;A←0CPLA;A的内容取反RRA;右循环RRCA;带进位右循环RLA;左循环RLCA;带进位左循环2023/2/1323.4.4控制转移类指令(17条)一、无条件转移短跳转AJMPaddr11;2k范围跳转

长跳转LJMPaddr16;64k范围跳转

相对转移SJMPrel

;+127~-128范围跳转散转移JMP@A+DPTR;完成多条判跳指令的功能

2023/2/133【例】功能:当(A)=00H时,程序将转到ROUT0处执行;当(A)=02H时,程序将转到ROUT1处执行;……。

MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT32023/2/134二、条件转移累加器判0转移比较不等转移JZrel

;若(A)=0,则PC←(PC)+2+relJNZrel

;若(A)≠0,则PC←(PC)+2+relCJNEA,55H,rel

;CJNEA,#55H,rel

;CJNER7,#55H,rel

;CJNE@R0,#55H,rel;减1不为0转移DJNZR7,rel

;DJNZ55H,rel

;2023/2/135调用三、调用与返回ACALLaddr11;2k范围调用LCALLaddr16;64k范围调用返回RET;子程序返回RETI;中断子程序返回RETI具有清除内部相应的中断状态触发器(以保证正确的中断逻辑)的功能。

四、空操作NOP;PC←(PC)+1,占1个周期、一个字节

2023/2/1363.4.5位操作类指令(17条)位操作是以位为单位进行的各种操作。位操作指令中的位地址有4种表示形式:直接地址(如,0D5H);点操作符(如,0D0H.5、PSW.5等);位名称(如,F0);伪指令定义(如,MYFLAGBITF0)。以上几种形式表示的都是PSW中的位5。位操作指令中,位累加器要用“C”表示(注:而CY与具体的直接位地址D7H对应)。试比较:A与ACC的关系?2023/2/137一、位传送MOV20H,C;(20H)←(CY)MOVC,20H;CY←(20H)二、位状态设置位清0位置位CLRC;CY←0CLR00H;(00H)←0SETBC;CY←1SETB00H;(00H)←12023/2/138三、位逻辑运算位逻辑与位逻辑或位取反ANLC,00H;CY←(CY)∧(00H)ANLC,/00H;CY←(CY)∧(00H)取反ORLC,00H;CY←(CY)∨(00H)ORLC,/00H;CY←(CY)∨(00H)取反CPLC;CY←(CY)取反CPLC,00H;(00H)←(00H)取反2023/2/139判CY转移判bit转移四、位判跳(条件转移);若(CY)=1,PC←(PC)+2+rel,否则顺次执行。;若(CY)=0,PC←(PC)+2+rel,否则顺次执行。;(00H)=1,PC←(PC)+3+rel,否则顺次执行。;(00H)=1,PC←(PC)+3+rel,00H←0,否则顺次执行;(00H)=0,PC←(PC)+3+rel,否则顺次执行

3.5汇编语言程序示例

3.5.1顺序程序(无分支、无循环)【例3-2】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。ORG0040HSTART:MOVA,21H;取十位ASCII码ANLA,#0FH;保留低半字节SWAPA;移至高半字节MOV20H,A;存于20H单元MOVA,22H;取个位ASCII码ANLA,#0FH;保留低半字节ORL20H,A;合并到结果单元SJMP$END3.5.2分支程序(单分支、双分支、多分支)【例3-3】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。

ORG0040HSTART:MOVA,30H;取x至累加器

JZNEXT;x=0,转NEXTANLA,#80H;否,保留符号位

JZDONE;x>0,转结束

MOVA,#05H;x<0处理

ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x=0,20H送YDONE:SJMPDONEEND【例3-4】根据R7的内容x(转移序号)转向相应的处理程序。设R7内容为0~4,对应的处理程序入口地址分别为PP0~PP4。

START:MOVR7,#3;以转移序号3为例

ACALLJPNUMAJMPSTARTJPNUM:MOVDPTR,#TAB;置分支入口地址表首址

MOVA,R7

ADDA,R7;乘2,调整偏移量

MOVR3,AMOVCA,@A+DPTR;取地址高字节,暂存于R3XCHA,R3INCAMOVCA,@A+DPTR;取地址低字节

MOVDPL,A;处理程序入口地址低8位送DPLMOVDPH,R3;处理程序入口地址高8位送DPHCLRA

JMP@A+DPTR

TAB:DWPP0DWPP1DWPP2

DWPP3DWPP4PP0:M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论