汇编语言程序设计方法_第1页
汇编语言程序设计方法_第2页
汇编语言程序设计方法_第3页
汇编语言程序设计方法_第4页
汇编语言程序设计方法_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、2021-10-2613.4 3.4 汇编语言程序设计方法汇编语言程序设计方法2021-10-262 3.4.1 3.4.1 汇编程序约定汇编程序约定汇编语言程序:汇编语言程序: 用汇编语言编写的、完成特定功能的指令序列。用汇编语言编写的、完成特定功能的指令序列。汇编程序:汇编程序: 能将汇编语言能将汇编语言源程序源程序转换成机器语言转换成机器语言目标目标程序程序的系统软件。的系统软件。 汇编语言程序到机器语言程序的转换过程称为汇编。汇编语言程序到机器语言程序的转换过程称为汇编。1 1、手工汇编:、手工汇编:人工查指令表汇编。用于设计短小程序或调试人工查指令表汇编。用于设计短小程序或调试 程序

2、的场合。程序的场合。2 2、机器汇编:、机器汇编:用汇编程序进行汇编。用汇编程序进行汇编。2021-10-263源程序使用机器汇编要考虑汇编程序的约定:源程序使用机器汇编要考虑汇编程序的约定:1 1)按指令格式和语法规则编写程序。按指令格式和语法规则编写程序。 常数的表示:常数的表示:十进制数:十进制数:2020十六进制数:十六进制数:8787H H,0F0H0F0H二进制数:二进制数:0101100101011001B B字符:字符:HH字符串:字符串:“Hello”Hello”。 2 2)使用伪指令提供汇编信息。使用伪指令提供汇编信息。2021-10-264汇编的主要任务:汇编的主要任务:

3、1 1)确定程序中每条汇编语言指令的指令机器码。)确定程序中每条汇编语言指令的指令机器码。2 2)确定每条指令在存储器中的存放地址。)确定每条指令在存储器中的存放地址。3 3)提供错误信息。)提供错误信息。4 4)提供目标执行文件()提供目标执行文件(* *. .OBJOBJ/ /* *. .HEX)HEX)和和 列表文件(列表文件(* *. .LSTLST)。)。一、一、汇编语言指令类型:汇编语言指令类型: 1. 1. 机器指令:机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。指令系统中的全部指令,每条指令有对应的机器代码。 2. 2. 伪指令:伪指令: 汇编控制指令,仅提供汇编

4、信息,没有指令代码。汇编控制指令,仅提供汇编信息,没有指令代码。2021-10-2653.4.2 3.4.2 汇编语言程序设计步骤汇编语言程序设计步骤一、确定方案和计算方法;一、确定方案和计算方法;二、了解应用系统的硬件配置、性能指标;二、了解应用系统的硬件配置、性能指标;三、建立系统数学模型,确定控制算法和操作步骤;三、建立系统数学模型,确定控制算法和操作步骤;四、画程序流程图;四、画程序流程图; 表示程序结构和程序功能。表示程序结构和程序功能。 五、编制源程序。五、编制源程序。 1. 1.合理分配存储器单元和了解合理分配存储器单元和了解 I/O I/O接口地址。接口地址。 2. 2.按功能

5、设计程序,明确各程序按功能设计程序,明确各程序 之间的相互关系。之间的相互关系。 3. 3.用注释行说明程序,便于阅读、用注释行说明程序,便于阅读、 修改和调试。修改和调试。 六、程序的调试六、程序的调试2021-10-266 流程图符号和说明流程图符号和说明: : 将将CPUCPU要执行的操作写在一个个框内,并以一定的次序,用要执行的操作写在一个个框内,并以一定的次序,用带方向箭头的直线把这些框连接起来,指示出带方向箭头的直线把这些框连接起来,指示出CPUCPU的操作过程。的操作过程。此方框图结构称程序框图或程序流程图。此方框图结构称程序框图或程序流程图。 2021-10-267常用程序结构

6、常用程序结构:3.4.3 3.4.3 顺序程序顺序程序 顺序程序按顺序依次执行的程序,又称简单程序。顺序程序按顺序依次执行的程序,又称简单程序。程序走向只有一条路径,是复杂程序结构的基础。程序走向只有一条路径,是复杂程序结构的基础。例:例:双字节变补程序双字节变补程序( (设数据在设数据在R R4 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,#80

7、H#80H;高字节变补高字节变补MOVMOV R4 R4,A A 顺序程序、分支程序、循环程序、公用子程序。顺序程序、分支程序、循环程序、公用子程序。2021-10-268举例举例(顺序)(顺序) 例例3.4.1 三字节无符号数相加,其中被加数在内部三字节无符号数相加,其中被加数在内部RAM的的50H、51H和和52H 单元中;加数在内部单元中;加数在内部RAM的的53H、54H和和55H单元中;要求把相加单元中;要求把相加 之和存放在之和存放在50H、51H和和52H单元中,进位存放在位寻址区的单元中,进位存放在位寻址区的00H 位中。位中。低字节低字节低字节低字节中字节中字节中字节中字节高

8、字节高字节高字节高字节高字节高字节高字节高字节低字节低字节低字节低字节R0R12021-10-269MOVR0,#52HMOVR1,#55HMOVA,R0ADDA,R1MOVR0,ADECR0DECR1MOVA,R0ADDCA,R1MOVR0,ADECR0DECR1MOVA,R0ADDCA,R1MOVR0,ACLRAADDCA,#00HMOV00H,C;被加数的低字节地址被加数的低字节地址;加数的低字节地址;加数的低字节地址;低字节相加;低字节相加;存低字节相加结果;存低字节相加结果;中间字节带进位相加;中间字节带进位相加;存中间字节相加结果;存中间字节相加结果;高字节带进位相加;高字节带进位

9、相加;存高字节相加结果;存高字节相加结果;存放进位的单元地址;存放进位的单元地址;进位送;进位送0000H H位保存位保存程序:程序:MOVC,ACC.0MOV00H,CMOVR0,#20HMOVR0,A2021-10-2610例例3.4.2 3.4.2 将将R2R2中中BCDBCD码数转为二进制数存进码数转为二进制数存进R2R2。 ORG 2000HORG 2000HBCD2BBCD2B:MOV AMOV A, R2 ;R2 ;取入口数据取入口数据 ANL AANL A, #0F0H ;#0F0H ;取出十位取出十位 SWAP A ;SWAP A ;高高4 4位位 低低4 4位位 MOV B

10、MOV B, #0AH#0AH MUL AB ; MUL AB ;十位乘十位乘1010 MOV R3 MOV R3,A ;A ;积暂存进积暂存进R3R3 MOV A MOV A, R2 ;R2 ;再取入口数据再取入口数据 ANL AANL A, #0FH ;#0FH ;取出个位取出个位 ADD AADD A, R3R3 MOV R2 MOV R2,A ;A ;结果结果 R2R2 RET ; RET ;若不是子程序可用若不是子程序可用END END 例例3.4.3 压缩式压缩式BCDBCD码分解成为单字节码分解成为单字节BCDBCD码。码。MOVMOV R R0 0,#40H#40H ;设指针设

11、指针MOVMOV A A,RR0 0 ;取一个字节取一个字节MOVMOV R R2 2,A A ;暂存暂存ANLANL A A,#0FH#0FH ;高半字节清高半字节清0 0INCINC R R0 0MOVMOV R 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 ;保存数据保存数据十位十位十十 个个2021-10-26123.4.4 分支程序分支程序 根据不同条件转向不同的处理程序,这种结构的程序称为根据

12、不同条件转向不同的处理程序,这种结构的程序称为分支程序。分支程序。 80C51指令系统中的指令系统中的条件转移指令条件转移指令、比较转移指令比较转移指令和和位转位转移指令移指令,可以实现分支程序。,可以实现分支程序。由由条件转移指令条件转移指令构成程序判断框部分,形成程序分支结构。构成程序判断框部分,形成程序分支结构。2021-10-26133.4.4.1 3.4.4.1 单重分支程序单重分支程序一个判断决策框,程序有两条出路。两种分支结构:一个判断决策框,程序有两条出路。两种分支结构: 例例3.4.4 求求R R2 2中补码绝对值:中补码绝对值: 正数不变,负数变补。正数不变,负数变补。 M

13、OV AMOV A,R R2 2 JNB ACC. 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 ;结束结束例例3.4.5 假定在外部假定在外部RAM中有中有ST1、ST2和和ST3共共3个连续单元,其中个连续单元,其中 ST1和和ST2单元中分别存放着一个单元中分别存放着一个8位无符号二进制数,要求位无符号二进制数,要求 找出其中的找出其中的大数大数并存入并存入ST3 单元中。单元中。START:CL

14、R C MOV DPTR,#ST1 MOVX A,DPTR MOV R2,A INC DPTR MOVX A,DPTR SUBB A,R2 JNC BIG1 XCH A,R2 BIG0: INC DPTR MOVX DPTR,A RET BIG1: MOVX A,DPTR SJMP BIG0;进位位清进位位清“0”;设置数据指针,指向设置数据指针,指向ST1;取第一个数;取第一个数;第一个数存;第一个数存R2;数据指针加数据指针加1,指向,指向ST2;取第二个数;取第二个数;两数比较;两数比较(第二个数(第二个数第一个数)第一个数);第二个数大转;第二个数大转BIG1(C=0无借位跳)无借位跳

15、);第一个数大整字节交换继续第一个数大整字节交换继续;指向;指向ST3单元单元;存大数;存大数2021-10-2615 例例3.4.63.4.6 将将ASCIIASCII码转换为十六进制数。设码转换为十六进制数。设ASCIIASCII码放在码放在累加器累加器A A中,转换结果放到中,转换结果放到B B中。中。 解:由解:由ASCIIASCII码表码表( (表表1-4)1-4)可知,可知,30H30H39H39H为为0 09 9的的ASCIIASCII码,码,41H41H46H46H为为A AF F的的ASCIIASCII码。将码。将ASCIIASCII码减码减30H(030H(09)9)或或3

16、7H(A37H(AF)F)就可获得对应的十六进制数。程序如下:就可获得对应的十六进制数。程序如下:例例3.4.7 FRT: MOV A,40H ;取行李重量计价单位取行李重量计价单位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:

17、MOV A ,R2 L2: MOV 41H,A ;存结果;存结果M RETG5? :跳:跳WETC :G5:跳:跳WETC G5:顺序执行:顺序执行行李计价:当行李计价:当G5,M=G3; 当当G5,M=G3+(G-5)(5-3) 。3.4.4.2 3.4.4.2 多重分支程序多重分支程序例例3.4.8 :求符号函数求符号函数Y=SGN(X)Y=SGN(X) +1 +1 (当(当 X0X0)SGN(X)= 0 SGN(X)= 0 (当当 X=0X=0) -1 -1 (当当 X0X0)SYMB: MOV A,40H ;取取X JZ STOR ;X=0跳,跳,Y=X JB ACC.7,MINUS

18、;X0(A.7=1跳)跳) MOV A,# 01H ;X0,Y=+1 SJMP STORMINUS:MOV A,#0FFH ;X0,Y= -1 STOR: MOV 41H,A ;保存保存Y RET一、多次使用条件转移指令,形成两个以上判断框。一、多次使用条件转移指令,形成两个以上判断框。2021-10-2618温控系统结构框图温控系统结构框图 电热箱采用电热丝加热,由双向可控硅控制加热量的大小;电热箱采用电热丝加热,由双向可控硅控制加热量的大小; 温度传感器检测电热箱内的温度,经放大与温度传感器检测电热箱内的温度,经放大与A/DA/D转换后进入单片机;转换后进入单片机; 单片机将设定的温度值与

19、检测到的电热箱中的实际温度进行比较,单片机将设定的温度值与检测到的电热箱中的实际温度进行比较,并调节运算后,发出控制信号经光电隔离器去驱动双向可控硅以调节并调节运算后,发出控制信号经光电隔离器去驱动双向可控硅以调节加在电热丝的电压,从而控制电热箱的温度。加在电热丝的电压,从而控制电热箱的温度。电热箱单片机温控系统结构框图电热箱单片机温控系统结构框图2021-10-2619举例(多分支)举例(多分支)例例3.4.9 某温度控制系统,采集的温度值(某温度控制系统,采集的温度值(Ta)放在累加器放在累加器A中。此外,中。此外, 在内部在内部RAM54H单元存放控制温度下限值(单元存放控制温度下限值(

20、T54),), 在在55H单元存放控制温度上限值单元存放控制温度上限值(T55)。)。 若若TaT55,程序转向程序转向JW(降温处理子程序);降温处理子程序); 若若TaT54,则程序转向则程序转向SW(升温处理子程序);升温处理子程序); 若若T55TaT54,则程序转向则程序转向FH(返回主程序)。返回主程序)。 :去:去FH思路:思路: Ta=T55? : TaT55:去去JW TaT55:Ta=T54? :去:去FH : TaT54:去去SW TaT54:去去FH算法算法: (1) TaT55:去去JW (2) TaT54:去去SW (3) T55TaT54:去去FH2021-10-

21、2620程序:程序: CJNE A,55H,LOOP1 AJMP FHLOOP1:JNC JW CJNE A,54H,LOOP2 AJMP FHLOOP2:JC SW FH: RET ;Ta T55:转向:转向LOOP1; Ta=T55 :返回:返回;若若CY=0,表明表明Ta T55,转降温处理程序转降温处理程序 ; Ta T54:转向:转向LOOP2; Ta=T54 :返回:返回;若若CY=1,表明表明Ta T54,转升温处理程序转升温处理程序; T55TaT54,返回主程序返回主程序若若TaT55,程序转向程序转向JW(降温处理子程序);降温处理子程序);若若TaT54,则程序转向则程序

22、转向SW(升温处理子程序);升温处理子程序);若若T55TaT54,则程序转向则程序转向FH(返回主程序)。返回主程序)。2021-10-2621 S0单独按下,单独按下, 红灯亮红灯亮,其余灯其余灯灭;灭; S1单独按下,单独按下, 绿灯亮绿灯亮,其余灯其余灯灭;灭; 其余情况,其余情况, 黄灯亮。黄灯亮。例例3.4.10已知电路如图已知电路如图4-54-5所示,要求实现:所示,要求实现:2021-10-2622解:程序如下解:程序如下SGNL:ANL P1,#11100011B; ORL P1,#00000011B; SL0: JNB P1.0,SL1 ; JNB P1.1,RED ; Y

23、ELW:SETB P1.4 ; CLR P1.2 ; CLR P1.3 ; SJMP SL0 ;SL1: JNB P1.1,YELW ;GREN:SETB P1.3 ; CLR P1.2 ; CLR P1.4 ; SJMP SL0 ; RED: SETB P1.2 ; CLR P1.3 ;绿灯灭绿灯灭 CLR P1.4 ;黄灯灭黄灯灭 SJMP SL0 ;转循环转循环 2021-10-2623解:程序如下解:程序如下SGNL:ANL P1,#11100011B;红绿黄灯灭红绿黄灯灭 ORL P1,#00000011B;置置P1.0、P1.1输入态输入态, P1.5P1.7状态不变状态不变SL0

24、: JNB P1.0,SL1 ;P1.0=0,S0未按下未按下,转判转判S1 JNB P1.1,RED ;P1.0=1,S0按下按下;且且P1.1=0,S1未按下未按下,转红灯亮转红灯亮YELW:SETB P1.4 ;黄灯亮黄灯亮 CLR P1.2 ;红灯灭红灯灭 CLR P1.3 ;绿灯灭绿灯灭 SJMP SL0 ;转循环转循环SL1: JNB P1.1,YELW ;P1.0=0,S0未按下未按下;P1.1=0,S1未按下未按下,转黄灯亮转黄灯亮GREN:SETB P1.3 ;绿灯亮绿灯亮 CLR P1.2 ;红灯灭红灯灭 CLR P1.4 ;黄灯灭黄灯灭 SJMP SL0 ;转循环转循环R

25、ED: SETB P1.2 ;红灯亮红灯亮 CLR P1.3 ;绿灯灭绿灯灭 CLR P1.4 ;黄灯灭黄灯灭 SJMP SL0 ;转循环转循环 二、按分支号转移二、按分支号转移如:当分支号如:当分支号=0,程序转移到,程序转移到ADDR0处;处; 当分支号当分支号=1,程序转移到,程序转移到ADDR1处;处; 。例例3.4.11 有有BR0、BR1、BR2和和BR3共共4个分支程序段,各分支程序段的功能个分支程序段,各分支程序段的功能 依次是从内部依次是从内部RAM256B范围取数、从外部范围取数、从外部RAM低低256B范围取数、范围取数、 从外部从外部RAM4KB范围取数和从外部范围取数

26、和从外部RAM64KB范围取数。并假定范围取数。并假定R0 中存放取数地址低中存放取数地址低8位地址,位地址,R1中存放高中存放高8位地址,位地址,R3中存放分支序中存放分支序 号值。假定以号值。假定以BRTAB作差值表首地址,作差值表首地址, BR0_BRTAB BR3_BRTAB为差值。为差值。 分析:差值分析:差值=分支入口地址分支入口地址该表首址该表首址1、利用查地址表法:、利用查地址表法: MOV A,R3 MOV DPTR,#BRTAB MOVC A,A+DPTR JMP A+DPTRBRTAB: DB BR0_BRTAB DB BR1_BRTAB DB BR2_BRTAB DB

27、BR3_BRTAB BR0:MOV A,R0SJMP BRE BR1:MOVX A,R0SJMP BRE BR2:MOV A,R1ANL A,#0FHANL P2,#0F0HORL P2,AMOVX A,R0SJMP BRE BR3:MOV DPL,R0MOV DPH,R1MOVX A,DPTR BRE: SJMP ;分支转移值送;分支转移值送A(如如R3=2);差值表首址差值表首址(BRTAB=3000H);查表;查表A+DPTR=3002H,(A)=40H ;转移;转移(A+DPTR=3040H);差值表;差值表(=10H) (=20H) (=40H) (=60H);从内部;从内部RAM取

28、数取数;从外部;从外部RAM256B取数取数;从外部;从外部RAM4KB取数取数;高位地址取低;高位地址取低4位位;清;清P2口低口低4位位;发高位地址;发高位地址;从外部;从外部RAM64KB取数取数程序:程序:入口地址:入口地址:3010H3020H3040H3060H差值差值=分支入口地址该表首址分支入口地址该表首址例题(查转移指令表)例题(查转移指令表)例例3.4.12 假定键盘上有假定键盘上有3个操作键,功能说明如下个操作键,功能说明如下表:表: MOV DPTR,#3000HCLR CRLC AJMP A+DPTRAJMP DSAJMP XSAJMP CR 3000H3001H30

29、02H3003H3004H3005H3006H;3000H为基址为基址;进位位;进位位CY清清“0”;A带进位位循环左移带进位位循环左移;转操作键处理程序;转操作键处理程序;转读数据程序;转读数据程序;转写数据程序;转写数据程序;转插入程序;转插入程序2、使用转移指令表法。、使用转移指令表法。用分支转移指令用分支转移指令 AJMP AJMP 对对AJMP指令应将分支序号乘以指令应将分支序号乘以2, 转移范围为转移范围为2KB;对对LJMP指令应将分支序号乘以指令应将分支序号乘以3, 转移范围为转移范围为64KB。2021-10-2627 设分支号已存入设分支号已存入A。把分支程序入口地址存放在

30、表中。把分支程序入口地址存放在表中。 MTJS:MOV 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: ;程序段程序段

31、1 ADDR2: ;程序段程序段2 3、利用堆栈操作法:、利用堆栈操作法:如:如:DPTR=3000H A=3 PC3.4.53.4.5循环程序循环程序3.4.5.1 3.4.5.1 循环程序的构成循环程序的构成各个环节任务:各个环节任务:一、初始化部分:一、初始化部分: 循环准备工作。如:清结果单元、循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。设指针、设循环控制变量初值等。二、循环体:二、循环体: 循环工作部分:循环工作部分: 需多次重复处理的工作。需多次重复处理的工作。 循环控制部分:循环控制部分: 1.1.修改指针和循环控制变量。修改指针和循环控制变量。 2. 2.检测循

32、环条件:满足循环条件,继续循环,否则退出循环。检测循环条件:满足循环条件,继续循环,否则退出循环。三、结束部分:三、结束部分: 处理和保存循环结果。处理和保存循环结果。 允许允许0 0次循环的循环结构:在循环工作之前检测循环条件。次循环的循环结构:在循环工作之前检测循环条件。包含多次重复执行的程序段,循环结构使程序紧凑。包含多次重复执行的程序段,循环结构使程序紧凑。3.4.5.2 3.4.5.2 单重循环单重循环简单循环结构:简单循环结构: 循环体中不套循环。循环体中不套循环。循环控制方法:循环控制方法:计数控制;计数控制;特征标志控制。特征标志控制。一、计数控制一、计数控制设循环计数器,控制

33、循环次数。正计数和倒计数两种方式。设循环计数器,控制循环次数。正计数和倒计数两种方式。2021-10-2630例:例: 求求n n个单字节数据的累加,设数据串已在个单字节数据的累加,设数据串已在4343H H起始单元,数据串长度在起始单元,数据串长度在4242H H单元,累加和单元,累加和不超过不超过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:INCIN

34、CR R0 0 ;修改指针修改指针ADDADDA A,RR0 0 ;累加累加JNC NEXTJNC NEXT ;处理进位(处理进位(C=0C=0跳)跳)INCINCR R3 3 ;有进位,高字节加有进位,高字节加1 1NEXTNEXT:DJNZ DJNZ R R2 2,ADD1 ADD1 ;循环控制:数据是否加完循环控制:数据是否加完?MOVMOV40H40H,A A ;循环结束,保存结果循环结束,保存结果MOVMOV41H41H,R R3 3RETRETR02021-10-2631例:例:为一串为一串7 7位位ASCIIASCII码数据的码数据的D D7 7位加上奇校验,位加上奇校验,设数据

35、存放在片外设数据存放在片外RAMRAM的的21012101H H起始单元,数据起始单元,数据长度在长度在21002100H H单元。单元。 MOV DPTR MOV DPTR,#2100H#2100H MOVX A MOVX A,DPTRDPTR MOV R MOV 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 R

36、DJNZ R2 2,NEXTNEXTDONEDONE:SJMP DONESJMP DONE2021-10-2632 二、特征控制二、特征控制例:例:找正数表中最小值。正数表存在片外找正数表中最小值。正数表存在片外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;修改指针修改指针

37、CJNE ACJNE A,#-1#-1,NEXT1NEXT1;是否为数表结尾?(是否为数表结尾?(A A- -1跳)跳) SJMP DONESJMP DONE;循环结束循环结束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分和不及格人数,成绩单分和不及格人

38、数,成绩单 在在4141H H起始单元。起始单元。设定循环结束标志实现循环控制。设定循环结束标志实现循环控制。3.4.5.3 3.4.5.3 多重循环多重循环例:例:将内存连续单元中无符号数按升序排序。将内存连续单元中无符号数按升序排序。步骤:步骤:每次取相邻单元的两个数比较,决定是否需要交换数据位置。每次取相邻单元的两个数比较,决定是否需要交换数据位置。第一次循环,比较第一次循环,比较N-1N-1次,取到数据表中最大值。次,取到数据表中最大值。第二次循环,比较第二次循环,比较N-2N-2次,取到次大值。次,取到次大值。 第第N-1N-1次循环:比较一次,排序结束。次循环:比较一次,排序结束。

39、循环体中套循环结构。以双重循环使用较多。循环体中套循环结构。以双重循环使用较多。 SORT SORT: MOV MOV A A,#N-1#N-1;N N个数据排序个数据排序 MOVMOV R R4 4,A A;外循环次数外循环次数LOOP1LOOP1: MOV MOV A A,R R4 4 MOV MOV R R3 3,A A;内循环次数内循环次数 MOVMOV R R0 0,#TAB#TAB;设数据指针设数据指针LOOP2LOOP2: MOV MOV A A,RR0 0 ;取二数取二数 MOVMOV B B,A A INC INC R R0 0 MOV MOV A A,RR0 0 CJNE

40、A CJNE A,B B,L1L1;比较(比较(A AB B跳)跳) L1 L1: JNC JNC UNEX UNEX;ABAB,不交换不交换 DECDEC R R0 0 ;否则交换数据否则交换数据 XCHXCH 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 RDJNZ R4 4,LOOP1LOOP1;外循环结束?外循环结束? RETRET2021-10-2635(1)、单循环定时程序:单循环定时程序:MOVR5,#TIMELOOP:NOP

41、 NOP DJNZ R5,LOOP软件延时程序:软件延时程序:1T1T1T2T设:设:f fOSCOSC=6MHz=6MHz, 则则 T=12/6MHz=2T=12/6MHz=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 RM

42、OV 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 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,I2I2

43、2 2 DJNZ R DJNZ R6 6,I1I12 2 RET RET2 2延时时间计算:(设时钟延时时间计算:(设时钟f fOSCOSC=12MHz=12MHz) T=1 T=1 st=(1t=(11+11+1100+2100+2100100255+2255+2100+2100+21)1)T T = 51.303 ms = 51.303 ms1 11001001001002552551001001 1(2 2)、多重循环定时:)、多重循环定时:用循环程序将指令重复执行多次,实现较长时间的延时。用循环程序将指令重复执行多次,实现较长时间的延时。2021-10-26373.4.6 3.4.6

44、算术运算程序算术运算程序3.4.6.13.4.6.1 多字节加减运算程序多字节加减运算程序 多字节加法子程序,多字节加法子程序,Z=X+YZ=X+Y。ADDSADDS:CLRCLRC C MOV R MOV R2 2,#23H#23H LOOPLOOP:MOVMOVA A,RR0 0ADDC ADDC A A,RR1 1 ;加一字节加一字节MOVMOVRR0 0,A A ;存和一字节存和一字节INCINCR R0 0 ;修改指针修改指针INCINCR R1 1DJNZ DJNZ R R2 2,LOOP LOOP ;全部字节加完?全部字节加完?RETRET习题习题1 1:编写十进制多字节加法子程

45、序,编写十进制多字节加法子程序,Z=X+YZ=X+Y。习题习题2 2:编写多字节减法子程序,编写多字节减法子程序,Z=X-YZ=X-Y。思考题:思考题:修改程序使运算结果保存到其他存储单元。修改程序使运算结果保存到其他存储单元。2021-10-26383.4.6.23.4.6.2多字节无符号数乘除运算多字节无符号数乘除运算相加计算多字节乘法程序。步骤:相加计算多字节乘法程序。步骤:1.1.部分积清零;部分积清零;2.2.从最低位开始检测乘数各位,从最低位开始检测乘数各位,为为1 1则部分积对位加被乘数,否则加则部分积对位加被乘数,否则加0 0;3.3.对位方法:被乘数左移或部分积右移。对位方法

46、:被乘数左移或部分积右移。 初值:初值: 0 00 00 0 Cy RCy R4 4R R5 5 右移右移R R6 6R R7 7并检测并检测CyCy + + R R2 2R R3 3 当当Cy=1 Cy=1 Cy R Cy R4 4R R5 5 得部分积并右移对位得部分积并右移对位 乘积最后右移一次乘积最后右移一次 110110 101 101 110 110 000 000 + 110 + 110 11110 11110 例:例:双字节相乘双字节相乘 R R2 2R R3 3R R6 6R R7 7RR4 4R R5 5R R6 6R R7 7 ( (参考参考P221 P221 四四) )

47、解:解:部分积清零,右移检测乘数,决定部分积是否加部分积清零,右移检测乘数,决定部分积是否加 被乘数,部分积右移对位。被乘数,部分积右移对位。循循环环1616次次2021-10-2639无符号双字节快速乘法步骤:无符号双字节快速乘法步骤: R2R3R6R71. R3*R7;2. (R2*R7+ R3*R6)*28 (R2R6) 2163.上述三项求和上述三项求和 程序参考程序参考P223 例例6.6(参看(参看P225P225六六 无符号二进制除法程序无符号二进制除法程序 )例:例:R R2 2R R3 3R R4 4R R5 5R R6 6R R7 7RR4 4R R5 5 ( (余数余数

48、R R2 2R R3 3) )解:解:1.1.判断判断R R2 2R R3 3R R6 6R R7 7?使商不大于使商不大于1616位。位。 2.2.被除数左移被除数左移1 1位,试减除数。位,试减除数。 3. 3.若够减,商加若够减,商加1 1并保留余数。并保留余数。 101110101/ 01110100 0101 1001 0101 1000 0101 0110 0101 1 CyRCyR2 2R R3 3RR4 4R R5 500 - - R R6 6R R7 7 +1 +1 够减够减 1161165=2315=231R R2 2R R3 3 不够减恢复余数不够减恢复余数循环循环161

49、6次次 相减计算多字节除法程序。步骤:相减计算多字节除法程序。步骤:1.对齐高位被除数试减除数。对齐高位被除数试减除数。2.若够减商上若够减商上1,不够减商上,不够减商上0且恢复余数。且恢复余数。3.余数左移或除数右移对位。余数左移或除数右移对位。4.循环重复前循环重复前3步,直至取够相应位数的商。步,直至取够相应位数的商。“四舍五入四舍五入”:得到余数后,判断余数乘:得到余数后,判断余数乘2后后 是否大于除数,若大于除数则是否大于除数,若大于除数则 商再加商再加“1”;否则不加。;否则不加。2021-10-26413.4.6.3 3.4.6.3 码制数制转换程序码制数制转换程序(一一) 十六

50、进制数转换为十六进制数转换为ASCII码;码;(二二) ASCII码转换为十六进制数码转换为十六进制数。 09的的ASCII码:码:3039H;(一)十六进制数转换为(一)十六进制数转换为ASCII码:码:HASC:CJNE A,#0AH,N N:JNC N1(C=0跳跳N1)ADD A,#30HSJMPSE N1:ADD A,#37H SE:RET AF的的ASCII码:码:4146H。2021-10-2642(三三) BCD码与二进制数之间的转换码与二进制数之间的转换 1BCD码转换为二进制数:码转换为二进制数: D = dn-110n-1+dn-210n-2+d1101+d0100 =(

51、 dn-110+dn-2 )10 +dn-3)10 + d1) 10+ d0“整数十翻二整数十翻二”:从最高位开始,按二进制运算法则循环。:从最高位开始,按二进制运算法则循环。“乘十加次低位乘十加次低位”:B=B10+bi 。R R3 300R R4 4001010R R3 3R R4 4+ +( (R R0 0) )R R3 3R R4 4R R0 0RR0 0+1+1介绍乘法转换方式。介绍乘法转换方式。 2021-10-2643“整数二翻十整数二翻十”:从最高位开始,按十进制运算法则循环。:从最高位开始,按十进制运算法则循环。“乘二加次低位乘二加次低位”:D=D2+di 。流程和程序见流程

52、和程序见P235 例例6.152二进制数转换为二进制数转换为BCD码:码:B = bn-12n-1 + bn-22n-2 + + b121 + b020 =( bn-12 + bn-2 )2 + bn-3)2 + b1)+ b0补充补充 参数传递:参数传递:2021-10-2644例例4.11 在内部在内部RAM的的hex单元中存有单元中存有2位十六进制数,试将其转换为位十六进制数,试将其转换为 ASCII码,并存放于码,并存放于asc和和asc+1两个单元中。设(两个单元中。设(hex)=7BH MOVSP,#3FH MAIN: PUSHhex ACALL HASC POPasc (SP=40H) MOVA,hex SWAP A PUSHACC ACALL HASC PO

温馨提示

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

评论

0/150

提交评论