版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第四章第四章 汇编语言程序设计汇编语言程序设计 4-1 汇编语言程序设计基本概念汇编语言程序设计基本概念 4-2 汇编语言程序的基本结构形式汇编语言程序的基本结构形式汇编语言及汇编过程汇编语言及汇编过程一、汇编程序功能一、汇编程序功能 源程序源程序 (汇编指令程序)(汇编指令程序) 汇编汇编 目标程序目标程序(机器码指令程序)(机器码指令程序) 汇编指令与机器码指令有一一对应的关系。汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。汇编程序是一种翻译程序,将源程序翻译成目标程序。 二、汇编程序的汇编过程二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器
2、汇编。汇编有两种方法:手工汇编、机器汇编。 1 1、手工汇编:、手工汇编:第一次汇编:确定地址,翻译成各条机器码,字符标号第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出;原样写出;第二次汇编:标号代真,将字符标号用所计算出的具体第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。地址值或偏移量代换。 源程序源程序 目标程序目标程序 地址地址 ORG 1000HORG 1000H START START:MOV R0MOV R0,2FH 2FH MOV R2 MOV R2,#00H #00H MOV A MOV A,R0 R0 MOV R3 MOV R3,A A INC
3、 R3 INC R3 SJMP SJMP NEXT NEXT LOOP LOOP:INC R0 INC R0 CJNE R0 CJNE R0,#44H#44H,NEXTNEXT INC R2 INC R2 NEXT NEXT:DJNZ R3DJNZ R3,LOOPLOOP MOV MOV 2AH2AH,R2 R2 SJMP $ SJMP $ END END 第一次汇编第一次汇编第二次汇编第二次汇编1000 A82F1002 7A001004 E61005 FB1006 0B1007 80NEXT1009 08100A B644NEXT100D 0A100E DBLOOP1010 8A2A101
4、2 80FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE2 2、机器汇编、机器汇编两次扫描过程。两次扫描过程。第一次扫描:第一次扫描:检查语法错误,确定符号名字;检查语法错误,确定符号名字; 建立使用的全部符号名字表;建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。每一符号名字后跟一对应值(地址或数)。第二次扫描:第二次扫描:是在第一次扫描基础上,将符号地址转换成是在第一次扫描基础上,将符号地址转换成 地址(代真);地址(代真); 利用操作码表将助记符转换成相应的目标码。利用操作码表将助记符转换成相应的目标码。 4-1 汇编语言程序设计基本
5、概念汇编语言程序设计基本概念 一、MCS-51指令操作数说明1、语句格式标号:标号: 操作码操作码 操作数(目的操作数,源操作数)操作数(目的操作数,源操作数) ;注释;注释2、操作数对于立即数 #data(1)立即数188,可表示为 #10111100B、#0BCH、#188(2)MOV DPTR,# BLOCK;BLOCK为定义过的标号地址对于直接地址 direct(1)二进制、十进制、十六进制数,MOV A,30H(2)定义过的标号地址,AGAIN:SJMP AGAIN(3)表达式,如SUM+2,其中SUM为定义过的标号地址(4) SFR寄存器名,如SP、DPH、DPL等对于偏移量 re
6、l(1)可以是数值、标号地址、表达式(2)使用特殊符号“”,它代表本条转移指令所在的地址,如LJMP (死循环)(3)实际编程时,凡指令中用到地址(rel、 addr11 、addr16等)都可用标号地址代替实际地址,而地址的运算由汇编程序完成。二、常用伪指令汇编:将计算机不可直接识别的汇编语言源程序翻译成机器语 言的过程。分为计算机汇编和人工汇编两种。汇编程序:具有完成汇编功能的程序。目标程序:汇编语言源程序经过汇编得到的机器语言程序。伪指令:提供汇编用控制信息的指令,只能被汇编程序所识别, 不是单片机的CPU可执行的指令。ORGORG addr16addr16ASM51ASM51程序中一定
7、要写!程序中一定要写!规定编译后的机器代码存放的规定编译后的机器代码存放的起始位置。起始位置。END END ASM51ASM51程序中一定要写!程序中一定要写!表示翻译到此表示翻译到此结束结束,其后的任何内容不予理睬。,其后的任何内容不予理睬。符号名称符号名称 EQUEQU 表达式表达式将表达式的值赋予将表达式的值赋予符号名称符号名称。程序中凡出现该程序中凡出现该符号名称符号名称就就等同于等同于该该表达式。表达式。$ $ “当前当前PCPC值值”也叫也叫位置计数器位置计数器 代表正在执行的指令所在位置。代表正在执行的指令所在位置。符号名称符号名称 BITBIT 位地址位地址将位地址的值赋予符
8、号名称。将位地址的值赋予符号名称。程序中凡出现该程序中凡出现该符号名称符号名称就就代表代表该该位地址。位地址。DWDW 双字节数据双字节数据 或双字节数据组或双字节数据组 将将双字节数据双字节数据 或双字节数据组或双字节数据组 顺序存放在顺序存放在此此后的后的存储单元中存储单元中。占据相应存储空间。占据相应存储空间。DBDB 8 8位数据位数据 或或8 8位数据组位数据组 将将8 8位数据位数据 或或8 8位数据组位数据组 顺序存放在顺序存放在此后的此后的存存储单元中。储单元中。占相应数量的存储空间。占相应数量的存储空间。三、汇编语言程序的结构1、程序设计的基本步骤一般步骤为:(1)分析题意,
9、明确要求;(2)建立思路,确定算法;(3)编制框图,绘出流程;(4)编写程序,上机调试; 显然,算法和流程是至关重要的。程序结构有简单顺序、分支、循环和子程序等几种基本形式。2、画流程图画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下: 椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。指向线:流程线,表示程序执行的流向。圆 圈:连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示。程序编写做到:程序编写做到:占用存储空间少;占用存储空间少;运行时间短;运行时间短;程序
10、的编制、调试及排错所需时间短;结构清晰,易读、易于移植。程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。 按结构化程序结构化程序设计思想,任何复杂程序都可由顺序结构、顺序结构、分支结构、分支结构、循环结构循环结构 等构成。等构成。 语句 3语句 2顺序结构顺序结构 入口入口语句 1 出口出口分支结构分支结构入口入口条件满足否? 分支 1 出口出口YN 分支 2循环结构循环结构入口入口 处理 修改条件条件满足否?Y 出口出口N 4-2 汇编语言程序的基本结构形式 一、简单程序的设计 例例4-1:将外RAM 2010H中内容送 外RAM 2020单元中。分析:读2010H中内容A写数据
11、 2020H中流程如右图:程序如下:MOV P2,#20H ;输出高8位地址MOV R0,#10H ;置读读低8位间接地址MOVX A,R0 ;读2010H中数据MOV R1,#20H ;置写写低8位间接地址MOVX R1,A ;将A中数据写入2020H中例例4-2:试编制4位十六进制数加法程序,假定和数超过双字节 (21H20H)+(31H30H) 42H41H40H分析:先:低字节作不带进位求和,再作高字节带进位求和。 流程图(略),程序如下: MAIN:MOV A,20H ADD A,30H MOV 40H,A MOV A,21H ADDC A,31H ;带低字节进位加法 MOV 41H
12、,A MOVA,#00H ;准备处理最高位 MOVACC.0,C MOV 42H,A SJMP+逻辑运算类指令逻辑运算类指令(回顾回顾)逻辑运算类指令共24条,涉及A时,影响P标志。 1、 基本与、或、异或运算指令基本与、或、异或运算指令 (1)指令助记符:ANL、ORL、XRL (2)操作数:如下图 2、对、对A简单逻辑指令简单逻辑指令1)清零与取反CLR A ;清0CPL A ;求反2)循环移位指令RL A ;RLC A ;RR A ;RRC A ;3、位变量逻缉、位变量逻缉“与与”指令指令ANL C,bit ;(C)(C)(bit)ANL C,/ bit ;(C)(C)( ) 4、位变量
13、逻缉、位变量逻缉“或或”指令指令ORL C,bit ;(C)(C)(bit)ORL C,/ bit ;(C)(C)( )5、位清零、位清零/置位置位/逻缉逻缉“非非”指令指令 CLR bit(或C) (bit或 C)“0” SETB bit(或C) (bit或 C)“1” CPL bit (或 C)bitbit例如:设P1为输入口,P3为输出口,执行程序MOVC,P1.0ANLC,P1.1ANLC,/P1.2MOVP3.0,C结果:P3.0 = P1.0 P1.1 /P1.2。P1.1P1.2P1.0P3.0&例、用软件实现下图所示的例、用软件实现下图所示的P10 P10 P13 P1
14、3间的逻辑运算。间的逻辑运算。 解解: MOV C,P1.1: MOV C,P1.1 ORL C,P1.2 ORL C,P1.2 ANL C,P1.0 ANL C,P1.0 MOV P1.3,C MOV P1.3,C P1.1P1.2P1.0P1.3&1例4-3 将位地址40H、41H中的内容进行异或,结果 存入42H中。(位运算没有异或指令)分析:运算公式:Y= A B=程序如下:MOV C,41H ANL C,/40H MOV 42H,C MOV C,40H ANL C,/41H ORL C,42H MOV 42H,CBABA 二、分支程序设计分支程序设计1、单分支程序单分支结构程
15、序使用转移指令实现,即根据条件对程序的执行进行判断,满足条件是转移执行,否则顺序执行。 在MCS-51指令系统中条件转移条件转移指令有:(1)判A转移指令JZ、JNZ;(2)比较不相等转移指令CJNE;(3)减1不为0转移指令DJNZ;(4)判位转移指令JB、JNB、JBC、JC、JNC;条件转移指令条件转移指令根据某种条件判断转移的指令,执行时:条件满足条件满足时,转移执行; 条件不满足条件不满足时,顺序执行;目的地址:(PC)=(PC)+ 指令字节数指令字节数 2或或3 + rel包括判A、判Bit、判C三种,共有7条:1)判)判A转移,转移,2字节字节JZ rel ;条件:(A)= 0J
16、NZ rel ;条件:(A)02)判)判Bit转移,转移,3字节字节JB bit, rel ;条件:(bit)= 1JNB bit, rel ;条件:(bit)= 0JBC bit, rel ;条件:(bit)= 1转移,并清 bit位3)判)判C转移,转移,2字节字节JC rel ;条件:(C)= 1JNC rel ;条件:(C)= 04)比较不相等比较不相等转移指令转移指令CJNEA, direct,rel;CJNEA, #data, rel;CJNE Rn, #data, rel;CJNE Ri, #data, rel;执行时:1)两操作数相等,顺序执行,且CY=0。2)两操作数不相等,
17、转移执行,且对于无符号数若:第一操作数第二操作数,CY=1,否则CY清“0”。目的地址:(PC)=(PC)+ 指令字节数指令字节数3 + rel利用这些指令,可以判断两数是否利用这些指令,可以判断两数是否相等相等。但有时还想得知两数比较之后但有时还想得知两数比较之后哪个大哪个大,哪个小哪个小,本条指令也具有这样的功能:本条指令也具有这样的功能:如果两数不相等,则如果两数不相等,则CPUCPU还会用还会用CYCY(进位位)(进位位)来反映哪个数大,哪个数小。来反映哪个数大,哪个数小。如果前面的数大,则如果前面的数大,则CY=0CY=0,否则,否则CY=1CY=1。因此在程序转移后再次利用因此在程
18、序转移后再次利用CYCY就可判断出哪个就可判断出哪个数大,哪个数小了。数大,哪个数小了。例如:右图所示的比较判断,可利用CJNE和JC指令来完成。举例:举例: MOV A,R0 CJNE A,#60H,L1 MOV R1,#0 ;如R0=60H,则不转移R1=00H; AJMP L3L1:JC L2 ;如CY=1即 R060H,则不转移 AJMP L3L2:MOV R1,#0FFHL3:SJMP L3因此最终结果是:本程序执行前,如果R0=60H,则R1=00H;如果R060H,则R1=0AAH;如果R00Y= 0 X=0 的要求给Y赋值-1X0分析:X是有符号数,判断符号位是0还是1可利用J
19、B或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。流程、程序如下页: START:MOV A,30HJZOVERJNBACC.7,LAB1MOV A,#0FFHSJMP OVERLAB1:MOV A,#1OVER:MOV 31H, A SJMP (2)多重分支结构利用MCS-51单片机的散转指令JMP A+DPTR, 可方便地实现多重分支控制,因此,又称为散转程序。假定多路分支的最大序号为n,则分支的结构如图所示。 例例4-6 根据条件0、1、2 、n,分别转向处理程序PRG0、 PRG1、PRGn,条件K设在R2中。START:MOV DPRT,#TABLE MOV A,R2
20、 ADD A,R2 NEXT: JMP A+DPTR TABLE: AJMP PRG0 AJMP PRGn PRG0: PRGn:三、循环程序设计三、循环程序设计1、循环程序的结构循环程序包括以下四个部分:置循环初值循环体循环控制变量修改循环终止控制常用于循环控制的指令有:DJNZ、CJNE、JC、JNC等控制类指令。 2、单循环 终止循环控制采用计数的方法,即用一个寄存器作为循环次数计数器,每次循环后计数加1或减1,达到终止值后退出循环。减减“1”不为不为0转移指令转移指令又称循环转移指令,主要用来构成循环结构,有2条:DJNZRn, rel ;2字节指令,2周期指令DJNZdirect,r
21、el ;3字节指令,2周期指令本指令也为双功能指令,即减1操作和判断转移操作。第一操作数内容减1后,若差值不为零,则转移; 否则顺序执行。目的地址:(PC)=(PC)+ 指令字节数指令字节数2或或3 + rel例、将单片机内部例、将单片机内部RAM的的40H 4FH单元置初值单元置初值#0A0H。解:解: MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP:MOV R0,A INC R0 DJNZ R2,LOOP 试说明以下一段程序运行后试说明以下一段程序运行后A中的结果。中的结果。 MOV 23H,#0AH CLR ALOOP:ADD A,23H DJNZ 23
22、H,LOOP SJMP $根据程序可知根据程序可知A=10+9+8+7+6+5+4+3+2+1=55=37H3、多重循环 如果在一个循环程序中嵌套了其他的循环程序,称为多重循环程序。在用软件实现延时时显得特别有用。定时程序定时程序设计设计P.88例例4-7 设计1秒延时子程序,假设fosc=6MHz。 分析:软件延时与指令的执行时间关系密切,在使用6MHz晶振时,一个机器周期的时间为2us,执行一条DJNZ指令的时间为4us,我们可以采用三重循环的方法写出延时1秒的子程序 流程、程序如下图所示:利用DJNZ指令设计循环延时程序,已知fosc=6MHz 1) 单循环延时DELAY:MOV R5,
23、#TIME ;1T LOOP: NOP ;1T NOP ;1TDJNZ R5,LOOP ;2Tt=(1T+1T+2T) TIME+1T 2) 双重循环延时 (较长时间的定时程序)单循环定时程序的时间延迟比较小。为了加长定时时间,应采用多重循环的方法。 MOV R5, #TIME1LOOP2: MOV R4, #TIME2LOOP1: NOP NOP DJNZ R4, LOOP1 DJNZ R5, LOOP2 RET本程序的最大定时时间及计算公式为:( TIME2 8s2 s+4 s) TIME1 s(2568s2 s+4 s)256 s525 828 s 3) 三重循环延时 (已知fosc=1
24、2MHz)DELAY: MOVR7, #10; DL3:MOV R6, #200 ; DL2:MOV R5, #250 ; DL1:DJNZ R5, DL1 ; DJNZ R6, DL2 ; DJNZ R7, DL3 ; RET t=(2us250+1+2) 200)+1+2) 10+1 = 1006031us 1 秒4). 通过一个基本延时程序产生不同的定时例如,要求的定时时间分别为5 s、10 s和20 s,已有一个1 s的基本延时程序DELAY,则不同定时的调用情况见程序。MOV R0, #05H ;5 s延时LOOP1:LCALL DELAYDJNZ R0, LOOP1MOV R0,
25、#0AH ;10 s延时LOOP2:LCALL DELAYDJNZ R0, LOOP2MOV R0, #14H ;20 s延时LOOP3:LCALL DELAYDJNZ R0, LOOP34、按条件转移控制的循环条件满足,结束循环条件满足,结束循环举例:通过查找结束标志(回车符)以统计字符串长度的循环程序。P83设计方法:假定字符串存放在内部RAM从40H单元开始的连续存储单元中。为找到结束标志,应采用逐个字符依次与回车符(ASCII码0DH)比较的方法。MOV R2, #0FFH;设置长度计数器初值MOV R0, #3FH ;设置字符串指针初值LOOP: INC R2INC R0CJNE R
26、0, #0DH, LOOPRET4、按条件转移控制的循环 例例4-8 把内部RAM中从ST1地址开始存放的数据传送到以ST2开始的存储区中,数据块长度未知,但已知数据块的最后一个字节内容为00H,而其它字节均不为0。并设源地址与目的地址空间不重复。 分析:显然,我们可以利用判断每次传送的内容是否为 0 这一条件来控制循环。也可用CJNE来比较与0是否相等设计。 利用判A转移控制的循环流程图如下图所示。START:MOVR0, #ST1 MOV R1, #ST2LOOP:MOV A,R0 JZ ENT MOV R1,A INC R0 INC R1 SJMP LOOPENT:MOV R1,#0 R
27、ET四、子程序设计四、子程序设计 当一段程序需多次应用,或为多人应用时,通常把这段程当一段程序需多次应用,或为多人应用时,通常把这段程序编为子程序序编为子程序.调用指令与返回指令调用指令与返回指令1) 主程序和子程序结构主程序和子程序结构 2) 调用和返回调用和返回 子程序是独立于主程序的具有特定功能的程序段,单独编写,能被主程序调用,又能返回主程序。3) 堆栈和堆栈和PC值的保留值的保留 调用子程序时,CPU自动自动将当前PC值保留在堆栈中,子程序返回时,自动弹出,送入PC。4) 现场保护和恢复现场现场保护和恢复现场现场保护 是指将需要保护的单元内容,在子程序的开始使用压栈指令存放在堆栈中的
28、过程。恢复现场 是指在子程序返回前,通过出栈指令,将被保护内容送回原来的寄存器。5)调用与返回指令)调用与返回指令(1)短调用指令)短调用指令ACALL addr11执行时: 1)(PC)+ 2 PC,并压入堆栈,先PCL,后PCH; 2)PC1511 a100 PC,获得子程序入口地址; 3)转移范围同AJMP。(2)长调用指令)长调用指令 LCALLaddr16执行时: 1)(PC)+ 3 PC,并压入堆栈,先PCL,后PCH; 2)addr16 PC,获得子程序起始地址; 3)可调用64K地址范围内的任意子程序。(3)子程序返回指令)子程序返回指令RET RET:从堆栈中退出PC的高位和
29、低位字节,栈指针减2, 即:1)(PCH)(SP), (SP)(SP)- 1;2)(PCL) (SP), (SP)(SP)- 1;例例4-10 P1.0口线控制发光二极管,单灯闪烁。 例例4-10 P1.0口线控制发光二极管,单灯闪烁。LOOP:CLR P1.0 ;点亮ledLCALL DELAYSETB P1.0 ;熄灭led LCALL DELAYSJMP LOOPDELAY: MOV R7,0FFH ;延时子程序DL1:MOV R6,0FFHDL2:NOP;空操作 NOPDJNZ R6,DL2DJNZ R7,DL1RET 例例4-11 P1口控制发光二极管,延时节日灯组合。LOOP:MO
30、V P1,0AAH;灯光1LCALL DELAYMOV P1,055H;灯光2 LCALL DELAYSJMP LOOPDELAY: MOV R7,0FFHDL1:MOV R6,0FFHDL2:NOP;空操作DJNZ R6,DL2DJNZ R7,DL1RET子程序设计子程序设计一子程序入口用一子程序入口用标号标号作为子程序名。作为子程序名。二调用子程序之前设置好二调用子程序之前设置好堆栈堆栈。三用返回指令三用返回指令RETRET结束子程序,并保结束子程序,并保 证堆栈栈顶为调用程序的返回地址。证堆栈栈顶为调用程序的返回地址。四四. .子程序嵌套须考虑子程序嵌套须考虑堆栈容量堆栈容量。五五. .
31、提供足够的调用信息提供足够的调用信息: :如:子程序名、子程序功能、入口参数如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。子程序中调用的其他子程序名。子程序:能完成某项特定功能的独立程序段,可被反复调用。子程序:能完成某项特定功能的独立程序段,可被反复调用。常用程序设计模式常用程序设计模式 1)保护现场保护现场。 如果在调用前主程序已经使用了某些存储单元或寄存器,如果在调用前主程序已经使用了某些存储单元或寄存器,在调用时,这些寄存器和存储单元又有在调用时,这些寄存器和存储单元又有其他用途其他用途,就应先把,就应
32、先把这些单元或寄存器中的内容压入堆栈保护,调用完后再从堆这些单元或寄存器中的内容压入堆栈保护,调用完后再从堆栈中弹出以便加以恢复。如果有较多的寄存器要保护,应使栈中弹出以便加以恢复。如果有较多的寄存器要保护,应使主、子程序使用不同的寄存器组。主、子程序使用不同的寄存器组。 2)设置入口参数和出口参数设置入口参数和出口参数。 调用前主程序要按子程序的要求设置好地址单元或存储调用前主程序要按子程序的要求设置好地址单元或存储器(称为器(称为入口参数入口参数),以便子程序从指定的地址单元或存储),以便子程序从指定的地址单元或存储器获得输入数据;器获得输入数据; 子程序经运算或处理后的结果存放到指定的地
33、址单元或子程序经运算或处理后的结果存放到指定的地址单元或寄存器(称为寄存器(称为出口参数出口参数),主程序调用后从指定的地址单元),主程序调用后从指定的地址单元或寄存器读取运算或处理后的结果,只有这样,才能完成子或寄存器读取运算或处理后的结果,只有这样,才能完成子程序和主程序间的数据的正确传递。程序和主程序间的数据的正确传递。3)子程序中可包括对另外子程序的调用,称为子程序嵌套。)子程序中可包括对另外子程序的调用,称为子程序嵌套。例例4-12 用程序实现用程序实现c=a2+b2,设,设a,b均小于均小于10。a存放在存放在31H单元,单元,b存放在存放在32H单元,把单元,把c存入存入34H和
34、和33H单元。单元。(和要求为(和要求为BCD码)。码)。 解解:因该算式两次用到平方值,所以在程序中采用把求平方:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法编为子程序的方法。求平方采用查表法,主程序和子程序编写如主程序和子程序编写如下:下:主程序:主程序: ORG 0000H MOV SP,#3FH MOV A,31H ;取取aLCALL SQR ;求求a平方平方MOV R1,AMOV A,32H ;取取bLCALL SQR ;求求b平方平方ADD A,R1 ;求和求和DA A ;调整调整MOV 33H,A MOV A,#0ADDC A,#0 ;取进位
35、取进位 MOV 34H,A ;保存进位保存进位 SJMP $ 子程序:子程序: ORG 0030HSQR:INC A MOVC A,A+PC RETTAB: DB 00H,01H,04H DB 09H,16H,25H, DB 36H,49H,64H,81H END五、五、查表程序查表程序设计设计P.90表格:程序存储器除存放程序外,还可存放一些常数,这种数 据的结构称为表格。(用DB伪指令实现)访问:通过两条程序存储器取数指令,即查表指令来访问, 完成从ROM中读数,并只能送累加器A。指令格式:MOVCA,A+DPTR ;(A)(A)+(DPTR)MOVCA,A+PC ;(PC)(PC)+1,
36、(,(A)(A)+(PC)特点:单字节指令,源操作数为变址寻址,执行时, PSEN会 自动有效。功能:以DPTR、PC为基地址,与A中的8位无符号数相加,得 到一个新16位地址,将其内容送A。 1)用DPTR作为基址寄存器当使用DPTR作为基址寄存器时查表比较简单,查表的步骤分三步 1)基址(表格首地址)送DPTR数据指针; 2)变址值(在表中的位置是第几项)送累加器A; 3)执行查表指令MOVC A,ADPTR,进行读数,查表结果送回累加器A。 例例:设外部ROM的1005H单元开始的连续10个字 节中已存放有09的平方数,要求根据A中的 内容(09)来查找对应的平方值。START:MOV
37、DPTR,#TABLE MOVA,#3MOVC A,A+DPTR ;查表 ORG 1005H 1008单元内容TABLE:DB 0,1,4,9,16,25,36,49,64,81结果:A (1008H),(A)=09H特点:可访问整个ROM的64KB空间,表格可放在 ROM的任何位置。(2)用PC作为基寄存器优点:不改变DPTR的状态,根据A的内容取表格常数。缺点:(1)表格只能存放在查表指令以下的256个单元内。表格的大小受到限制,且表格只能被一段程序所利用。(2)当表格首地址与本指令间有其他指令时,须调整偏移量,调整量调整量为下一条指令的起始地址到表格首址之间的字节数。例例 :阅读下列程序
38、,给出运行结果 ,设(A)=3。 MOV A, #03H 1000HADD A,#02H ;加调整量 1002H MOVC A,A+PC;查表 1003H NOP 1004H NOP 1005H TAB: DB 0,1,4,9,16,25,36,49,64,81结果:(A)=09H,显然,显然,2条NOP指令没有时,不需调整。 当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。查表的步骤也分三步: 1)变址值(在表中的位置是第几项)送累加器A; 2)偏移量偏移量(查表指令的下一条指令的首地址到表 格首地址之间的字节数)+ A A;(修正) 3
39、)执行查表指令MOVC A,APC。 例4-9 二位十六进制数与ASCII码的转换程序。设数值在R2中,结果低位存在R2中,高位存在R3中。 分析:对于2位16进制数必须进行2次查表,因此,取数后通过屏蔽的方法来实现高低位分开。(1)利用DPTR作基址的参考程序如下 HEXASC: MOV DPTR,#TABLE MOV A,R2 ANL A,#0FH MOVC A,A+DPTR;查表 XCH R2, A ANL A, #0F0H SWAP A; MOVC A,A+DPTR;查表 MOV R3,A RETTABLE:DB 30H,31H,32H,33H,34H ;ASCII表 DB 35H,3
40、6H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H(2)利用PC作基址的参考程序如下:HEXASC: MOV A,R2 ANL A,#0FH ADDA,#9 MOVC A,A+PC ;查表 XCH R2, A ANL A, #0F0H SWAP A ADDA,#2 MOVC A,A+PC ;查表 MOV R3, A RET TABLE: DB “0”,“1”,“F” ;ASCII表例例 现有一段程序如下:现有一段程序如下: MOV A,#data ;必须为必须为偶数偶数 MOV DPTR,#TABLE JMP A+DPTRTABLE:AJMP PROC0 AJM
41、P PROC1 AJMP PROC2 AJMP PROC2 根据根据JMP A+DPTR指令的操作可知,指令的操作可知,当当A=00H时,程序转入到地址时,程序转入到地址 PROC0 处执行;处执行;当当A=02H时,转到时,转到PROC1处执行处执行 可见这是一段可见这是一段多路转移程序多路转移程序,进入的路数由,进入的路数由A确定。因为确定。因为AJMP指令是指令是2字节指令,所以字节指令,所以 A 必须为必须为偶数偶数。 例例:执行下面的散转程序散转程序,程序将根据A中的内容(命令编 号09)转相应的命令处理程序。ORG 1000HSTART:MOV R1,ARLA ;乘2ADDA,R1 ;完成偏移量A =(A)3 MOV DPTR,#TABLE ;设定表格首地址 JMPA+DPRTTABLE: LJMP COMD0LJMP COMD9 COMD0: COMD9:END由于LJMP占3个字节,因此,变址寄存器必须乘3 单片机汇编源程序的基本格式单片机汇编源程序的基本格式 任何一个51系列单片机的应用系统源程序,其基本地址空间可划分为:中断入口地址空间段、主程序地址空间段、中断服务程序中断服务程序和子程序地址空间段、固
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初级西药职称考试题库及答案
- 全国科技经费投入统计调查制度
- 住院三级查房制度
- 企业的相关制度
- 企业产品成本核算制度
- 人事四项制度
- 物流园奖惩制度范本大全
- 异地恋情侣间奖惩制度
- 业务接洽人员奖惩制度
- 为防止财务资料外泄或丢失制定严格的资料查阅和备份制度
- 2026年高校教师资格证考试题库(附答案)
- 低空经济项目融资方案模板
- 介入治疗医疗废物处理标准流程
- 专科护士竞聘课件
- 设计类-《室内设计概论》全套课件
- 2026年抚州幼儿师范高等专科学校单招职业技能考试必刷测试卷完美版
- GB/T 46471-2025皮革色牢度试验试验通则
- 脊柱侧弯的健康宣教
- 充电桩运维服务优化项目完成情况总结汇报
- 2026届高考英语高频固定短语搭配(共1000个)
- 关于中职学生安全教育的课件
评论
0/150
提交评论