版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-6-271第4章 汇编语言程序设计2022-6-272 4-1 汇编程序约定汇编语言程序:汇编语言程序: 用汇编语言编写的、完成特定功能的指令序列。用汇编语言编写的、完成特定功能的指令序列。汇编程序:汇编程序: 能将汇编语言能将汇编语言源程序源程序转换成机器语言转换成机器语言目标目标程序程序的系统软件。的系统软件。 汇编语言程序到机器语言程序的转换过程称为汇编。汇编语言程序到机器语言程序的转换过程称为汇编。1 1、手工汇编:、手工汇编:人工查指令表汇编。用于设计短小程序或调试人工查指令表汇编。用于设计短小程序或调试 程序的场合。程序的场合。2 2、机器汇编:、机器汇编:用汇编程序进行
2、汇编。用汇编程序进行汇编。2022-6-273源程序使用机器汇编要考虑汇编程序的约定:1 1)按指令格式和语法规则编写程序。按指令格式和语法规则编写程序。 常数的表示:常数的表示:十进制数:十进制数:2020十六进制数:十六进制数:8787H H,0F0H0F0H二进制数:二进制数:0101100101011001B B字符:字符:HH字符串:字符串:“Hello”Hello”。 2 2)使用伪指令提供汇编信息。使用伪指令提供汇编信息。2022-6-274汇编的主要任务:1 1)确定程序中每条汇编语言指令的指令机器码。)确定程序中每条汇编语言指令的指令机器码。2 2)确定每条指令在存储器中的存
3、放地址。)确定每条指令在存储器中的存放地址。3 3)提供错误信息。)提供错误信息。4 4)提供目标执行文件()提供目标执行文件(* *.OBJ/.OBJ/* *.HEX).HEX)和和 列表文件(列表文件(* *.LST.LST)。)。汇编语言的语句格式汇编语言的语句格式 语句行由四个字段组成语句行由四个字段组成 : 标号:标号: 操作码操作码 操作数操作数 ;注释;注释 括号内的部分可以根据实际情况取舍。每个字段之间要用分括号内的部分可以根据实际情况取舍。每个字段之间要用分隔符分隔,可以用作分隔符的符号有空格、冒号、逗号、分号隔符分隔,可以用作分隔符的符号有空格、冒号、逗号、分号等。等。如:
4、如:LOOPLOOP:MOV AMOV A,# 7FH # 7FH ;A7FHA7FH2022-6-275一、标号一、标号 标号是语句地址的标志符号,用于引导对该语句标号是语句地址的标志符号,用于引导对该语句的非顺序访问。的非顺序访问。有关标号的规定有关标号的规定为:为: 标号由标号由1 18 8个个ASCIIASCII字符组成。第一个字符必须是字字符组成。第一个字符必须是字 母,其余字符可以是字母、数字或其他特定字符;母,其余字符可以是字母、数字或其他特定字符; 不能使用该汇编语言已经定义了的符号作为标号。不能使用该汇编语言已经定义了的符号作为标号。如指令助记符、寄存器符号名称等;如指令助记
5、符、寄存器符号名称等; 标号后边必须跟冒号。标号后边必须跟冒号。二、操作码二、操作码 操作码用于规定语句执行的操作。它是汇编语句操作码用于规定语句执行的操作。它是汇编语句中唯一不能空缺的部分。它由指令助记符表示。中唯一不能空缺的部分。它由指令助记符表示。 2022-6-276三、操作数三、操作数 操作数用于给指令的操作提供数据或地址。在操作数用于给指令的操作提供数据或地址。在一条汇编语句中操作数可能是空缺的,也可能包括一一条汇编语句中操作数可能是空缺的,也可能包括一项,还可能包括两项或三项。各操作数间以逗号分隔。项,还可能包括两项或三项。各操作数间以逗号分隔。操作数字段的内容可能包括以下几种情
6、况:操作数字段的内容可能包括以下几种情况:(1 1)工作寄存器名;)工作寄存器名;(2 2)特殊功能寄存器名;)特殊功能寄存器名;(3 3)标号名;)标号名;(4 4)常数;)常数;(5 5)符号)符号“$”“$”,表示程序计数器,表示程序计数器PCPC的当前值;的当前值;(6 6)表达式。)表达式。2022-6-277四、注释四、注释 注释不属于汇编语句的功能部分,它只是对语句的说明。注释不属于汇编语句的功能部分,它只是对语句的说明。注释字段可以增加程序的可读性,有助于编程人员的阅读和维注释字段可以增加程序的可读性,有助于编程人员的阅读和维护。注释字段必须以分号护。注释字段必须以分号“;”开
7、头,长度不限,当一行书写开头,长度不限,当一行书写不下时,可以换行接着书写,但换行时应注意在开头使用分号不下时,可以换行接着书写,但换行时应注意在开头使用分号“;”。汇编语言指令类型:汇编语言指令类型: 1. 1. 机器指令:机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。指令系统中的全部指令,每条指令有对应的机器代码。 2. 2. 伪指令:伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。汇编控制指令,仅提供汇编信息,没有指令代码。2022-6-278 3 3. 宏指令:宏指令: 宏汇编功能:将需要多次反复执行的程序段定义成一个宏指令宏汇编功能:将需要多次反复执行的程序段定义
8、成一个宏指令 名(宏定义),编程时,可在程序中使用宏指令名(宏定义),编程时,可在程序中使用宏指令 名来替代一段程序(宏调用)。名来替代一段程序(宏调用)。宏定义过程宏定义过程:宏指令名宏指令名 MACRO 形式参数形式参数 ;定义程序段;定义程序段 ENDM宏调用过程:宏调用过程: 宏指令名宏指令名 实际参数实际参数 宏指令名宏指令名 实际参数实际参数2022-6-279二、汇编控制指令(伪指令): 伪指令是放在汇编语言源程序中用于指示汇伪指令是放在汇编语言源程序中用于指示汇编程序如何对源程序进行汇编的指令,它不同编程序如何对源程序进行汇编的指令,它不同于指令系统中的指令,指令系统中的指令在
9、汇于指令系统中的指令,指令系统中的指令在汇编程序汇编时能够产生相应的指令代码,而伪编程序汇编时能够产生相应的指令代码,而伪指令在汇编程序汇编时不会产生代码,只是对指令在汇编程序汇编时不会产生代码,只是对汇编过程进行相应的控制和说明。汇编过程进行相应的控制和说明。 伪指令通常在汇编语言源程序中用于定义数伪指令通常在汇编语言源程序中用于定义数据、分配存储空间、控制程序的输入输出等。据、分配存储空间、控制程序的输入输出等。MCS-51MCS-51汇编语言源程序相对于一般的微型计算汇编语言源程序相对于一般的微型计算机汇编语言源程序结构简单,伪指令数目少,机汇编语言源程序结构简单,伪指令数目少,常用的伪
10、指令只有几条。常用的伪指令只有几条。2022-6-27101.1.ORGORG起始地址指令:指明程序和数据块起始地址。起始地址指令:指明程序和数据块起始地址。该指令的该指令的功能功能是向汇编程序说明下面紧接的程序段或是向汇编程序说明下面紧接的程序段或数据段存放的起始地址。表达式通常为数据段存放的起始地址。表达式通常为1616进制地址,进制地址,也可以是已定义的标号地址。也可以是已定义的标号地址。常用伪指令及其功能:常用伪指令及其功能: ORG 8000H ORG 8000HSTARTSTART:MOV AMOV A,#30H#30H 此时规定该段程序的机器码从地址此时规定该段程序的机器码从地址
11、8000H8000H单元开始存单元开始存放。放。 在每一个汇编语言源程序的开始,在每一个汇编语言源程序的开始,都要设置一条都要设置一条ORGORG伪伪指令来指定该程序在存储器中存放的起始位置。指令来指定该程序在存储器中存放的起始位置。若省略若省略ORGORG伪伪指令,则该程序段从指令,则该程序段从0000H0000H单元开始存放。在一个源程序中,单元开始存放。在一个源程序中,可以多次使用可以多次使用ORGORG伪指令规定不同程序段或数据段存放的起始伪指令规定不同程序段或数据段存放的起始地址,但地址,但要求地址值由小到大依序排列要求地址值由小到大依序排列,不允许空间重叠。,不允许空间重叠。202
12、2-6-27112DB伪指令伪指令格式:格式:标号:标号: DB 项或项表项或项表 DB伪指令用于定义字节数据,可以伪指令用于定义字节数据,可以定义一个字节,也可定义多个字节,字义定义一个字节,也可定义多个字节,字义多个字节时,两两之间用逗号间隔,定义多个字节时,两两之间用逗号间隔,定义的多个字节在存储器中是连续存放的。定的多个字节在存储器中是连续存放的。定义的字节可以是一般常数,也可以为字符,义的字节可以是一般常数,也可以为字符,还可以是字符串,字符和字符串以引号括还可以是字符串,字符和字符串以引号括起来,字符数据在存储器中以起来,字符数据在存储器中以ASCII码形码形式存放。式存放。在定义
13、时前面可以带标号,定义的标号在定义时前面可以带标号,定义的标号在程序中是起始单元的地址。在程序中是起始单元的地址。【例例3-19】 ORG 3000HTAB1: DB 12H,34HDB 5,A,abc汇编后,各个数据在存储单元中的存放汇编后,各个数据在存储单元中的存放情况如下:情况如下:12H34H35H41H61H62H63H3000H3001H3002H3003H3004H3005H3006H2022-6-27123DW伪指令伪指令格式:格式:标号:标号: DW 项或项表项或项表 这条指令与这条指令与DB相似,但用于相似,但用于定义字数据。项或项表指所定义的一定义字数据。项或项表指所定义
14、的一个字在存储器中占两个字节。汇编时,个字在存储器中占两个字节。汇编时,机器自动按低字节在前,高字节在后,机器自动按低字节在前,高字节在后,即低字节存放在低地址单元,高字节即低字节存放在低地址单元,高字节存放在高地址单元。存放在高地址单元。【例例3-20】 ORG 3000HTAB2:DW 1234H,5678H汇编后,各个数据在存储单元中的汇编后,各个数据在存储单元中的存放情况如下:存放情况如下:34H12H78H56H3000H3001H3002H3003H2022-6-27134DS伪指令伪指令格式:格式:标号:标号: DS 数值表达数值表达式式 该伪指令用在存储器中保留该伪指令用在存储
15、器中保留一定数量的字节单元。保留存贮一定数量的字节单元。保留存贮空间主要为以后存放数据。保留空间主要为以后存放数据。保留的字节单元数由表达式的值决定。的字节单元数由表达式的值决定。【例例3-21】 ORG 2000HTAB1: DB 12H,34HDS 4HDB 5汇编后,存储单元中的分配情况汇编后,存储单元中的分配情况如下:如下:12H34H-35H3000H3001H3002H3003H3004H3005H3006H2022-6-27145EQU伪指令伪指令格式:符号格式:符号 EQU 项项 该伪指令的功能是将指令中的项的值赋予该伪指令的功能是将指令中的项的值赋予EQU前前面的符号。项可以
16、是常数、地址标号或表达式。以后可面的符号。项可以是常数、地址标号或表达式。以后可以通过使用该符号使用相应的项。以通过使用该符号使用相应的项。【例例3-22】 TAB1 EQU 1000HTAB2 EQU 2000H汇编后汇编后TAB1、TAB2分别等于分别等于1000H、2000H。程序。程序后面使用后面使用1000H、2000H的地方就可以用符号的地方就可以用符号TAB1、TAB2替换。替换。用用EQU伪指令对某标号赋值后,该符号的值在整个程伪指令对某标号赋值后,该符号的值在整个程序中不能再改变。序中不能再改变。2022-6-27157END伪指令伪指令格式:格式:END 该指令放于程序最后
17、位置,用于指明汇编语言源程该指令放于程序最后位置,用于指明汇编语言源程序的结束位置,当汇编程序汇编到序的结束位置,当汇编程序汇编到END伪指令时,汇编结伪指令时,汇编结束。束。END后面的指令,汇编程序都不予处理。一个源程序后面的指令,汇编程序都不予处理。一个源程序只能有一个只能有一个END命令,否则就有一部分指令不能被汇编。命令,否则就有一部分指令不能被汇编。6bit伪指令伪指令格式:符号格式:符号 bit 位地址位地址bit该伪指令用于给位地址赋予符号,经赋值后可用该符该伪指令用于给位地址赋予符号,经赋值后可用该符号代替号代替bit后面的位地址。后面的位地址。【例例3-23】 FLG bi
18、t F0AI bitP1.0定义后,在程序中位地址定义后,在程序中位地址F0、P1.0就可以通过就可以通过FLG和和AI来使用。来使用。2022-6-27164-2 汇编语言程序设计步骤一、确定方案和计算方法;一、确定方案和计算方法;二、了解应用系统的硬件配置、性能指标;二、了解应用系统的硬件配置、性能指标;三、建立系统数学模型,确定控制算法和操作步骤;三、建立系统数学模型,确定控制算法和操作步骤;四、画程序流程图;四、画程序流程图; 表示程序结构和程序功能。表示程序结构和程序功能。 五、编制源程序。五、编制源程序。 1. 1.合理分配存储器单元和了解合理分配存储器单元和了解 I/O I/O接
19、口地址。接口地址。 2. 2.按功能设计程序,明确各程序按功能设计程序,明确各程序 之间的相互关系。之间的相互关系。 3. 3.用注释行说明程序,便于阅读、用注释行说明程序,便于阅读、 修改和调试。修改和调试。2022-6-2717常用程序结构:4-3 4-3 顺序程序顺序程序 顺序程序是指无分支、无循环结构的程序。其执行流顺序程序是指无分支、无循环结构的程序。其执行流程是依指令在存储器中的存放顺序进行的。程是依指令在存储器中的存放顺序进行的。顺序程序又称简顺序程序又称简单程序,程序走向只有一条路径。单程序,程序走向只有一条路径。例:例:双字节变补程序双字节变补程序( (设数据在设数据在R R
20、4 4R R5 5中中) ):MOVMOV A A,R R5 5;取低字节取低字节CPLCPL A AADDADD A A,#01H#01H;低字节变补低字节变补MOVMOV R R5 5,A AMOVMOV A A, R R4 4 ;取高字节取高字节CPLCPL A AADDC AADDC A,#00H#00H;高字节变补高字节变补MOVMOV R4 R4,A A 顺序程序、分支程序、循环程序。顺序程序、分支程序、循环程序。2022-6-2718例题(顺序) 例例4.14.1 三字节无符号数相加,其中被加数在内部三字节无符号数相加,其中被加数在内部RAMRAM的的50H50H、51H51H和
21、和52H52H单元中;加数在内部单元中;加数在内部RAMRAM的的53H53H、54H54H和和55H55H单元单元中;要求把相加之和存放在中;要求把相加之和存放在50H50H、51H51H和和52H52H单元中,进位存放单元中,进位存放在位寻址区的在位寻址区的00H00H位中。位中。低字节低字节低字节低字节中字节中字节中字节中字节高字节高字节高字节高字节高字节高字节高字节高字节低字节低字节低字节低字节R0R12022-6-2719MOVMOVR R0 0,#52H#52HMOVMOVR R1 1,#55H#55HMOVMOVA A,RR0 0ADDADDA A,RR1 1MOVMOVRR0
22、0,A ADECDECR R0 0DECDECR R1 1MOVMOVA A,RR0 0ADDCADDCA A,RR1 1MOVMOVRR0 0,A ADECDECR R0 0DECDECR R1 1MOVMOVA A,RR0 0ADDCADDCA A,RR1 1MOVMOVRR0 0,A ACLRCLRA AADDCADDCA A,#00H#00HMOVMOVR R0 0,#00H#00HMOVMOVRR0 0,A A;被加数的低字节地址被加数的低字节地址;加数的低字节地址;加数的低字节地址;低字节相加;低字节相加;存低字节相加结果;存低字节相加结果;中间字节带进位相加;中间字节带进位相加;
23、存中间字节相加结果;存中间字节相加结果;高字节带进位相加;高字节带进位相加;存高字节相加结果;存高字节相加结果;存放进位的单元地址;存放进位的单元地址;进位送;进位送0000H H位保存位保存程序:程序:MOVC,ACC.0MOV00H,CMOVR0,#20HMOVR0,A例: 压缩式BCD码分解成为单字节BCD码。MOVMOV R R0 0,#40H#40H ;设指针;设指针MOVMOV A A,RR0 0 ;取一个字节;取一个字节MOVMOV R R2 2,A A ;暂存;暂存ANLANL A A,#0FH#0FH ;高半字节清;高半字节清0 0INCINC R R0 0MOVMOV R
24、R0 0,A A ;保存数据;保存数据个位个位MOVMOV A A,R R2 2SWAP ASWAP A ;十位换到低半字节;十位换到低半字节ANLANL A A,#0FH#0FHINCINC R R0 0MOVMOV R R0 0,A A ;保存数据;保存数据十位十位十十 个个2022-6-27214-4 分支程序4-4-14-4-1单重分支程序单重分支程序一个判断决策框,程序有两条出路。一个判断决策框,程序有两条出路。两种分支结构:两种分支结构: 例:例:求求R R2 2中补码绝对值:中补码绝对值: 正数不变,负数变补。正数不变,负数变补。 MOV AMOV A,R R2 2 JNB AC
25、C. JNB ACC.7 7,NEXT NEXT ;为正数?为为正数?为0 0跳跳 CPL ACPL A ;负数变补负数变补 INC AINC A MOV R MOV R2 2,A A NEXT NEXT:SJMP NEXT SJMP NEXT ;结束结束由由条件转移指令条件转移指令构成程序判断框部分,形成程序分支结构。构成程序判断框部分,形成程序分支结构。P85:例题(单分支) 例例4.2 4.2 假定在外部假定在外部RAMRAM中有中有STST1 1、STST2 2和和STST3 3共共3 3个连续单元,其中个连续单元,其中 ST ST1 1和和STST2 2单元中分别存放着两个单元中分别
26、存放着两个8 8位无符号二进制数,位无符号二进制数,要求要求 找出其中的找出其中的大数大数并存入并存入STST3 3 单元中。单元中。STARTSTART:CLR CCLR C MOV DPTR MOV DPTR,#ST#ST1 1 MOVX A MOVX A,DPTRDPTR MOV R MOV R2 2,A A INC DPTR INC DPTR MOVX A MOVX A,DPTRDPTR SUBB A SUBB A,R R2 2 JNC BIG1 JNC BIG1 XCH A XCH A,R R2 2 BIG0 BIG0: INC DPTR INC DPTR MOVX DPTR MOV
27、X DPTR,A A RET RET BIG1 BIG1: MOVX A MOVX A,DPTRDPTR SJMP BIG0 SJMP BIG0;进位位清进位位清“0”;设置数据指针,指向设置数据指针,指向ST1;取第一个数;取第一个数;第一个数存;第一个数存R2;数据指针加数据指针加1,指向,指向ST2;取第二个数;取第二个数;两数比较;两数比较(第二个数(第二个数第一个数)第一个数);第二个数大转;第二个数大转BIG1(C=0无借位跳)无借位跳);第一个数大整字节交换继续第一个数大整字节交换继续;指向;指向ST3单元单元;存大数;存大数例: FRT: MOV A,40H ;取行李重量计价单
28、位;取行李重量计价单位G MOV R3,A MOV B,# 03H ;M=G3 MUL AB MOV R2,A ;暂存;暂存3G MOV A,R3 ;取回;取回G CJNE A,# 05H,L1 ;G5 ? G 5 跳跳L1 SJMP WETC L1: JC WETC ;是,转至;是,转至WETC(C=1即即G5跳)跳) SUBB A,#05H ;否则;否则M=3G+2(G-5) RLC A ADD A,R2 SJMP L2WETC: MOV A ,R2 L2: MOV 41H,A ;存结果;存结果M RETG5? :跳:跳WETC :G5:跳:跳WETC G5:顺序执行:顺序执行行 李 计
29、价 : 当行 李 计 价 : 当 G 5 , M = G 3 ; 当当G5,M=G3+(G-5)(5-3) 。2022-6-2724例例 求双字节补码。求双字节补码。设在内部设在内部RAM的的addr1和和addr+1单单元存有一个双字节元存有一个双字节数(高位字节存于数(高位字节存于高地址单元)。编高地址单元)。编写程序将其读出取写程序将其读出取补后再存入补后再存入addr2和和addr2+1单元。单元。首先对低字节取补,首先对低字节取补,然后判其结果是否然后判其结果是否为全为全“0”。若是,。若是,则高字节取补,否则高字节取补,否则高字节取反。则高字节取反。 STARTSTART:MOV
30、R0MOV R0,#addr1 #addr1 ;原码低字节地址送;原码低字节地址送R0R0 MOV R1 MOV R1,#addr2 #addr2 ;补码低字节地址送;补码低字节地址送R1R1 MOV A MOV A,R0 R0 ;原码低字节送;原码低字节送A A CPL A CPL A ;A A内容取补内容取补 INC A INC A MOV R1 MOV R1,A A ;存补码低字节;存补码低字节 INC R0 INC R0 ;调整地址,指向下;调整地址,指向下一单元一单元 INC R1 INC R1 JZ ZERO JZ ZERO ;(;(A A)=0=0时转时转ZEROZERO MOV
31、 A MOV A,R0 R0 ;原码高字节送;原码高字节送A A CPL A CPL A MOV R1 MOV R1,A A ;高字节反码存入;高字节反码存入addr2+1addr2+1单元单元 SJMP LOOP1 SJMP LOOP1 ZERO ZERO:MOV AMOV A, R0 R0 ;高字节取补存入;高字节取补存入addr2+1addr2+1单元单元 CPL A CPL A INC A INC A MOV R1 MOV R1,A A LOOP1: RET LOOP1: RET4-4-2 多重分支程序例:例:求符号函数求符号函数Y=SGN(X)Y=SGN(X) +1 +1 (当(当
32、X0 X0)SGN(X)= 0 SGN(X)= 0 (当(当 X=0 X=0) -1 -1 (当(当 X0 X0)SYMB: MOV A,40H ;取取X JZ STOR ;X=0跳,跳,Y=X JB ACC.7,MINUS ;X0(A.7=1跳)跳) MOV A,# 01H ;X0,Y=+1 SJMP STORMINUS:MOV A,#0FFH ;X0,Y= -1 STOR: MOV 41H,A ;保存保存Y RET一、多次使用条件转移指令,形成两个以上判断框。一、多次使用条件转移指令,形成两个以上判断框。2022-6-2726温控系统结构框图 电热箱采用电热丝加热,由双向可控硅控制加热量的
33、大小;电热箱采用电热丝加热,由双向可控硅控制加热量的大小; 温度传感器检测电热箱内的温度,经放大与温度传感器检测电热箱内的温度,经放大与A/DA/D转换后进入单片转换后进入单片机;机; 单片机将设定的温度值与检测到的电热箱中的实际温度进行比较,单片机将设定的温度值与检测到的电热箱中的实际温度进行比较,并调节运算后,发出控制信号经光电隔离器去驱动双向可控硅以调节并调节运算后,发出控制信号经光电隔离器去驱动双向可控硅以调节加在电热丝的电压,从而控制电热箱的温度。加在电热丝的电压,从而控制电热箱的温度。电热箱单片机温控系统结构框图电热箱单片机温控系统结构框图2022-6-2727例题(多分支) 例例
34、4.3 4.3 某温度控制系统,采集的温度值(某温度控制系统,采集的温度值(TaTa)放在累加器)放在累加器A A中。此中。此外,外, 在内部在内部RAM54HRAM54H单元存放控制温度下限值(单元存放控制温度下限值(T54T54),), 在在 5 5 H5 5 H 单 元 存 放 控 制 温 度 上 限 值单 元 存 放 控 制 温 度 上 限 值(T55T55)。)。 若若TaTaT55,程序转向,程序转向JW(降温处理子程序);(降温处理子程序); 若若TaTaT54,则程序转向,则程序转向SW(升温处理子程序);(升温处理子程序); 若若T55T55TaTaT54,则程序转向,则程序
35、转向FH(返回主程序)。(返回主程序)。 :去:去FHFH思路:思路: Ta= Ta=T55? : TaTaT55:去:去JW TaTaT55:Ta=Ta=T54? :去:去FHFH : TaTaT54:去:去SW TaTaT54:去:去FH算法算法: (1) TaTaT55:去:去JW (2) TaTaT54:去:去SW (3) T55T55TaTaT54:去:去FH2022-6-2728程序: CJNE A CJNE A,55H55H,LOOP1LOOP1 AJMP FH AJMP FHLOOP1:JNC JWLOOP1:JNC JW CJNE A CJNE A,54H54H,LOOP2L
36、OOP2 AJMP FH AJMP FHLOOP2:JC SWLOOP2:JC SW FH: RET FH: RET ;Ta T55:转向:转向LOOP1; Ta=T55 :返回:返回;若若CY=0,表明表明Ta T55,转降温处理程序转降温处理程序 ; Ta T54:转向:转向LOOP2; Ta=T54 :返回:返回;若若CY=1,表明表明Ta T54,转升温处理程序转升温处理程序; T55TaT54,返回主程序返回主程序若若TaT55,程序转向程序转向JW(降温处理子程序);降温处理子程序);若若TaT54,则程序转向则程序转向SW(升温处理子程序);升温处理子程序);若若T55TaT54
37、,则程序转向则程序转向FH(返回主程序)。返回主程序)。二、按分支号转移。如:当分支号如:当分支号=0,程序转移到,程序转移到ADDR0处;处; 当分支号当分支号=1,程序转移到,程序转移到ADDR1处;处; 。 例例4.44.4有有BR0BR0、BR1BR1、BR2BR2和和BR3BR3共共4 4个分支程序段,各分支程序段的功能个分支程序段,各分支程序段的功能 依次是从内部依次是从内部RAM256BRAM256B范围取数、从外部范围取数、从外部RAMRAM低低256B256B范围取范围取数、数、 从外部从外部RAM4KBRAM4KB范围取数和从外部范围取数和从外部RAM64KBRAM64KB
38、范围取数。并假定范围取数。并假定R R0 0 中存放取数地址低中存放取数地址低8 8位地址,位地址,R R1 1中存放高中存放高8 8位地址,位地址,R R3 3中存放中存放分支序分支序 号值。假定以号值。假定以BRTABBRTAB作差值表首地址,作差值表首地址, BR0_BRTAB BR0_BRTAB BR3_BRTAB BR3_BRTAB为差值。为差值。 分析:差值表分析:差值表= =分支入口地址分支入口地址该表首址该表首址1、利用查地址表法: MOV MOV A A,R R3 3 MOV MOV DPTR DPTR,#BRTAB#BRTAB MOVC MOVC A A,A+DPTRA+D
39、PTR JMP JMP A+DPTR A+DPTRBRTAB:BRTAB: DB DB BR0_BRTAB BR0_BRTAB DB DB BR1_BRTAB BR1_BRTAB DB DB BR2_BRTAB BR2_BRTAB DB DB BR3_BRTAB BR3_BRTAB BR0: BR0:MOVMOV A A,RR0 0SJMPSJMP BRE BRE BR1: BR1:MOVXMOVX A A,RR0 0SJMPSJMP BRE BRE BR2: BR2:MOVMOV A A,R R1 1ANLANL A A,#0FH#0FHANLANL P P2 2,#0F0H#0F0HORL
40、ORL P P2 2,A AMOVXMOVX A A,RR0 0SJMPSJMP BRE BRE BR3: BR3:MOVMOV DPL DPL,R R0 0MOVMOV DPH DPH,R R1 1MOVXMOVX A A,DPTRDPTR BRE BRE: SJMP SJMP ;分支转移值送;分支转移值送A(如如R3=2);差值表首址差值表首址(BRTAB=3000H);查表;查表A+DPTR=3002H,(A)=40H ;转移;转移(A+DPTR=3040H);差值表;差值表(=10H) (=20H) (=40H) (=60H);从内部;从内部RAM取数取数;从外部;从外部RAM256B
41、取数取数;从外部;从外部RAM4KB取数取数;高位地址取低;高位地址取低4位位;清;清P2口低口低4位位;发高位地址;发高位地址;从外部;从外部RAM64KB取数取数程序:程序:入口地址:入口地址:3010H3020H3040H3060H差值表差值表=分支入口地址该表首址分支入口地址该表首址例题(查转移指令表)4.54.5假定键盘上有假定键盘上有3 3个操作键,功能说明如下个操作键,功能说明如下表:表: MOVMOV DPTR DPTR,#3000H#3000HCLRCLR C CRLCRLC A AJMPJMP A+DPTR A+DPTRAJMPAJMP DS DSAJMPAJMP XS X
42、SAJMPAJMP CR CR 3000H3001H3002H3003H3004H3005H3006H;3000H为基址为基址;进位位;进位位CY清清“0”;A带进位位循环左移带进位位循环左移;转操作键处理程序;转操作键处理程序;转读数据程序;转读数据程序;转写数据程序;转写数据程序;转插入程序;转插入程序2、使用转移指令表法。用分支转移指令 AJMP 对AJMP指令应将分支序号乘以2, 转移范围为2KB;对LJMP指令应将分支序号乘以3, 转移范围为64KB。2022-6-2732 设分支号已存入设分支号已存入A。把分支程序入口地址存放在表中。把分支程序入口地址存放在表中。 MTJS:MOV
43、 SP,#30HMOV DPTR,#TAB ;取分支入口地址表首地址取分支入口地址表首地址 CLR C ;分支号分支号2 RLC AMOV R2,AMOVC A,A+DPTR ;取分支地址低位取分支地址低位PUSH A ;入栈保存入栈保存 MOV A,R2INC AMOVC A,A+DPTR ;取分支地址高位取分支地址高位PUSH A ;入栈保存入栈保存 RET ;分支地址分支地址PC,转移转移 TAB: DW ADDR0 ;分支程序入口地址表分支程序入口地址表 DW ADDR1 ADDR0: ;程序段程序段0 ADDR1: ;程序段程序段1 ADDR2: ;程序段程序段2 3、利用堆栈操作法
44、:如:DPTR=3000H A=2 PC4-5 循环程序4-5-14-5-1 循环程序的构成循环程序的构成各个环节任务:各个环节任务:一、初始化部分:一、初始化部分: 循环准备工作。如:清结果单元、循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。设指针、设循环控制变量初值等。二、循环体:二、循环体: 循环工作部分:循环工作部分: 需多次重复处理的工作。需多次重复处理的工作。 循环控制部分:循环控制部分: 1.1.修改指针和循环控制变量。修改指针和循环控制变量。 2. 2.检测循环条件:满足循环条件,继续循环,否则退出循环。检测循环条件:满足循环条件,继续循环,否则退出循环。三、结束
45、部分:三、结束部分: 处理和保存循环结果。处理和保存循环结果。 允许允许0 0次循环的循环结构:在循环工作之前检测循环条件。次循环的循环结构:在循环工作之前检测循环条件。包含多次重复执行的程序段,循环结构使程序紧凑。包含多次重复执行的程序段,循环结构使程序紧凑。4-5-2 单重循环简单循环结构:简单循环结构: 循环体中不套循环。循环体中不套循环。循环控制方法:循环控制方法:计数控制;计数控制;特征标志控制。特征标志控制。2022-6-2735例: 求求n n个单字节数据的累加,设数据串已在个单字节数据的累加,设数据串已在43H43H起始单元,数据串长度在起始单元,数据串长度在42H42H单元,
46、累加和单元,累加和不超过不超过2 2个字节。个字节。SUMSUM: MOVMOVR R0 0,#42H #42H ;设指针设指针MOVMOVA A,RR0 0MOVMOVR R2 2,A A ;循环计数器循环计数器n nCLRCLRA A ;结果单元清结果单元清0 0MOVMOVR R3 3,A AADD1ADD1:INCINCR R0 0 ;修改指针修改指针ADDADDA A,RR0 0 ;累加累加JNC NEXTJNC NEXT ;处理进位(处理进位(C=0C=0跳)跳)INCINCR R3 3 ;有进位,高字节加有进位,高字节加1 1NEXTNEXT:DJNZ DJNZ R R2 2,A
47、DD1 ADD1 ;循环控制:数据是否加完循环控制:数据是否加完?MOVMOV40H40H,A A ;循环结束,保存结果循环结束,保存结果MOVMOV41H41H,R R3 3RETRETR02022-6-2736一、计数控制:例:例:为一串为一串7 7位位ASCIIASCII码数据的码数据的D D7 7位加上奇校验,设数据存位加上奇校验,设数据存放在片外放在片外RAMRAM的的2101H2101H起始单元,数据长度在起始单元,数据长度在2100H2100H单元。单元。 MOV DPTR MOV DPTR,#2100H#2100H MOVX A MOVX A,DPTRDPTR MOV R MO
48、V R2 2,A ANEXTNEXT:INC DPTRINC DPTR MOVX A MOVX A,DPTRDPTR ORL A ORL A,#80H#80H JNB P JNB P,PASS PASS ;P=0P=0:1 1的个数为偶数,跳的个数为偶数,跳 MOVX DPTR MOVX DPTR,A APASSPASS:DJNZ RDJNZ R2 2,NEXTNEXTDONEDONE:SJMP DONESJMP DONE设循环计数器,控制循环次数。正计数和倒计数两种方式。设循环计数器,控制循环次数。正计数和倒计数两种方式。2022-6-2737 二、特征控制:例:例:找正数表最小值。正数表存
49、在片外找正数表最小值。正数表存在片外RAMRAM中以中以LISTLIST为为 起始单元,用起始单元,用-1-1作为结束标志。作为结束标志。STARTSTART:MOV DPTRMOV DPTR,#LIST#LIST;数表首地址数表首地址MOV BMOV B,#127#127;预置最小值预置最小值 NEXT NEXT:MOVX AMOVX A,DPTRDPTR;取数取数 INC DPTR INC DPTR;修改指针修改指针CJNE ACJNE A,#-1#-1,NEXT1NEXT1;是否为数表结尾?(是否为数表结尾?(A A- -1跳)跳) SJMP DONESJMP DONE;循环结束循环结束
50、NEXT1NEXT1:CJNE ACJNE A,B B,NEXT2NEXT2;比较(比较(A AB B跳)跳)NEXT2NEXT2:JNC NEXT JNC NEXT ;C=0C=0跳跳 MOV B MOV B,A A;保存较小值保存较小值SJMP NEXTSJMP NEXT DONE DONE:SJMP DONESJMP DONE习题:习题:统计一班考试为统计一班考试为100100分和不及格人数,成绩单分和不及格人数,成绩单 在在4141H H起始单元。起始单元。设定循环结束标志实现循环控制。设定循环结束标志实现循环控制。4-5-3 多重循环例:例:将内存一串单字节无符号数升序排序将内存一串
51、单字节无符号数升序排序步骤:步骤:每次取相邻单元的两个数比较,决定是否需要交换数据位置。每次取相邻单元的两个数比较,决定是否需要交换数据位置。第一次循环,比较第一次循环,比较N-1N-1次,取到数据表中最大值。次,取到数据表中最大值。第二次循环,比较第二次循环,比较N-2N-2次,取到次大值。次,取到次大值。 第第N-1N-1次循环:比较一次,排序结束。次循环:比较一次,排序结束。循环体中套循环结构。以双重循环使用较多。循环体中套循环结构。以双重循环使用较多。 SORT SORT: MOV MOV A A,#N-1#N-1;N N个数据排序个数据排序 MOV MOV R R4 4,A A;外循
52、;外循环次数环次数LOOP1LOOP1: MOV MOV A A,R R4 4 MOV MOV R R3 3,A A;内循;内循环次数环次数 MOV MOV R R0 0,#TAB#TAB;设数据指针;设数据指针LOOP2LOOP2: MOV MOV A A,RR0 0 ;取二数;取二数 MOV MOV B B,A A INC INC R R0 0 MOV MOV A A,RR0 0 CJNE A CJNE A,B B,L1L1;比较(;比较(A AB B跳)跳) L1 L1: JNC JNC UNEX UNEX;ABAB,不交,不交换换 DEC DEC R R0 0 ;否则交换数;否则交换数
53、据据 XCH XCH A A,RR0 0 INC INC R R0 0 MOV MOV R R0 0,A A UNEX UNEX: DJNZ R DJNZ R3 3,LOOP2LOOP2;内循环结束?;内循环结束? DJNZ R DJNZ R4 4,LOOP1LOOP1;外循环结束?;外循环结束? RET RET2022-6-27401、单循环定时程序:单循环定时程序: (参看(参看P88P88) MOV R5,#TIMELOOP: NOP NOP DJNZ R5,LOOP软件延时程序:1T1T1T2T设:设:f fOSCOSC=6MHz=6MHz, 则则 T=12/6MHz=2T=12/6M
54、Hz=2 s t= t=(1+41+4TIMETIME)T T =2+8 =2+8TIMETIME( s)用循环程序将指令重复多次执行,实现软件延时。用循环程序将指令重复多次执行,实现软件延时。试计算延时程序的执行时间。试计算延时程序的执行时间。 源程序源程序指令周期指令周期(M) (M) 指令执行次数指令执行次数习题:习题:DELAYDELAY:MOV RMOV R6 6,#100#100 1 1 D1 D1:MOV RMOV R7 7,#10#10 1 1 D2 D2:NOPNOP 1 1DJNZ RDJNZ R7 7,D2D2 2 2 t=6.606 mst=6.606 ms DJNZ
55、RDJNZ R6 6,D1D1 2 2RETRET 2 2计算延时程序的执行时间计算延时程序的执行时间( (设时钟设时钟f fOSCOSC=6MHz,T=2=6MHz,T=2 s 。 DELAY DELAY: MOV R MOV R6 6,#64H #64H (=100=100)1 1I1I1: MOV R MOV R7 7,#0FFH#0FFH(=255=255)1 1I2I2: DJNZ R DJNZ R7 7,I2I22 2 DJNZ R DJNZ R6 6,I1I12 2 RET RET2 2延时时间计算:(设时钟延时时间计算:(设时钟f fOSCOSC=12MHz=12MHz) T=
56、1 T=1 st=(1t=(11+11+1100+2100+2100100255+2255+2100+2100+21)1)T T = 51.303 ms = 51.303 ms1 11001001001002552551001001 12、多重循环定时:用循环程序将指令重复多次执行,实现较长时间的延时。用循环程序将指令重复多次执行,实现较长时间的延时。2022-6-27424-6 算术运算程序4-6-1 多字节加减运算程序 多字节加法子程序,多字节加法子程序,Z=X+YZ=X+Y。(参看(参看P84P84)ADDSADDS:CLRCLRC C MOV R MOV R2 2,#23H#23H L
57、OOPLOOP:MOVMOVA A,RR0 0ADDC ADDC A A,RR1 1 ;加一字节;加一字节MOVMOV RR0 0,A A ;存和一字节;存和一字节INCINC R R0 0 ;修改指针;修改指针INCINC R R1 1DJNZ DJNZ R R2 2,LOOP LOOP ;全部字节;全部字节加完?加完?RETRET习题习题1 1:编写十进制多字节加法子程序,编写十进制多字节加法子程序,Z=X+YZ=X+Y。习题习题2 2:编写多字节减法子程序,编写多字节减法子程序,Z=X-YZ=X-Y。思考题:思考题:修改程序使运算结果保存到其他存储单元。修改程序使运算结果保存到其他存储单
58、元。2022-6-2743设被乘数的高字节放在设被乘数的高字节放在R7中,低字节放于中,低字节放于R6中;乘数的高字节放中;乘数的高字节放于于R5中,低字节放于中,低字节放于R4中。乘得的积有中。乘得的积有4个字节,按由低字节到高个字节,按由低字节到高字节的次序存于片内字节的次序存于片内RAM中以中以ADDR为首址的区域中。为首址的区域中。 由于由于MCS-51单片机只有一条单字节无符号数乘法指令单片机只有一条单字节无符号数乘法指令MUL,而且要求参加运算的两个字节须放于累加器而且要求参加运算的两个字节须放于累加器A和和B寄存器中,而乘得寄存器中,而乘得的结果高字节放于的结果高字节放于B寄存器
59、中,低字节放于累加器寄存器中,低字节放于累加器A中。因而两字节中。因而两字节乘法须用四次乘法指令来实现,即乘法须用四次乘法指令来实现,即R6 R4、R7 R4、R6 R5和和R7 R5,设,设R6 R4的结果为的结果为B1A1,R7 R4结果为结果为B2A1,R6 R5的的结果为结果为B3A3,R7 R5的结果为的结果为B4A4,乘得的结果须按下面的关系,乘得的结果须按下面的关系加起来。加起来。R7R6R5R4B1A1B2A2B3A3B4A4C2C1C4C3+4-6-2 多字节无符号数乘除运算2022-6-2744即乘积的最低字节即乘积的最低字节C1只由只由A1这部分得到,乘积的第二字节这部分
60、得到,乘积的第二字节C2由由B1、A2和和A3相加得到,乘积的第三字节相加得到,乘积的第三字节C3由由B2、B3、A4以及以及C2部分部分的进位相加得到,乘积的第四字节的进位相加得到,乘积的第四字节C4由由B4和低字节的进位相加得和低字节的进位相加得到。由于在计算机内部不能同时实现多个数相加,因而我们用累加到。由于在计算机内部不能同时实现多个数相加,因而我们用累加的方法来计算的方法来计算C2、C3和和C4部分,用部分,用R3寄存器来累加寄存器来累加C2部分,用部分,用R2寄存器来累加寄存器来累加C3部分,用部分,用R1寄存器来累加寄存器来累加C4部分,另外用部分,另外用R0作作指针来依次存放指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全新2024年上海劳动局公积金缴纳合同3篇
- 包含2024年度的二手房屋居间交易合同3篇
- 网络舆情应急处置
- 2024年骨科专科护理工作个人年度总结
- 客户精细化分析及管理
- 房屋及土地使用权买卖合同20243篇
- 二零二四年度房产共有权转移合同
- 二零二四年城市轨道交通建设与运营管理合同2篇
- 玉林师范学院《基础泰语》2021-2022学年第一学期期末试卷
- 玉林师范学院《复变函数》2022-2023学年第一学期期末试卷
- 酒店前台专业术语常见缩写及解释
- 新教科版三年级上册科学 1.2《水沸腾了》 教案
- 潮州市乡镇信息技术教育的现状和对策
- 一体化净水设备安装、调试、运行操维护说明
- tpe、tpr-SGS检测报告(共4页)
- 行政执法程序流程图
- 士林SC系列变频器使用说明书
- 菜籽油生产加工建设项目可行性研究报告
- 工资流水证明
- 《孙子兵法》全文在线阅读
- 教职工健康体检结果汇总分析报告
评论
0/150
提交评论