《单片机原理及应用》第2章:汇编语言简_第1页
《单片机原理及应用》第2章:汇编语言简_第2页
《单片机原理及应用》第2章:汇编语言简_第3页
《单片机原理及应用》第2章:汇编语言简_第4页
《单片机原理及应用》第2章:汇编语言简_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第二章汇编语言简介本章重点1、七种寻址方式2、数据传送类指令3、算术运算类指令4、控制转移类指令5、汇编语言程序设计本章内容2.1寻址方式汇编语言指令标号:

操作码

目的操作数,源源操作数

;注释符号含

义$当前指令起始地址/对该位内容取反Rel转移指令8位偏移量Rn当前R0-R7RiR0R1(i=0、1)#data8/168位常数(立即数)、16位常数(立即数)Addr11/1611位目的地址、16位目的地址direct直接地址(00H-FFH)或指SFRbit位地址@间接寻址符号(前缀)(x)X中的内容/数据((x))由X作为地址存储单元中的内容`数据传送方向代码字节指令代码汇编指令指令周期

单字节84DIVAB四周期单字节A3INCDPTR双周期双字节7410MOVA,#10H单周期三字节B440relCJNEA,#40H,LOOP双周期2.1寻址方式1立即数寻址例如:MOVA,#52H;A

52H

MOVDPTR,#5678H;DPTR

5678H2直接寻址在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。

3寄存器寻址由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。寄存器一般指累加器A和工作寄存器R0~R7。例如:

MOVA,Rn;A

(Rn)其中n为0~7之一,Rn是工作寄存器。

MOVRn,A;Rn

(A)

MOVB,A;B

(A)寄存器寻址方式的寻址范围包括:寄存器寻址的主要对象是通用寄存器,共有4组32个通用寄存器,但寄存器寻址只能使用当前寄存器组。因此指令中的寄存器名称只能是R0~R7。在使用本指令前,需通过对PSW中RS1、RS0位的状态设置,来进行当前寄存器组的选择。部分专用寄存器。累加器A、B寄存器以及数据指针DPTR等。4

寄存器间接寻址方式由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器间接寻址。寄存器间接寻址用符号“@”表示。例如:MOVR0,#60H;R0

60HMOVA,@R0;A

((R0))MOVA,@R1;A

((R1))5

位寻址位操作指令能对内部RAM中的位寻址区(20H~2FH)和某些有位地址的特殊功能寄存器进行位操作。也就是说可对位地址空间的每个位进行位状态传送、状态控制、逻辑运算操作。例如指令

SETBTR0;TR0

1CLR00H;(00H)

0MOVC,57H;将57H位地址的内容传送到位累加器C中ANLC,5FH;将5FH位状态与进位位C相与,结果在C中6

基址寄存器加变址寄存器间接寻址它以基址寄存器(DPTR或PC)的内容为基本地址,加上变址寄存器A的内容形成16位的地址,访问程序存储器中的数据表格。例如;

MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTRMOVCA,@A+DPTR7

相对寻址

相对寻址以程序计数器PC的当前值作为基地址,与

指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。这种寻址方式用于相对转移指令中,指令中的相对偏移量是一个8位带符号数,用补码表示。可正可负,转移的范围为-128~+127。使用中应注意rel的范围不要超出。例如:

JZLOOP

DJNER0,DISPLAY2.2指令系统数据传送类指令数据传送类指令用到的助记符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP,SWAP。1.以累加器为目的操作数的内部数据传送指令MOVA,Rn;A

(Rn)MOVA,direct;A

(direct)MOVA,@Ri;A

((Ri))MOVA,#data;A

data2.数据传送到工作寄存器Rn的指令MOVRn,A;Rn

(A)MOVRn,direct;Rn

(direct)MOVRn,#data;Rn

data3.目的操作数是直接地址directMOVdirect,A;direct

(A)MOVdirect,Rn;direct

(Rn)MOVdirect1,direct2;direct1

(direct2)MOVdirect,@Ri;direct

((Ri))MOVdirect,#data;direct

#data4.目的操作数是@Ri和DPTRMOV@Ri,A;(Ri

(A)MOV@Ri,direct ;(Ri)

(direct)MOV@Ri,#data ;(Ri)

dataMOVDPTR,#data16;DPTR

data165.累加器A与外部数据存储器之间的传送指令MOVXA,@DPTR;A

(DPTR)MOVXA,@Ri;A

((Ri))MOVX@DPTR,A;(DPTR)

AMOVX@Ri,A;(Ri)

A6

、程序存储器内容与累加器之间传送MOVCA,@A+PCMOVCA,@A+DPTR7、堆栈操作指令PUSHdirectPOPdirect例如:PUSHPSWPOPDPHPUSHACCPOPDPLPUSHDPLPOPACCPUSHDPHPOPPSW字节交换指令(1)整字节交换指令XCHA,Rn;(A)

(Rn)XCHA,direct;(A)

(direct)XCHA,@Ri;(A)

((Ri))(2)半字节交换指令字节单元与累加器A进行低4位的半字节数据交换。只有一条指令。XCHDA,@Ri

(3)累加器高低半字节交换指令SWAPA

【例2-1】(R0)=30H,(A)=65H,(30H)=8FH执行指令:XCH

A,@R0;(R0)=30H,(A)=8FH,(30H)=65HXCHD

A,@R0;(R0)=30H,(A)=6FH,(30H)=85HSWAP

A;(A)=56H2.2.2算术操作类指令算术指令用到的助记符共有8种:ADD、ADDC、INC、SUBB、DEC、DA、MUL、DIV。1.加法指令加法指令分为普通加法指令、带进位加法指令和加1指令。(1)普通加法指令ADDA,Rn;A

(A)+(Rn)ADDA,direct;A

(A)+(direct)ADDA,@Ri;A

(A)+((Ri))ADDA,#data;A

(A)+data【例2-2】(A)=85H,R0=20H,(20H)=0AFH,执行指令:

ADDA,@R0后A,AC,OV,CY的值。(2)带进位加法指令ADDCA,Rn;A

(A)+(Rn)+(Cy)ADDCA,direct;A

(A)+(direct)+(Cy)ADDCA,@Ri;A

(A)+((Ri))+(Cy)ADDCA,#data;A

(A)+data+(Cy)这组指令的功能与普通加法指令类似,唯一的不同之处是,在执行加法时,还要将上一次进位标志Cy的内容也一起加进去,对于标志位的影响也与普通加法指令相同。

【例2-3】(A)=85H,(20H)=0FFH,Cy=1执行指令:ADDCA,20H

10000101111111111+110000101结果:(A)=85H;Cy=1;AC=1;OV=0。(3)增量指令INCA;A

(A)+1INCRn;Rn

(Rn)+1INCdirect;direct

(direct)+1INC@Ri;(Ri)

((Ri))+1INCDPTR;DPTR

(DPTR)+1【例2-4】(A)=12H,(R3)=0FH,(35H)=4AH,(R0)=56H,(56H)=00H执行如下指令:INC

A;执行后(A)=13H

INC

R3;执行后(R3)=10H

INC

35H;执行后(35H)=4BH

INC@R0;执行后(56H)=01H例如:有两个BCD数36与45相加,结果应为BCD码81,程序如下:MOVA,#36HADDA,#45HDAA2.减法指令(1)带进位减法指令SUBBA,Rn;A

(A)-(Rn)-(Cy)SUBBA,direct;A

(A)-(direct)-(Cy)SUBBA,@Ri;A

(A)-(Ri)-(Cy)SUBBA,#data;A

(A)-data-(Cy)(2)减1指令DECA;A

(A)-1DECRn;Rn

(Rn)-1DECdirect;direct

(direct)-1DEC@Ri;(Ri)

((Ri))-13.乘法指令

MULAB【例2-5】(A)=50H,(B)=0A0H,执行指令:MUL

AB结果:(B)=32H,(A)=00H(即乘积为3200H),Cy=0,OV=1。

4.除法指令DIVAB若原来B中的内容为0,则执行该指令后A与B中的内容不定,并将溢出标志置“1”,在任何情况下,进位标志Cy总是被清“0”。2.2.3逻辑运算指令1.简单逻辑操作指令CLRA;对累加器A清“0”CPLA;对累加器A按位取反RLA;累加器A的内容向左循环移1位RLCA;累加器A的内容带进位标志向左循环移1位RRA;累加器A的内容向右循环移1位RRCA;累加器A的内容带进位标志向右循环移1位2.逻辑与指令ANLA,Rn;A

(A)

(Rn)ANLA,direct;A

(A)

(direct)ANLA,@Ri;A

(A)

((Ri))ANLA,#data;A

(A)

dataANLdirect,A;direct

(direct)

(A)ANLdirect,#data;direct

(direct)

data【例2-6】(A)=37H,(R0)=0A9H执行指令:ANL

A,R0结果:(A)=21H3.逻辑或指令ORLA,Rn;A

(A)

(Rn)ORLA,direct;A

(A)

(direct)ORLA,@Ri;A

(A)

((Ri))ORLA,#data;A

(A)

dataORLdirect,A;direct

(direct)

(A)ORLdirect,#data;direct

(direct)

data4.逻辑异或指令XRLA,Rn;A

(A)

(Rn)XRLA,direct;A

(A)

(direct)XRLA,@Ri;A

(A)

((Ri))XRLA,#data;A

(A)

dataXRLdirect,A;direct

(direct)

(A)XRLdirect,#data;direct

(direct)

data2.2.4控制转移类指令1.无条件转移指令(1)绝对转移指令

AJMP

addr11(2)相对转移指令

SJMPrel(3)长跳转指令LJMP

addr16;PC

addr16(4)间接转移指令(散转指令)

JMP

@A+DPTR ;PC

(A)+(DPTR)2.条件转移指令JZrel;(A)=0转移JNZrel;(A)≠0转移3.比较转移指令CJNEA,direct,rel;A)

(direct)转移CJNEA,#data,rel;(A)

data转移CJNERn,#data,rel;(Rn)

data转移CJNE@Ri,#data,rel;((Ri))

data转移4.减1不为0转移指令DJNZRn,rel;Rn

(Rn)-1

0转移DJNZdirect,rel;direct

(direct)-1

0转移5.调用及返回指令绝对调用指令ACALLaddr11 长调用指令LCALL

addr16子程序返回指令RET中断返回指令RETI空操作指令NOP;PC

PC+1位操作指令1.位数据传送指令MOVC,bit;Cy

(bit)MOVbit,C;bit

(Cy)2.位变量修改指令CLRC ;Cy

0CLRbit ;bit

0CPLC ;Cy

(Cy)CPLbit ;bit

(bit)SETBC ;Cy

1SETBbit ;bit

13.位变量逻辑与指令ANLC,bit ;Cy

(Cy)

(bit)ANLC,/bit ;Cy

(Cy)

(/bit)4.位变量逻辑或指令

ORLC,bit ;Cy

(Cy)

(bit)ORLC,/bit ;Cy

(Cy)

(/bit)5.位变量条件转移指令JCrel;若(Cy)=1,则转PC←(PC)+2+relJNCrel;若(Cy)=0,则转PC←(PC)+2+relJBbit,rel;若(bit)=1,则转PC←(PC)+3+relJNBbit,rel;若(bit)=0,则转PC←(PC)+3+relJBCbit,rel;若(bit)=1,则转PC←(PC)+3+rel,并bit←0【例2-8】指出下列程序段的每条指令的源操作数是什么寻址方式,并写出每步运算的结果。(相关单元的内容)设程序存储器(1050H)=5AH:

MOV

A,#0FH;MOV

30H,#0F0H;MOV

R2,A;MOV

R1,#30H;MOV

A,@R1;MOV

DPTR,#1000H;MOV

A,#50H;MOVC

A,@A+DPTR;JMP

@A+DPTR;CLR

C;C=0,MOV

20H,C;【例2-9】用数据传送指令实现下列要求的数据传送。(1)R0的内容输出到R1。(2)内部RAM20H单元的内容传送到A中。(3)外部RAM30H单元的内容送到R0。(4)外部RAM30H单元的内容送内部RAM20H单元。(5)外部RAM1000H单元的内容送内部RAM20H单元。(6)程序存储器ROM2000H单元的内容送R1。(7)ROM2000H单元的内容送内部RAM20H单元。(8)ROM2000H单元的内容送外部RAM30H单元。(9)ROM2000H单元的内容送外部RAM1000H单元。2.3简单汇编语言程序设计伪指令1、ORG——起始地址指令格式:ORGn2、DB——定义字节型常数的指令格式:DBX1,X2,X3…Xn3、DW——定义双字节伪指令格式:DWX1,X2,…Xn4、EQU——数据赋值伪指令格式:XEQUn5、BIT——位赋值伪指令格式:XBIT位地址例如:CLKBITP1.06、DATA——数据赋值伪指令格式:字符名DATA表达式功能:将右边表达式的值赋给左边的字符名此伪指令的功能与EQU类似,他们的区别在于:(1)DATA可以先使用再定义,他可以放在程序的开头和结尾,也可以放在程序的其他位置,比EQU指令灵活。(2)EQU指令可以把一个汇编符号(如R1)赋给一个字符名称,而DATA伪指令则不能。DATA伪指令在程序中用来定义数据或地址。7、END——汇编结束伪指令格式:END基本程序设计方法【例2-10】将0~15共16个立即数送到内部RAM30H开始的单元。Start:MOV30H,#0;(30H)#0MOV31H,#1;(31H)#1MOV32H,#2;(32H)#2……MOV3FH,#15H;(3FH)#15RET;返回【例2-11】将内部RAM30H单元的压缩BCD码拆成两个非压缩的BCD码存储到内部31、32H中。Start:MOVA,30HANLA,#0FHMOV31H,AMOVA,30HANLA,#0F0HMOV32H,ARET例【2-12】单字节压缩BCD码转换成二进制码子

温馨提示

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

评论

0/150

提交评论