第三与第四章 MCS-51指令系统与汇编语言程序设计_第1页
第三与第四章 MCS-51指令系统与汇编语言程序设计_第2页
第三与第四章 MCS-51指令系统与汇编语言程序设计_第3页
第三与第四章 MCS-51指令系统与汇编语言程序设计_第4页
第三与第四章 MCS-51指令系统与汇编语言程序设计_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

内容安排3.1MCS-51单片机指令格式3.2MCS-51指令寻址方式3.3MCS-51单片机指令系统第3章MCS-51单片机指令系统

指令:是计算机用于控制某个功能部件完成某一指定动作的指示和命令指令系统:所有指令的集合指令由两部分组成,即操作码和操作数。

操作码用来规定指令进行什么操作

操作数则是指令操作的对象3.1MCS-51单片机指令格式

单字节指令、双字节指令、三字节不同长度的指令,格式不同:(1)单字节指令:指令只有一个字节,操作码和操作数同在一个字节中。(2)双字节指令:一个字节为操作码,另一个字节是操作数。

(3)三字节指令:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。3.1MCS-51单片机指令格式3.2MCS-51指令寻址方式寻址方式:指CPU寻找操作数或操作数地址的方法寻址方式寄存器寻址寄存器间接寻址基址加变址寄存器间接寻址立即寻址直接寻址位寻址相对寻址1.立即寻址操作数直接由指令给出,通常紧跟指令操作码之后的字节是操作数,该操作数被称为立即数

立即数:8/16位二进制数如:MOV A,#2AH MOV DPTR,#1324H3.2MCS-51指令寻址方式

2.直接寻址操作数直接以单元地址形式给出寻址范围:

(1)内部RAM的128个单元

(2)特殊功能寄存器。除了以单元地址的形式外,还可用寄存器符号的形式给出。

如:MOVA,P0;

MOVR0,TH0;3.2MCS-51指令寻址方式

3.寄存器寻址

寄存器寻址是指指令中的操作数为寄存器中的内容。

可用寄存器有:(1)四组工作寄存器R0~R7共32个工作寄存器,由PSW中的RS1、RS2两位状态来选择当前寄存器组(2)SFR中有A、AB、DPTR及CY

如: MOVR3,#12H;

MOVA,R3;(A)←(R3)3.2MCS-51指令寻址方式

4.寄存器间接寻址方式

寄存器中存放的是操作数的地址在寄存器的名称前面加前缀标志“@”

访问内部RAM或外部数据存储器的低256个字节时,只能采用R0或R1作为间址寄存器。例如:

MOVA,@Ri

;i=0或1

寻址范围:(1)访问内部RAM低128个单元,其通用形式为@Ri(2)对片外数据存储器的64K字节的间接寻址,例如: MOVXA,@DPTR

3.2MCS-51指令寻址方式(3)片外数据存储器的低256字节例如:MOVXA,@Ri(4)堆栈区堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针(SP)作间址寄存器3.2MCS-51指令寻址方式

5.基址加变址寄存器间接寻址以DPTR或PC为基址寄存器,以A为变址寄存器,以两者相加形成的16位地址为操作数的地址。寻址方式的指令只有3条:

MOVCA,@A+DPTR MOVCA,@A+PC JMP@A+DPTR3.2MCS-51指令寻址方式

6.相对寻址

相对寻址方式是以程序计数器PC的当前值为基准,加上指令中给出的相对偏移量rel以形成目标地址。目的地址=转移指令所在地址+转移指令字节数 +rel

操作数rel为程序转移的偏移量,是一带符号的8位二进制数补码数。

例:

3.2MCS-51指令寻址方式PC值不变→PC值变MOVCA,@A+PCMOVCA,@A+DPTRJMP@A+DPTR7.位寻址

位寻址是指对片内RAM的位寻址区(20H~2FH)和可以位寻址的特殊功能寄存器的各位进行位操作的寻址方式。

MCS-51单片机片内RAM有两个区域可以位寻址:

(1)20H~2FH单元的128个位;

(2)特殊功能寄存器中字节地址能被整除的寄存器中的各位。

3.2MCS-51指令寻址方式

特殊功能寄存器PSW中的可寻址位在指令中有如下4种的表示方法:

(1)直接使用位地址。例如PSW.5的位地址为0D5H。

(2)位名称的表示方法。例如:PSW.5是F0标志位,可使用F0表示该位。

(3)单元地址加位数的表示方法。例如:(0D0H).5。

(4)特殊功能寄存器符号加位数的表示方法。例如:PSW.53.2MCS-51指令寻址方式CY

AC

F0RS1RS0

OV—PD7D6D5D4D3D2D1D0PSWD0H3.2MCS-51指令寻址方式MCS-51的基本指令共111条,按指令所占的字节来分:

(1)单字节指令49条;

(2)双字节指令45条;

(3)三字节指令17条。按功能分类,可分为下面5大类:(1)数据传送类(28条)

(2)算术操作类(24条(3)逻辑运算类(25条)

(4)控制转移类(17条)

(5)位操作类(17条)3.3MCS-51单片机指令系统

数据传送指令位操作把某一单元中内容传送到另一单元中去。一般传送类指令的通用指令格式为

MOV<目的操作数>,<源操作数>

源操作数可以是累加器A、通用寄存器Rn、直接地址direct、间址寄存器@Ri和立

即数。

目的操作数可以是累加器A、通用寄存器Rn、直接地址direct和间址寄存器@Ri。

3.3.1数据传送指令位操作1.片内RAM数据传送指令组

该类指令共有16条。

(1)以A为目的操作数的指令:

MOVA,Rn;(Rn)→A,n=0~7MOVA,@Ri;((Ri))→A,i=0,1MOVA,direct;(direct)→AMOVA,#data;#data→A3.3.1数据传送指令位操作例MOVA,#38H;A←38H

MOVA,R0 ;A←(R0)

设(33H)=7AH;R0=33H,则

MOV

A,@R0;将R0指定的33H中的数7AH送A中

执行结果:A=((R0))=(33H)=7AH。3.3.1数据传送指令位操作2.以Rn为目标的操作数的指令:

MOVRn,A;(A)→Rn,n=0~7 MOVRn,direct;(direct)→Rn,n=0~7MOVRn,#dat;#data→Rn,n=0~7例MOVR1,#10H;将立即数10H送R1寄存器,

3.3.1数据传送指令位操作3.以直接地址direct为目的操作数的指令

MOVdirect,A;(A)→directMOV direct,Rn;(Rn)→direct,n=0~7MOVdirect1,direct2; MOVdirect,@Ri;((Ri))→direct MOV direct,#data;#data→direct

MOV

30H,31H;30H←(31H)

MOV

P2,R2;寄存器R2内容送P2口

3.3.1数据传送指令位操作4.以寄存器间接地址为目的操作数的指令

MOV@Ri,A;(A)→((Ri)),i=0,1MOV@Ri,direct;(direct)→((Ri))MOV@Ri,#data;#data→((Ri))例:设(A)=33H,(R0)=56H,则执行指令:

MOV@R0,A;(R0)←(A),即(56H)=33H3.3.1数据传送指令位操作5.16位数传送指令

MOVDPTR,#data16;#data16→DPTR

唯一的16位数据的传送指令,立即数的高8位送入DPH,立即数的低8位送入DPL。例MOVDPTR,#1011HDPTR←1011H,

结果为(DPH)=10H,(DPL)=11H3.3.1数据传送指令位操作6.累加器A与外部数据存储器传送指令

MOVXA,@DPTR;((DPTR))→A,读外部RAM/IOMOVXA,@Ri;((Ri))→A,读外部RAM/IOMOVX@DPTR,A;(A)→((DPTR)),写外部RAM/IOMOVX@Ri,A;(A)→((Ri)),写外部RAM/IO功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。3.3.1数据传送指令位操作7.堆栈操作指令(PUSH、POP):2条功能:分别用于保护现场和恢复现场 进栈指令PUSH用于保护片内某个单元内容 出栈指令POP用于恢复片内某个单元内容

PUSH

direct;(SP)+1→(SP),(direct)→(SP)

POP

direct

;(SP)→(direct),(SP)-1→(SP)3.3.1数据传送指令位操作入栈指令PUSH

direct例:

(SP)=60H,(A)=30H,(B)=70H时,执行

PUSHAcc;(SP)+1=61H→SP,(A)→61HPUSHB;(SP)+1=62H→SP,(B)→62H结果:(61H)=30H,(62H)=70H,(SP)=62H退栈指令POPdirect例:

(SP)=62H,(62H)=70H,(61H)=30H时,执行

POPDPH;((SP))→DPH,(SP)-1=61H→SPPOPDPL;((SP))→DPL,(SP)-1=60H→SP结果:(DPTR)=7030H,(SP)=60H3.3.1数据传送指令位操作8.查表指令

用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。共两条

(1)MOVCA,@A+PC

(A)=30H,执行地址1000H处的指令

1000H:MOVCA,@A+PC

本指令占用一个字节,执行结果将程序存储器中1031H的内容送入A。3.3.1数据传送指令位操作

(2)MOVCA,@A+DPTR例:在ROM1000H开始存有5个字节数,编程将第二个字节数取出送片内RAM30H单元中。程序段如下:MOVDPTR,#1000H;置ROM地址指针(基址)DPTR←1000HMOVA,#01H;表内序号送A(变址),A←01HMOVCA,@A+DPTR;从ROM1001H单元中取数送到AMOV30H,A ;再存入片内RAM30H中

ORG1000H;伪指令,定义数表起始地址

TAB:DB55H,67H,9AH,34H,57H;在ROM1000H开始的空间定义5个单字节数执行结果:(30H)=67H。3.3.1数据传送指令位操作9.字节交换指令(1)整字节交换指令

XCHA,Rn XCHA,direct XCHA,@Ri功能:将累加器A的内容与内部RAM、SFR中的内容互换,影响标志位

(2)低半字节交换指令(XCHD)

XCHDA,@Ri;(A)3~0

((Ri))3~0功能:累加器A的低四位与片内RAM某单元的低四位交换,高四位不变3.3.1数据传送指令位操作(3)累加器A高低半字节交换指令(SWAP)

SWAPA;A7~4A3~0功能:将累加器A中的高4位与低4位内容互换,不影响标志位例若(A)=45H,(R0)=20H,(20H)=69H,单独执行下列指令后:

SWAPA ;(A)=54H

XCHA,R0 ;(A)=20H,(R0)=45H

XCHDA,@R0 ;(A)=49H,(20H)=65H3.3.1数据传送指令位操作功能:执行加、减、乘、除法四则运算和加1、减1操作以及十进制的调整特点:支持8位无符号数操作,借助溢出标志可对带符号数进行补码运算算术运算类指令执行结果影响PSW3.3.2算术运算类指令加法指令带借位减法指令(4)加1、减1指令(9)算术运算类指令乘法和除法指令(2)十进制调整指令(1)不带进位加法指令(4)带进位加法指令(4)1.加法指令

共有4条加法运算指令:

ADDA,Rn;(A)+(Rn)→A,n=0~7ADDA,direct;(A)+(direct)→AADDA,@Ri;(A)+((Ri))→A,i=0,1

ADDA,#data;(A)+#data→A3.3.2算术运算类指令8位二进制数加法运算指令的一个加数总是累加器A,第二加数可用4种不同寻址方式得到,其相加结果再送回累加器A中,同时影响AC、CY、OV、P位。注意:累加器A中的值前后是不一样的。影响程序状态字PSW中的OV、C、AC和P的情况如下:(Di,i=0,1,…,7)

进位标志C:和的D7位有进位时,C=1;否则,C=0。

辅助进位标志AC:和的D3位有进位时,AC=1;否则,AC=0。

溢出标志OV:和的D7、D6位只有一个有进位时,OV=1;否则,OV=0。溢出表示运算的结果超出了数值所允许的范围。3.3.2算术运算类指令

例:两个8位无符号数相加的和仍是8位。例如内部RAM中40H和41H单元分别存放两个加数,相加结果存放42H单元。程序设计为:

MOV R0,#40H ;设置数据指针

MOV A,@R0 ;取第一个加数

INC R0 ;修改数据指针

ADD A,@R0 ;两数相加

INC R0 ;修改数据指针

MOV @R0,A ;存结果

假设(40H)=53H;(41H)=FCH。结果为:(A)=4FH,(CY)=1,(AC)=0,(OV)=0,(P)=13.3.2算术运算类指令

2.带进位加法指令标志位Cy参加运算,因此是三个数相加。共4条:

ADDCA,Rn ;(A)+(Rn)+C→A,n=0~7ADDCA,direct;(A)+(direct)+C→AADDC A,@Ri ;(A)+(Ri)+C→A,i=0,1ADDC A,#data ;(A)+#data+C→A

例:(A)=85H,(20H)=FFH,Cy=1,执行指令:

ADDCA,20H结果为:(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位数为奇数)3.3.2算术运算类指令加1指令INCA;A←(A)+1INCRi;Ri←(A)+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1对标志位不产生影响若:(A)=0FFH,(Cy)=0执行:INCA结果:(A)=00H,(Cy)=03.3.2算术运算类指令4.十进制调整指令

DAA

用途:紧跟在BCD码加法指令(不包括减法)之后,进行十进制调整。(96H为压缩BCD码,表示十位为9,个位为6)如两BCD码加:

MOVA,#35HADDA,#46H(A)=7BH,并不是81H

但:DAA后,(A)=81H3.3.2算术运算类指令5.带借位的减法指令

4条指令:

SUBBA,Rn;(A)-(Rn)-Cy→A,n=0~7SUBBA,direct;(A)-(direct)-Cy→A

SUBBA,@Ri;(A)-((Ri))-Cy→A,i=0,1SUBBA,#data;(A)-#data-Cy→A

功能:从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。如果位7需借位则置“1”Cy,否则清“0”Cy;如果位3需借位则置“1”Ac,否则清“0”Ac;如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置“1”溢出标志位OV,否则清“0”OV。3.3.2算术运算类指令6.减1指令减1类指令共4条,其功能是将操作数指定单元内容减1。

DECA ;A-1→A,A中内容减1 DECRn;Rn-1→Rn,Rn中内容减1 DECdirect;(direct)-1→(direct),

直接地址中内容减1 DEC@Ri;(Ri)-1→(Ri),Ri间址中的内容减13.3.2算术运算类指令7.乘法指令

MULAB;(A)×(B)低8位→A

高8位→BA、B中都是无符号整数如果积大于255,OV=1,否则OV=0;进位标志总是清零CY=0。3.3.2算术运算类指令8.除法指令

DIVAB;(A)÷(B)商→A,余数→BA、B中都是无符号整数如果除数B为“0”,OV=1,否则OV=0;进位标志总是清零Cy=0。3.3.2算术运算类指令

此类指令共24条,包括或、与、异或、求反、清0、循环移位。其共同特点是当A作目的操作数(第一操作数)时,影响P位;带进位的移位指令影响CY位,其余都不影响PSW3.3.3逻辑运算及移位类指令1.逻辑与指令

ANLA,RnANLA,directANLA,#dataANLA,@RiANLdirect,AANLdirect,#data

“有0即0,全1为1”3.3.3逻辑运算及移位类指令2.逻辑或指令

ORLA,RnORLA,directORLA,#dataORLA,@RiORLdirect,AORLdirect,#data

“有1即1,全0为0”00000110∨)0110110101101111B=6FH3.3.3逻辑运算及移位类指令3.逻辑异或指令

XRLA,RnXRLA,directXRLA,#dataXRLA,@RiXRLdirect,AXRLdirect,#data

相异为1,相同为0”

3.3.3逻辑运算及移位类指令4.求反指令(1条)

CPL

A;对累加器A的内容各位求反,结果送回A中,影响P位

5.清0指令(1条)

CLR A;将累加器A的内容清0

注意:MCS-51的指令系统中对字节操作求反、清0,只有这2条指令,其他单元要求反、清0操作,则要用其他的指令或通过累加器A中进行。3.3.3逻辑运算及移位类指令3.3.3逻辑运算及移位类指令6.循环移位指令(4条)

RLARLCA

RRA

RRCA控制转移类指令共计17条无条件转移指令条件转移指令子程序调用及返回指令功能:有了丰富的控制转移类指令,就能很方便地实现程序的向前、向后跳转,并根据条件分支运行、循环运行、调用子程序等。3.3.4控制转移类指令

1.无条件转移指令①长转移指令

LJMPaddr16;

PC←addr16

本指令为三字节指令。指令功能是将16位值送入PC中,CPU转向地址为addr16的单元处取令执行。

②短转移指令

AJMP addr11;

PC←PC+2,PC10~0←addr10~0

短转移指令为双字节指令。是用指令提供的11位地址替换PC的低11位,所形成的新的PC值作为目的地址

.3.3.4控制转移类指令

③间接转移指令JMP@A+DPTR;PC←A+DPTR

该指令为1字节指令。目的地址由DPTR与A相加形成。④相对转移指令SJMPrel ;PC←PC+2+rel

本指令为双字节指令。SJMP指令可用来使程序原地踏步:HERE:SJMPHERE或SJMP$($表示PC的当前值)。rel=HERE-HERE-2=FEH,故机器码为80FE。

单片机没有可使CPU停止运行的指令。

3.3.4控制转移类指令

2.条件转移指令①累加器判零转移指令

JZ rel;PC←PC+2,若A=0,则PC←PC+relJNZrel;PC←PC+2,若A≠0,则PC←PC+rel②比较转移指令

CJNEA,direct,rel;PC←PC+3,若A≠(direct),则PC←PC+relCJNEA,#data,rel ;PC←PC+3,若A≠data,则PC←PC+relCJNERn,#data,rel ;PC←PC+3,若Rn≠data,则PC←PC+relCJNE@Ri,#data,rel;PC←PC+3,若(Ri)≠data,则PC←PC+rel3.3.4控制转移类指令

③循环转移指令

DJNZRn,rel;PC←PC+2,Rn←Rn-1,若Rn≠0,则PC←PC+relDJNZdirect,rel ;PC←PC+3,(direct)←(direct)-1,

若(direct)≠0,则PC←PC+rel3.3.4控制转移类指令

4.调用子程序指令(1)短调用指令

ACALLaddrllACALLaddr11;(PC)←(PC)+2,addr10~810001addr7~0(SP)←(SP)+1,((SP))←(PC7~0)(SP)←(SP)+1,((SP))←(PC15~8)(PC)10~0←addr11

(2)长调用指令

LCALLaddr16LCALLaddr16;(PC)←(PC)+3,12addr15~8addr7~0(SP)←(SP)+1,((SP))←(PC7~0)(SP)←(SP)+1,((SP))←(PC15~8)(PC)←addr15~0

3.3.4控制转移类指令

5.子程序的返回指令返回指令共有两条:一条是对应两条调用指令的子程序返回指令RET;另一条是对应从中断服务程序的返回指令RETI。

RET;(PC15~8←((SP)),(SP)←(SP)-1,

(PC7~0)←((SP)),(SP)←(SP)-1RETI;(PC15~8)←((SP)),(SP)←(SP)-1,

(PC7~0)←((SP)),(SP)←(SP)-1

3.3.4控制转移类指令

4.空操作指令

NOP;(PC)←(PC)+1,

空操作指令是一条单字节单周期指令。它控制CPU不做任何操作,仅仅是消耗这条指令执行所需要的一个机器周期的时间,不影响任何标志,故称为空操作指令。但由于执行一次该指令需要一个机器周期,所以常在程序中加上几条NOP指令用于设计延时程序,拼凑精确延时时间或产生程序等待等。

3.3.4控制转移类指令

在单片机硬件结构中还附有一个位处理机,又称布尔处理机,专门用于对一位数码(布尔变量)进行操作,称作位操作。累加器(借用进位标志CY)存储器(即位寻址区中的各位)完成位操作的运算器等。

3.3.5位操作指令

1.数据位传送指令

MOVC,bit MOVbit,C

MOVC,06H

;(20H).6→Cy 06H是内部RAM20H字节位6的位地址。

MOVP1.0,C

;Cy→P1.0

2.位变量修改指令

CLRC ;清“0”Cy CLRbit ;清“0”bit位

CPLC ;Cy求反

3.3.5位操作指令

1.数据位传送指令

MOVC,bit MOVbit,C

例写出指令,将00H位的值送01H位

MOVC,00HMOV 01H,C

2.位变量修改指令

CLRC ;清“0”Cy CLRbit ;清“0”bit位

CPLC ;Cy求反

3.3.5位操作指令

CPLbit ;bit位求反

SETBC ;置“1”Cy SETBbit ;置“1”bit位这组指令将操作数指出的位清“0”、求反、置“1”,不影响其它标志。例将P1口的P1.7置位,并清进位位的程序如下:SETBP1.7;(P1.7)←1CLRC;(CY)←0当(P1)=00001111B时,执行完上述指令后,(P1)=10001111B,(CY)=0。

3.3.5位操作指令

3.位逻辑指令位逻辑指令包含“与”ANL、“或”ORL、“非”CPL位逻辑运算操作,共有如下6条指令:ANLC,bit;(CY)←(CY)∧(bit),82bitANLC,/bit;(CY)←(CY)∧(bit),B0bitORLC,bit;(CY)←(CY)∨(bit),72bitORLC,/bit;(CY)←(CY)∨(bit),A0bit

CPLbit;(bit)←(bit),B2bitCPLC;(CY)←(C),B3

3.3.5位操作指令

4.位条件转移指令

JCrel;PC←PC+2,若C=1则PC←PC+relJNCrel;PC←PC+2,若C≠1则PC←PC+relJBbit,rel;PC←PC+2,若(bit)=1则

PC←PC+relJNB bit,rel;PC←PC+2,若(bit)≠1则

PC←PC+relJBC bit,rel;PC←PC+3,若(bit)=1则

PC←PC+rel且(bit)←0

3.3.5位操作指令

3.3.6伪指令

前面所学的指令都会使计算机进行一定的操作,都有与之对应的机器码。除此之外,单片机还提供了一些注释性指令,这些指令,仅在汇编时向汇编程序提供信息,使其准确而顺利地完成汇编任务。这种指令没有相应的机器码,因而不会被CPU所执行,故称为伪指令。

1.赋值指令常量名EQU表达式

AA EQU03HBB EQU AA*32.起始指令

ORG addr163.

3.结束指令END该指令用于源程序末尾,表示程序的结束。

4.字节定义指令

标号:DB该指令表示以标号为起始地址,依次存放数据表中的字节数据,各数据间用逗号分开

3.3.6伪指令5.字定义指令

标号:DW该指令表示以标号为起始地址,依次存放数据表中的字数据。

6.位定义指令

标号

BIT 位该指令的作用类似EQU指令,不过定义的是位。

3.3.6伪指令主要内容4.1汇编语言程序设计概述4.2汇编语言程序设计步骤4.3汇编语言程序设计第四章MCS-51汇编语言程序设计4.1汇编语言程序设计概述汇编语言程序:用汇编语言编写的、完成特定功能的指令序列

汇编程序:能将汇编语言源程序转换成机器语言目标程序的系统软件。4.1汇编语言程序设计概述汇编语言程序到机器语言程序的转换过程称为汇编。1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。2.机器汇编:用汇编程序进行汇编。4.1汇编语言程序设计概述汇编源程序经汇编程序汇编得到机器语言程序4.1汇编语言程序设计概述汇编的主要任务:1)确定程序中每条汇编语言指令的指令机器码。2)确定每条指令在存储器中的存放地址。3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST)。4.1汇编语言程序设计概述一、汇编语言语句的种类和格式1.指令性语句:

指令系统中的全部指令,每条指令有对应的机器代码。2.伪指令:

汇编控制指令,仅提供汇编信息,没有对应的机器代码。4.1汇编语言程序设计概述MCS-51的汇编语言的四分段格式如下:标号字段操作码字段操作数字段注释字段规则:(1)标号字段和操作字码段之间要有冒号“:”相隔;(2)操作码字段和操作数字段间的分界符是空格;(3)双操作数之间用逗号相隔;(4)操作数字段和注释字段之间的分界符用分号“;”相隔。其中,操作码字段为必选项,其余各段为任选项。4.1汇编语言程序设计概述下面是一段汇编语言程序的四分段书写格式例:把片外存储器2200H单元中的数送入片内70H单元中。标号域操作码域操作数域注释域BEGIN:MOVDPTR,#2200H;DPTR)=2200HMOVR0,#70H;(R0)=70HMOVXA,@DPTR;(A)=((DPTR)MOV@R0,A;((R0))=(A)HERE:SJMPHERE4.1汇编语言程序设计概述基本语法规则:1.标号字段是语句所在地址的标志符号(1)标号后边必须跟以冒号“:”(2)由1~8个ASCII字符组成(3)同一标号在一个程序中只能定义一次(4)不能使用汇编语言已经定义的符号作为标号4.1汇编语言程序设计概述2.操作码字段

是汇编语言指令中唯一不能空缺的部分。汇编程序就是根据这一字段来生成机器代码的。3.操作数字段通常有单操作数、双操作数和无操作数三种情况。如果是双操作数,则操作数之间,要以逗号隔开。4.1汇编语言程序设计概述(1)十六进制、二进制和十进制形式的操作数表示。(2)工作寄存器和特殊功能寄存器的表示采用工作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。4.注释字段必须以分号“;”开头,换行书写,但必须注意也要以分号“;”开头。4.1汇编语言程序设计概述二、伪指令

常用伪指令及其功能:1.ORG—起始地址指令:指明程序和数据块起始地址。指令地址机器码 源程序

ORG 2000H 2000H7830 MAIN:MOVR0,#30H2002HE6 MOVA,@R0… ORG3000H3000H23 DB23H,100,‘A’4.1汇编语言程序设计概述2.DB

—在程序存储器的连续单元中定义字节数据。

例:DB12H,100,‘A’3.DW—在程序存储器的连续单元中定义字数据。

例:DW1234H,5678H4.EQU—等值。为标号或标识符赋值。

X1 EQU2000H

X2 EQU0FH

… 5.END—结束汇编指令。4.2汇编语言程序设计步骤1.分析问题,确定算法2.根据算法,画出程序流程图3.分配内存工作区及有关端口地址4.编写程序养成在程序的适当位置上加上注释的好习惯。5.上机调试编写完毕的程序,必须“汇编”成机器代码,才能调试和运行,调试与硬件有关程序还要借助于仿真开发工具并与硬件连接。4.3汇编语言程序设计常采用以下几种基本结构:顺序结构、分支结构和循环结构,再加上广泛使用的子程序和中断服务子程序。

1.顺序结构

2.分支结构程序中含有转移指令,有分无条件分支、有条件分支。

3.循环结构

4.子程序4.3汇编语言程序设计一、顺序结构也称直线程序,程序走向只有一条路径。例双字节变补程序(设数据在R4R5中):MOV A,R5;取低字节CPL AADD A,#1;低字节变补MOV R5,AMOV A,R4;取高字节CPL AADDCA,#0 ;高字节变补MOV R4,A4.3汇编语言程序设计例:将压缩式BCD码分解成为单字节BCD码。MOV R0,#40H ;设指针MOV A,@R0 ;取一个字节MOV R2,A ;暂存ANL A,#0FH ;清0高半字节INC R0MOV @R0,A ;保存数据个位MOV A,R2SWAPA ;十位换到低半字节ANL A,#0FHINC R0MOV @R0,A ;保存数据十位4.3汇编语言程序设计二、分支结构

由条件转移指令构成程序判断框部分,形成程序分支结构。1、单重分支程序一个判断决策框,程序有两条出路。条件满足?N影响条件Y处理段4.3汇编语言程序设计例求R2中补码绝对值,正数不变,负数变补。

MOVA,R2 JNBACC.7,NEXT;为正数?

CPLA ;负数变补

INCA MOVR2,ANEXT:SJMPNEXT

;结束4.3汇编语言程序设计2、多重分支程序

多次使用条件转移指令,形成两个以上判断框。指令系统提供了非常有用的两种多分支选择指令:

间接转移指令:JMP@A+DPTR;

比较转移指令:CJNEA,direct,rel;

CJNEA,#data,rel;

CJNERn,#data,rel;

CJNE@Ri,#data,rel;4.3汇编语言程序设计例求符号函数Y=SGN(X)+1当X>0SGN(X)=0当X=0-1当X<04.3汇编语言程序设计SYMB:MOVA,40H ;取X JZ STOR ;X=0,Y=X JB ACC7,MINUS;X<0 MOVA,#1 ;X>0,Y=+1 SJMPSTORMINUS:MOVA,#0FFH;X<0,Y=-1STOR:MOV41H,A ;保存Y RET4.3汇编语言程序设计三、循环程序

包含多次重复执行的程序段,循环结构使程序紧凑。

循环程序的构成1.循环初始化完成循环前的的准备工作。如:清结果单元、设指针、设循环控制变量初值等。循环控制?循环工作循环结束循环初始化YN4.3汇编语言程序设计2.循环处理

循环程序结构的核心部分,完成实际的处理工作,是需反复循环执行的部分,故又称循环体。这部分程序的内容,取决于实际处理问题的本身。3.循环控制

在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件,就结束循环程序的执行。循环结束控制方法分为循环计数控制法和条件控制法。4.3汇编语言程序设计4.循环结束对循环程序执行的结果进行分析、处理和存放。4.3汇编语言程序设计计数循环结构

设循环计数器,控制循环次数。正计数和倒计数两种方式。图4-8是计数循环控制结构。

例:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。4.3汇编语言程序设计条件控制结构:设定循环结束标志实现循环控制。图4-9是条件控制结构。例:找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。4.3汇编语言程序设计START:MOV DPTR,#LIST;数表首地址

MOV B,#127;预置最小值NEXT:MOVXA,@DPTR ;取数

INC DPTR ;修改指针

CJNEA,#-1,NEXT1;是否为表结尾?

SJMPDONE ;循环结束NEXT1:CJNEA,B,NEXT2 ;比较NEXT2:JNC NEXT MOV B,A ;保存较小值

SJMPNEXTDONE:SJMPDONE4.3汇编语言程序设计例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。单重循环

简单循环结构:循环体中不套循环。4.3汇编语言程序设计SUM:MOV R0,#42H;设指针

MOV A,@R0 MOV R2,A ;循环

温馨提示

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

评论

0/150

提交评论