




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3章章 汇编语言及其程序设计汇编语言及其程序设计3.1 汇编语言及其指令格式汇编语言及其指令格式3.2 寻址方式寻址方式3.3 单片机汇编语言指令体系单片机汇编语言指令体系3.4 汇编语言及程序设计汇编语言及程序设计3.5 基本程序设计方法基本程序设计方法3.6 程序设计举例程序设计举例3.1 汇编语言及其指令格式汇编语言及其指令格式 机器语言汇编语言74H 09HMOV A,09H 汇编人工汇编机器汇编机器语言汇编语言返回本章 指令与指令系统 MCS-51的指令系统分为: (1)数据传送类(29条) (2)算术运算类(24条) (3)逻辑运算类(24条) (4)控制转移类(17条) (5
2、)位操作类(17条) 共111条指令例如:MOV P1,0FFH源操作数操作码目的操作数 在在MCS-51指令中,一般指令主要由指令中,一般指令主要由操作码、目的操作数、源操作数组成。操作码、目的操作数、源操作数组成。(1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。(2)目的操作数指定操作结果存放的地址。(3)源操作数指明操作的对象或者是操作数所在的地址。指令格式指令格式LOOP:MOV A,10H ;(A) 10H 标号注释标号: 操作码操作码 目的操作数目的操作数 ,源操作数,源操作数 ;注释(1)Ri和Rn(2)#data(3)#data16(4)rel(5)ad
3、dr16(6)addr11(7) direct(8)bit(9)(10)(X)(11)(X)(12)3.2 寻址方式寻址方式 寻找操作数所在单元的地址称之为 寻址 。 寻址方式的多少是计算机功能强弱的重要标志。 寻址方式分类寻址方式分类 3.2.1 立即寻址立即寻址 3.2.2 直接寻址直接寻址 3.2.3 寄存器寻址寄存器寻址 3.2.4 寄存器间接寻址寄存器间接寻址 3.2.5 变址寻址变址寻址 3.2.6 相对寻址相对寻址 3.2.7 位寻址位寻址返回本章 指令中直接给出操作数的寻址方式。例如:MOV P1,# 0FFH MOV DPTR,# 3400H MOV 30H,# 40H; 上
4、述三条指令执行完后,寄存器P1中数据为立即数据FFH,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。返回本节A片内RAM30H34H 指令中直接给出操作数地址的寻址方式。例如:MOV A,30H;(A)(30H) 30H为直接给出的内部RAM的地址34H34H返回本节 能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。 例如: MOV PSW,#20H;(PSW)20H PSW为直接寻址寄存器的符号地址 MOV A,40H;(A)(40H) 40H为直接给出的内部RAM的地址MOV D0H,#20HAR030H 以通用寄存器的内容为操作数的寻址方式。 通用寄存器指A、
5、B 、DPTR、C以及R0R7 。例如: MOV A ,R0 30H30H返回本节 看这个问题,要求从30H单元开始,取20个数,分别送入A累加器 MOV A,30H MOV A,31H MOV R7,#20 MOV R0,#30HLOOP:MOV A,R0 ; (A) (R0) INC R0 DJNZ R7,LOOP MOV A,R0 执行示意图片内RAMR034HA30H34H30H 寄存器间接寻址:以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。 间接寻址的存储器空间包括内部数据RAM和外部数据RAM。 能用于寄存器间接寻址的寄存器有R0,R1,DPTR ,SP。SP仅用于堆栈操
6、作。返回本节 变址寻址:本指令是要在ROM的一个地址单元中找出数据。 单元地址: (DPTR)+(A) (PC)+(A) 变址寻址只有读操作而无写操作,在指令符号上采用 MOVC 的形式,例如: MOVC A,A+DPTR;(A)((A)+(DPTR)) MOVC A,A+PC ;(A)((A)+(PC)) 返回本节 相对寻址用于修改PC值,主要用于实现程序的分支转移。 以当前当前程序计数器PC的内容为基础,加上指令给出的偏移量 rel,而构成实际操作数地址的寻址方式。 当前PC值源地址转移指令字节数。 偏移量rel为单字节有符号数,以补码形式表示,范围是128127相对寻址目的地址当前PC值
7、rel 源地址转移指令字节数rel200AH程序存储器SJMP08H2000H2001H2002H2000HPC当前PC2000H2(2002H)200AHPC2001HPC2002HPCrel=08H例如 SJMP 08H ;(PC)(PC)+2+08H 返回本节 位寻址其实是一种直接寻址方式,不过其地址是位地址。 位寻址只能对有位地址的单元作位寻址操作。 例如:SETB 10H ;将位地址为10H的位置1 22H单元的D0位的位地址为10H,若22H单元中存放着数据40H执行上述指令后(22H)=41H。 又如:MOV 32H,C ;(32H)(CY) SETB PSW.3 返回本节3.3
8、 单片机汇编语言指令体系单片机汇编语言指令体系3.3.1 数据传送类指令数据传送类指令3.3.2 算术运算类指令算术运算类指令3.3.3 逻辑运算与移位类指令逻辑运算与移位类指令3.3.4 控制转移类指令控制转移类指令3.3.5 位操作指令位操作指令返回本章返回本章3.3.1 数据传送类指令 数据传送类指令共29条 指令执行后,源操作数不变,目的操作数被源操作数取代。 数据传送类指令用到的助记符有 MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP 数据传送类指令不影响标志位CY、AC、OV但可能影响奇偶标志P返回本节直接地址direct累加器A直接地址direct间接地
9、址Ri寄存器Rn立即数#data寄存器DPTR图3-6 MCS-51单片机片内数据传送图一、内部数据存储器间数据传送指令MOV A,directMOV A,#dataMOV A,RnMOV A,RiMOV Rn,AMOV Rn,directMOV Rn,#dataMOV direct,AMOV direct,RiMOV direct,#dataMOV direct,RnMOV direct2,direct1MOV Ri,directMOV Ri,#dataMOV Ri,AMOV DPTR,#Data1以以A为目的操作数为目的操作数MOV A,Rn ;(A)(Rn)MOV A,direct ;(
10、A)(direct)MOV A,Ri ;(A)(Ri)MOV A,#data ;(A) #data一、内部数据存储器间数据传送指令2以以Rn为目的操作数为目的操作数MOV Rn,A ;(Rn) (A)MOV Rn,direct ;(Rn) (direct)MOV Rn,#data ;(Rn) #data一、内部数据存储器间数据传送指令3以直接地址为目的操作数以直接地址为目的操作数MOV direct,A ; (direct) (A)MOV direct,Rn ; (direct) (Rn) MOV direct2,direct1 ; (direct2)(direct1)MOV direct,R
11、i ; (direct) (Ri)MOV direct,#data ; (direct) #data一、内部数据存储器间数据传送指令4以间接地址为目的操作数以间接地址为目的操作数MOV Ri,A ;(Ri) (A)MOV Ri,direct ;(Ri) (direct)MOV Ri,#data ;(Ri) #data例如:设(30H)=6FH,R1=40H,执行:MOV R1,30H结果:(40H)=6FH。一、内部数据存储器间数据传送指令5以以DPTR为目的操作数为目的操作数MOV DPTR,#data16 ;(DPTR) #data16例如: 执行 MOV DPTR,#2000H 结果:(
12、DPTR)= 2000H。 一、内部数据存储器间数据传送指令例:(30H)=40H,(40H)=10H,(P1)=0CAH执行: MOV R0,#30H MOV A,R0 MOV R1,A MOV 30H,R1 MOV R1,P1 MOV P2,P1问: (30H)=? (40H)=? (P1)=? (P2)=? (R1)=? (R2)=? (A)=?二、访问外部数据存储器的指令二、访问外部数据存储器的指令 访问外部存储器必须通过累加器A 采用间接寻址方式MOVX A,DPTR;(A) (DPTR)MOVX DPTR,A;(DPTR) (A)MOVX A,Ri ;(A) (P2Ri)MOVX
13、Ri,A ;(P2Ri) (A)例: 已知外部RAM (0203H)=0FFH,执行:MOV DPTR,#0203HMOVX A,DPTRMOV 30H,AMOV A,#00HMOVX DPTR,A问:(1)程序功能 (2)(DPTR)=? (A)=? (30H)=? MOV P2,#02HMOV R0,#03HMOVX A,R0MOV 30H,AMOV A,#00HMOVX R0,A 程序程序2三、访问程序存储器的指令三、访问程序存储器的指令MOVC A,A+DPTR;(A) (A)+(DPTR))MOVC A,A+PC;(A) (A)+(当前PC)例如:已知(A)=30H,(DPTR)=3
14、000H, 程序存储器单元(3030H)=50H,执行: MOVC A, A+DPTR则:(A)=50H。例:在外部ROMEPROM中从2000H单元开始依次存放09的平方值:0,1,4,81,要求依据累加器A的值(09)来查找对应的平方值。方法1 MOV DPTR,2000H MOV A,09H MOVC A,A+DPTR执行结果:(A)81, (DPTR)2000H012000H2001H2002H0212224外部ROM2009H8192方法2 MOV A,09H ADD A,0FH MOVC A,A+PC执行结果:(A)81,(PC)1FF1H74H09H24H0FH83H1FF0H0
15、12000H2001H2002H0212224外部ROMPC偏移量偏移量表首地址(表首地址(MOVC指令所在地址指令所在地址1)2009H8192偏移量2000H(1FF0H1) 0FH (A)=18H1FF1H当前PC四、数据交换类指令四、数据交换类指令l 字节交换XCH A,Rn ;(A) (Rn)XCH A ,direct ;(A) (direct)XCH A,Ri ;(A) (Ri)2 半字节交换XCHD A,Ri ; (A03 ) (Ri03)SWAP A ; (A03) (A47)例:(R0)=20H,(A)=3FH,(20H)=75H(1) 执行执行 XCH A,R0 ;(A)=
16、? XCHD A,R0;(A)=? SWAP A;(A)=? (2)执行程序段执行程序段 MOV A,20H XCH A,R0 MOV 20H, A SJMP$则(则(A)=? (R0)= ? (20H)=?五、堆栈操作类指令五、堆栈操作类指令 PUSH direct;(SP)(SP)+1, (SP)(direct) POP direct;(direct)(SP), (SP) (SP)1片内RAM50H40H11H10H50HSP30H执行PUSH指令指令 PUSH 40H 操作示意图片内RAM40H11H10HSP30H执行前50H执行前指令 POP 30H 操作示意图片内RAM40H11H
17、10H34HSP30H执行POP指令片内RAM30H11H10HSP40H34H34H例: 已知外部RAM (0203H)=0FFH,(DPTR)=1000H执行下面的程序,问(A)?,(DPTR)?。PUSH DPHPUSH DPLMOV DPTR,#0203HMOVX A,DPTRMOV 30H,AMOV A,#00HMOVX DPTR,APOP DPLPOP DPH【例例】将片内将片内RAM 30H单元与单元与40H单元中的内容互换。单元中的内容互换。方法1(直接地址传送法): MOV31H,30H MOV30H,40H MOV40H,31H SJMP$片内RAM40H11H10H34H
18、30H31H方法2(间接地址传送法): MOVR0,#40H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$方法3(字节交换传送法): MOVA,30H XCHA,40H MOV30H,A SJMP$方法4(堆栈传送法): PUSH30H PUSH40H POP30H POP40H SJMP$返回本节3.3.2 算术运算类指令1加法指令加法指令 ADD A,Rn ; (A) (A) +(Rn) ADD A,direct; (A) (A) +(direct) ADD A,Ri; (A) (A) +(Ri) ADD A,#data; (A) (A)
19、 + #data 这四条加法指令使累加器A可以和内部RAM的任何单元内容相加,也可和8位立即数相加。 参与运算的是两个8位二进制数,可以看作带符号数,也可看作无符号数。 加法指令影响标志位CY,OV,AC,P 对无符号数CY=1表示溢出,对有符号数OV=1表示溢出2带进位加指令带进位加指令ADDC A,Rn;(A) (A) + (Rn) + (C)ADDC A,direct ;(A) (A) + (Rn) +(direct)+ (C)ADDC A,Ri ;(A) (A) + (Ri) + (C)ADDC A,#data ;(A) (A) + #data + (C)用于多字节的加法中用于多字节的
20、加法中ADD A,Rn;(A) (A) +(Rn)ADD A,direct ;(A) (A) +(direct)ADD A,Ri;(A) (A) +(Ri)ADD A,#data ;(A) (A) + #data3带借位减指令带借位减指令SUBB A,Rn;(A)(A)-(Rn)-(C)SUBB A,direct ; (A)(A)-(direct)-(C)SUBB A,Ri; (A)(A) -((Ri))-(C)SUBB A,#data ; (A)(A) -#data -(C) 例如,设(A)=39H,(R0)=20H,(20H)=32H,(C)=1执行指令: SUBB ,R0结果 (A)=0
21、6H。4乘法指令乘法指令 MUL AB ;(B)(A) (A)(B)A和和B中各存放一个中各存放一个8位无符号数,指令执行后,位无符号数,指令执行后,16位乘位乘积的高积的高8位在位在B中,低中,低8位存位存A中。中。若乘积大于若乘积大于FFH (255),则溢出标志则溢出标志OV=1乘法指令执行后乘法指令执行后CY=0乘法指令本身只能进行乘法指令本身只能进行8位数的乘法运算。位数的乘法运算。例如,(A)=30H (48) , (B)=60H(96),执行: MUL AB 结果(BA)=1200H(4608)A=00H,B=12H。 5除法指令除法指令DIV AB;(A)(B)商在A中,余数在
22、B中 A和和B中各存放一个中各存放一个8位无符号数,位无符号数,A放被除数,放被除数,B放除数。放除数。指令执行后,指令执行后, A中存放商,中存放商,B中存入余数中存入余数;CY=0,OV=0若若B=00H,则指令执行后,则指令执行后OV=1,A与与B不变不变。 例如,A=30H,B=07H,执行 :DIV AB 结果:A=06H,B=06H。6加加1指令指令INC A ;(A) (A) + 1INC Rn ;(Rn) (Rn) + 1INC direct ;(direct) (direct)+ 1INC Ri ;(Ri)(Ri)+ 1INC DPTR ;(DPTR) (DPTR) + 1例
23、如:(30H)=22H,执行 INC 30H结果:(30H)=23H。7减减1指令指令DEC A ; (A) (A) 1DEC Rn ; (Rn) (Rn) 1 DEC direct ;(direct) (direct) 1DEC Ri ;(Ri)(Ri)1例如:(R0)=30H,(30H)=22H,执行: DEC R0结果:(30H)=21H。注意:加(减注意:加(减)1指令执行后不影响状态标志位指令执行后不影响状态标志位8十进制调整指令十进制调整指令DA A ;把A中按二进制相加的结果调整成 按BCD码相加的结果(1)十进制调整的必要性二进制的加法运算不能完全正确适用于十进制的加法运算(2
24、)出错原因及调整方法8. 十进制调整指令十进制调整指令(3)十进制调整的方法v累加器低4位大于9或辅助进位(AC)为1,则进行低4位加6修正: (A) (A)+06Hv累加器高4位大于9或进位标志位(CY)为1,则进行高4位加6修正: (A) (A)+60Hv累加器高4位为9,低4位大于9,则进行高低4位加6修正: (A) (A)+66H例:双字节压缩BCD码加法 (R5R4)+(R3R2) (R6R5R4)MOV A,R4ADD A,R2DA AMOV R4,AMOV A,R5ADDC A,R3DA AMOV R5,AMOV A,#00HADDC A,#00HMOV R6,A (R5)(R4
25、)+ (R3)(R2)(R6)(R5)(R4)返回本节3.3.3 逻辑运算与移位类指令1“与与”操作指令操作指令 ANL direct,AANL direct,#dataANL A , direct ANL A ,#dataANL A ,RiANL A ,Rn2“或或”操作指令操作指令ORL direct,AORL direct,#dataORL A , direct ORL A ,#dataORL A ,RiORL A ,Rn3“异或异或”操作指令操作指令XRL direct,AXRL direct,#dataXRL A , direct XRL A ,#dataXRL A ,RiXRL A
26、 ,Rn 上述与、或、异或三种逻辑运算都是按位进行的,而且不影响标志位CY、OV、AC ANL运算常用来屏蔽某些不用位;ORL运算可对某些位进行置位例:将累加器A的内容送P1口的低5位,传送时要求绝对不影响P1口的高3位ANL A,#00011111BANL P1,#11100000BORL P1,A4累加器累加器A清零与取反指令清零与取反指令CLR ACPL AA0A7CYCY5移位指令移位指令RL A ;(An+1) (An), (A0) (A7)RLC A ;(An+1) (An), (CY) (A7) (A0) (CY) RR A ;(An) (An+1), (A7) (A0)RRC
27、A ;(An) (An+1), (CY) (A0) (A7) (CY) CYCY例:已知(20H)X7 X6 X5 X4 X3 X2X1 X0 (21H)Y7 Y6 Y5 Y4Y3 Y2Y1Y0 执行下段程序 MOV 30H,20H ANL 30H,00011111B MOV A,21H SWAP A RL A ANL A,11100000B ORL 30H,A问:(30H)返回本节3.3.4 控制转移类指令控制转移类指令 1无条件转移指令无条件转移指令 LJMPaddr16;(;(PC) addr16 AJMPaddr11;(;( PC) (PC) + 2 (PC)100 addr11 SJ
28、MPrel;(;(PC )(PC) + 2 + rel JMP A+DPTR ;(;(PC) ( A) + (DPTR) 长转移指令,三字节指令,提供16位目标地址addr16,转移范围64K绝对转移指令,双字节指令,转移范围是和当前PC在同一个2K范围内短转移指令,双字节指令,目的地址=源地址+2+rel 间接长转移指令,单字节指令,可实现多分支的选择转移 ORG 0000H MAIN MOV A, #20H ORG 0080HMAIN: MOV A, #30H 2条件转移指令条件转移指令 JZ rel; 若若A=0则转移:则转移: (PC)(PC)+2+rel, 否则程序顺序执行否则程序顺
29、序执行 (PC)(PC)+2 JNZ rel; 若若A0则转移:则转移: (PC)(PC)+2+rel , 否则程序顺序执行否则程序顺序执行 例:将外部RAM的一个数据块传送到内部RAM,两者首地址分别为DAT1和DAT2,遇到传送的数据为零时为止。MOV DPTR,#DAT1MOV R1,#DAT2LOOP:MOVX A,DPTRMOV R1,AINC DPTRINC R1 CJNEA, #data, rel CJNEA, direct, rel CJNERi, #data, rel CJNERn, #data, rel CJNE目的操作数目的操作数, 源操作数源操作数, rel 若目的操作
30、数=源操作数, 则(PC)(PC)+3,顺序执行顺序执行 若目的操作数源操作数, 则(PC)(PC)+3+rel; CY=0, 程序转移程序转移 若目的操作数源操作数, 则(PC)(PC)+3+rel; CY=1 程序转移程序转移 DJNZ direct, rel; (direct) (direct) 1 若(direct) =0,则(PC)(PC)+3 否则(PC)(PC)+3+rel DJNZ Rn, rel; (Rn) (Rn) 1 若 (Rn) =0,则(PC)(PC)+2 否则(PC)(PC)+2+rel例:将内部RAM中从DATA单元开始的10个无符号数相加,结果送SUM单元保存M
31、OV R0,#0AHMOV R1,#DATACLR ALOOP: ADD A,R1INC R1MOV SUM,A3子程序调用及返回指令子程序调用及返回指令LCALL addr16 ;(PC)(PC)+3, (SP) (SP)+1, (SP)(PC70 ) ; (SP)(SP)+1,(SP)(PC158 ) ; (PC) addr16 ACALL addr11; (PC)(PC)+2, (SP)(SP)+1,(SP)(PC70 ) ; (SP)(SP)+1,(SP)(PC158 ) ; (PC 100 ) addr11RET(PC158 ) (SP),(SP)(SP)-1 ;(PC70 ) (S
32、P),(SP)(SP)-1 ; RETI( (PC158 )(SP),(SP)(SP)-1 ;(PC70 ) (SP),(SP)(SP)-1 ; 子程序的调用过程MOV SP,#50HACALL DIMSDIMS: MOV R7,#64HDELAY: DJNZ R7,DELAY RET NOP ;(;(PC) ( PC)+1 4. 空操作指令空操作指令返回本节 1位数据传送指令位数据传送指令 MOVC,bit;C(bit) MOV bit,C;(bit)C位地址的表示方法有以下四种: 直接位地址表示方式,如:D5H 点操作符表示方式,如 PSW.5 位名称表示方法,如 F0 用户定义名表示方式
33、。2位置位指令位置位指令 CLRC;(CY)0 CLRbit;(;(bit)0 SETB C; (CY)1 SETB bit; (bit)13位逻辑运算指令位逻辑运算指令ANLC,bit ;(CY)(CY)(bit)ANLC,/bit; (CY)(CY)(bit) ORLC,bit ; (CY)(CY) (bit)ORLC,/bit;(CY)(CY) (bit)CPL C ; (CY)(CY) CPL bit ; (bit)(bit) 4位条件转移指令位条件转移指令 1)判布尔累加器条件转移指令)判布尔累加器条件转移指令JC rel若(CY)=1,则转移:(PC)(PC)+2+rel; (CY
34、)=0, 则程序顺序执行JNC rel 若(CY)=0,则转移(PC)(PC)+2+rel; (CY)=1, 则程序顺序执2)判位变量条件转移指令)判位变量条件转移指令JB bit,rel ; 若(bit)=1,则转移(PC)(PC)+3+rel; (bit)=0, 则程序顺序执行JNB bit,rel ; 若(bit)=0,则转移(PC)(PC)+3+rel; (bit)=1, 则程序顺序执行 JBC bit,rel ; 若(bit)=1,则(PC)(PC)+3+rel,(bit)0; (bit)=0, 则程序顺序执行例例: :编程序用以实现图示逻辑功能编程序用以实现图示逻辑功能 MOV C
35、,P2.2ORL C, TF0ANL C,P1.1MOV F0,CMOV C,IE1 ORL C,/20H.0ANL C,F0ANL C,/08H MOV P3.3,C 例:(20H)X7 X6 X5 X4 X3 X2X1 X0,执行 MOV C,00H RLC A MOV C,01H RLC A MOV C,02H RLC A MOV C,03H RLC A ANL A,0FH MOV 20H,A 问: (20H)=_3.4 汇编语言及程序设计汇编语言及程序设计3.4.1程序设计语言程序设计语言1机器语言机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言。2汇编语言汇
36、编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述。3高级语言高级语言:高级语言是接近于人的自然语言,面向过程而独立于机器的通用语言。 3.4.2 汇编语言语句结构汇编语言语句结构汇编语言的指令类型汇编语言的指令类型(1)基本指令(2)伪指令汇编语言的语句(指令)格式标号:操作码操作数; 注释START:MOV A,30H; A(30H)(1)ORG:设置目标程序起始地址 格式:标号: ORG 16位地址 ORG 2000HSTART: MOV A,#7FH3.4.3 伪指令伪指令200AH程序存储器74H7FH2000H2001H2002H(2)END:
37、汇编结束 格式:标号: END(3)DB:定义数据字节 格式:标号: DB 项或项表 一个字节的常数或常数表 ORG 2000HTAB1: DB 30H,8AH,7FH,49H DB 5, A, BCD2000H30H2001H8AH2002H7FH2003H49H2004H35H2005H41H2006H42H2007H43H2008H44H2009H(4)DW:定义数据字 格式:标号: DW 项或项表两个字节的常数或常数表 ORG 1500HTAB2: DW 1234H,0080H,1500H12H1501H34H1502H00H1503H80H(5)DS:预留存储空间 格式:标号: DS
38、 表达式 ORG 1500H DS 20HTAB2: DW 1234H,0080H1500H1501H1502H1503H151FH1520H12H1521H34H1522H00H1523H80H(6) EQU:赋值 格式:标号: EQU 项 给变量标号赋予一个确定的数值。 TAB: EQU 1000H TAB1: EQU TAB(7)BIT:位地址赋值 格式:标号: BIT 位地址 AI : BIT P1.0常数,地址标号或表达式返回本章3.5 汇编语言程序设计方法汇编语言程序设计方法1分析问题2确定算法3设计程序流程图4分配地址(主要是分配内存单元)5编写汇编语言源程序6调试程序3.5.1
39、 程序设计一般步骤程序设计一般步骤3.5.2 程序基本结构程序基本结构(1)顺序程序)顺序程序【例3.1】 将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元31H(高位),32H(低位)中。程序流程如图3-1所示。结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始图3-1 拆字程序流程图ORG 2000HMOV A,30H;取值ANLA,#0FH;取低4位ADDA,#30H;转换成ASCII码MOV 32H,A;保存结果MOV A,30H;取值SWAPA;高4位与低4位互换ANLA,#0FH;取低4位(原来的高4位)ADDA
40、,#30H;转换成ASCII码MOV 31H,A;保存结果 SJMP $ END (2 2)分支程序)分支程序1)分支程序的基本形式)分支程序的基本形式分支程序有三种基本形式,如下图所示。分支程序结构流程图分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。2)分支程序设计举例)分支程序设计举例【例3.2】 设X存在30H单元中,根据下式 1X0Y = 0X=0 -1XMAX修改循环参数搜索完否?返回NYMAX 数N例3流程图参考程序参考程序: ORG 2000HLOOP: MOV R0,#BLOCK MOV R1,
41、LEN MOV MAX,#00HLOOP1: MOV A,MAX CLR C SUBB A,R0 JNC NEXT MOV MAX,R0 ;(cy)=1, MAX0Y= 100 X=0 求出Y值,并将Y值放回原处。 X X0解:数据块中的十个数都需要进行符号判断并作相应处理,可把一部分工作交给子程序完成,主程序只负责读取数据、调用判断处理子程序、保存数据、循环控制工作。 ORG1000H MOVR0,#10 MOVR1,#30HSTART:MOVA,R1;取数;取数 LCALLDISPOSE;调用判断、处理子程序;调用判断、处理子程序SAVE: MOVR1,A;保存数据;保存数据 INCR1;
42、修改地址指针,指向下一个地址;修改地址指针,指向下一个地址 DJNZR0,START ;数据未处理完继续;数据未处理完继续 SJMP;暂停;暂停 ORG2000HDISPOSE: JBACC.7,NEG ;若为负数,转;若为负数,转NEG JZZER0;若为零,转ZER0 ADD A,#02H;若为正数,求X+2 AJMP BACK;返回ZER0:MOV A,#64H ;数据为零,Y=100 AJMP BACK;返回NEG: DECA CPLA;数据为负求 XBACK:RET ;返回返回本章3.6 程序设计举例程序设计举例查表程序查表程序:预先将某一数据表格存放在ROM中,程序中根据自变量X利
43、用查表指令读出与其对应的数据。查表指令:MOVC A ,A+DPTRMOVC A,A+PC在在LED显示和键盘处理程序中将会用到。显示和键盘处理程序中将会用到。3.6.1 查表程序设计查表程序设计1000H001001H111002H421003H931004H1641005H2551006H3661007H4971008H6481009H819y=x2地址X函数y的地址 = 1000H + xROM中的数据表表首地址MOV DPTR ,#1000HMOV A,#04HMOVC A,A+DPTR例:设有一巡回检测报警装置需对16路输入值进行比较,当某一路输入值超过该路的报警值时实现报警,编制查
44、表程序依据路数xi查得报警值yi程序入口:(R2)=路数xi程序出口:(R4R3)=对应xi的报警值yiTABY0高0TAB+1Y0低TAB+2Y1高1TAB+3Y1低TAB+4Y2高2TAB+5Y2低TAB+30Y15高15TAB+31Y15低报警值路数 Xi报警值yi高的地址 = TAB + 2*Xi报警值地址报警值yi低的地址 = TAB + 2*Xi +1利用DPTR做基地址查表(1)表格首地址送DPTR(2)查表项数送累加器A(3)执行查表指令: MOVC A, A+DPTR 查表结果回累加器A MOV DPTR ,#TAB MOV A, R2 ADD A,R2 MOV R4 , A
45、 MOVC A, A+DPTR XCH A,R4 INC A MOVC A, A+DPTR MOV R3,A RETTAB:DW 050FH .TABY0高0TAB+1Y0低TAB+2Y1高1TAB+3Y1低TAB+4Y2高2TAB+5Y2低TAB+30Y15高15TAB+31Y15低报警值yi高的地址= TAB + 2*XiMOVC A, A+PC报警值yi低的地址 = TAB + 2*Xi +1利用PC做基地址查表(1)查表项数送累加器A(2)累加器A加上表首偏移量偏移量表首地址偏移量表首地址PC当前值当前值(A)=项数+表首地址PC当前值(3)执行查表指令: MOVC A, A+PC 查
46、表结果回累加器AMOVC指令所在指令所在地址地址1EA MOV A, R22A ADD A,R2EC MOV R4 , A2407 ADD A,#07H83 MOVC A, A+PCCC XCH A,R404 INC A2402 ADD A,#02H83 MOVC A, A+PCFB MOV R3,A22 RET050F TAB:DW 050FH .83HCCH04H24H02H83HFBH22HTAB05H0TAB+10FHTAB+20EH1TAB+389H.TAB+306CH15TAB+31A0HPCTAB-1TAB-2TAB-3TAB-7例:设(R0)2FH,(R1)6,(A)01H,写
47、出执行这段程序后30H35H各单内容。 MOV DPTR,TABLELOOP:INC A INC R0 LCALL CAP DJNZ R1,LOOP HEAR:SJMP HEARCAP: PUSH A MOVC A,ADPTR MOV R0,A POP A RETTABLE:DB 00H,01H,04H,09H DB 16H,25H,36H,49H DB 64H,81H END 散转程序是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序。 常用的指令是JMP A+DPTR,该指令是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,形成散转
48、的目的地址。DPTRAPCA中内容为8位无符号数16位地址数3.6.2 散转程序设计散转程序设计JUMP1: MOV DPTR,JPTAB ;跳转表首送数据指针 MOV A,R7 ADD A,R7 ;2*(R7) JNC NOAD INC DPHNOAD: JMP A+DPTR ;转向形成的散转地址入口JPTAB: AJMP OPR0 ;直接转移地址表 AJMP OPR1 . AJMP OPRn例例:根据根据R7的内容,转向各自对应的操作的内容,转向各自对应的操作 程序程序 (R7= 0,转入转入OPR0;R7=i,转入转入OPRi; n=255)源程序:源程序: 指令周期指令周期DELAY:
49、 MOV R3, #( X )H 1个个T机器机器 DEL2: MOV R4,#( Y )H 1个个T机器机器 DEL1: NOP 1个个T机器机器 NOP 1个个T机器机器 DJNZ R4,DEL1 2 个个T机器机器 DJNZ R3,DEL2 2个个T机器机器 RET指令周期、机器周期指令周期、机器周期T机器机器与时钟周期与时钟周期T时钟时钟的关系:的关系: T机器机器=12T时钟时钟=12*1/fosc=1s (假设晶振频率(假设晶振频率fosc为为12M)延时时间的简化计算结果:延时时间的简化计算结果: (1+1+2) * X * Y若想延时若想延时100ms,只需修改计数初始值,即,
50、只需修改计数初始值,即 (1+1+2) *200 * 125s=100ms#200#1253.6.3 延时程序设计延时程序设计1S延时程序延时程序源程序:源程序:DELAY: MOV R2, #10 DEL3: MOV R3, #200DEL2: MOV R4,#125DEL1: NOP NOP DJNZ R4,DEL1 DJNZ R3,DEL2 DJNZ R2, DEL3 RET例5:编程实现P1口连接的8个LED显示方式如下:从P1.0到P1.7的顺序,依次点亮其连接的LED。 次数次数子程序实例引入:子程序实例引入: ORG 0000HSTART: MOV R2,#08H ; 设置循环次数设置循环次数 MOV A,#0FEH ; 送显示模式字送显示模式字NEXT: MOV P1,A ; 点亮二极管点亮二极管 ACALL DELAY RL A ; 左移一位,改变显示模式字左移一位,改变显示模式字 DJNZ R2,NEXT ; 循环次数减循环次数减1,不为零,继续点亮,不为零,继续点亮 SJMP START ; 下面一个二极管下面一个二极管
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州六盘水市六枝特区锦黔农旅发展(集团)有限责任公司招聘工作人员笔试历年参考题库附带答案详解
- 2025西安庆安制冷设备股份有限公司招聘(7人)笔试历年参考题库附带答案详解
- 2025内蒙古自治区农牧业科学院招聘48人模拟试卷及一套参考答案详解
- 2025福建福清市诚烨电子有限公司招聘5人笔试历年参考题库附带答案详解
- 2025福建新华发行集团招聘笔试历年参考题库附带答案详解
- 2025福建厦门市翔安保安有限公司招聘员18人笔试历年参考题库附带答案详解
- 2025福州市建筑大数据技术有限公司招聘4人笔试历年参考题库附带答案详解
- 2025广东深圳市优才人力资源有限公司招聘综合网格员(派遣至布吉街道)拟聘人员笔试历年参考题库附带答案详解
- 2025内蒙古包头中心区建设投资运营管理有限公司面向社会招聘2人笔试历年参考题库附带答案详解
- 2024-2025中国商飞公司秋季校园招聘笔试历年参考题库附带答案详解
- 高三运动会课件
- 法语幼儿教学课件1
- 钩针课件教学课件
- 淮阳豆门乡消防安全培训课件
- 海上风电场安全培训课件
- 2025版CSCO非小细胞肺癌诊疗指南解读
- 红星照耀中国第九章课件
- 建筑业绿色发展与节能减排
- 《统计分析与SPSS的应用(第7版)》课件全套 第1-12章 SPSS统计分析软件概述
- 青少年毒品预防教育-初中版
- 整改技术服务报价单
评论
0/150
提交评论