MSC-51指令系统新ppt课件

上传人:钟*** 文档编号:1312327 上传时间:2019-10-13 格式:PPT 页数:127 大小:1.06MB
返回 下载 相关 举报
MSC-51指令系统新ppt课件_第1页
第1页 / 共127页
MSC-51指令系统新ppt课件_第2页
第2页 / 共127页
MSC-51指令系统新ppt课件_第3页
第3页 / 共127页
点击查看更多>>
资源描述
第二章 MCS-51指令系统,物理系,1,重点内容,1.寻址方式,2.111条指令,3.伪指令,4.程序设计,2,高级语言:,2-1 指令系统概述,一、指令和程序设计语言 指令:CPU根据人的意图来执行某种操作的命令。 程序:按照人们的要求完成某项特定任务所编排的指令操作序列。,汇编语言:,机器语言:,程序设计语言:,用二进制代码表示指令和数据。,用助记符表示指令操作功能,用标号表示操作对象。,独立于机器,面向过程,接近自然语言和数学表达式.,3,现在描述计算机指令系统及实际应用中主要采用汇编语言形式。 采用机器语言编写的程序称之为目标程序 采用汇编语言编写的程序称之为源程序。 汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序,这个中间过程叫做汇编。 汇编有两种方式:机器汇编和手工汇编。 机器汇编是用专门的汇编程序,在计算机上进行翻译; 手工汇编是编程员把汇编语言指令逐条翻译成机器语言指令。,4,指令 = 操作码 + 操作数 操作码表示了该指令所能执行的操作功能。 操作数表示参加操作的数的本身或操作数所在的地址。 MCS-51指令格式:,操作码 目的操作数,源操作数,二、指令格式,5,指令一般有功能、时间和空间三种属性。 功能属性是指每条指令都对应一个特定的操作功能; 时间属性指一条指令执行所用的时间,一般用机器周期来表示; 空间属性是指一条指令在程序存储器中存储所占用的字节数。 这三种属性在使用中最重要的是功能,但时间、空间属性在有些场合也要用到。,如一些实时控制应用程序中,有时需要计算一个程序段的确切执行时间或编写软件延时程序,都要用到每条指令的时间属性;在程序存储器的空间设计,或相对转移指令的偏移量计算时就要用到指令的空间属性。,6,从空间属性上分为单字节指令(49条)、双字节指令(46条)和最长的三字节指令(只有16条)。 从时间属性上可分成单机器周期指令(64条)、双机器周期指令(45条)和只有乘、除法两条4个机器周期的指令。 可见,MCS-51单片机指令系统在存储空间和执行时间方面具有较高的效率。,7,单字节指令 双字节指令 三字节指令,INC A ADD A,#22H MOV 5EH,4FH,机器码指令格式,8,三 寻址方式 寻找操作数存放单元的地址的方式,共7种方式。 1、立即数寻址 所要找的操作数是一二进制数或十进制数,出现在指令中,用“#”作前缀 MOV A,#20H 2、寄存器寻址 操作数存放在工作寄存器R0 R7中,或寄存器A、B中。 MOV A,R2 3、直接寻址 指令中直接给出操作数的地址。直接寻址可访问128B的RAM单元和特殊功能寄存器。直接寻址的地址占一字节,所以,一条直接寻址方式的指令至少占内存两个单元。 MOV A,30H 或 MOV 30H,DPH,9,;书放在甲抽屉中 ;甲抽屉的钥匙放在乙抽屉中 ;取书,,A中,20H,MOV 30H,#20H,MOV R0,#30H,MOV A,R0,此例中,20H就当成是那本书;30H就当成是甲抽屉; R0就当成是乙抽屉,执行的结果就是将20H这个立即数装入A中。期间也经历了两次寻址,即间接寻址。,4、寄存器间接寻址 指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用“”表示前缀。 例如: “一本书放在甲抽屉中,上了锁;其开锁的钥匙放在乙抽屉中,乙抽屉也上了锁。问如何才能取到哪本书?” 这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书。而寄存器间接寻址也是同样。 例如:,10,(1)R0, R1可寻址内部RAM 00 7FH 共128B单元内容,不能寻址特殊功能寄存器。 MOV A, R0 MOV A, R1 (2)R0, R1可寻址外部RAM 00 0FFH 共256B单元内容。 MOVX A, R0 MOVX A, R1 (3)DPTR寻址外部数据存储器的64KB空间 MOVX A, DPTR ;A(DPTR) MOVX DPTR, A ;(DPTR)A,11,5、变址寻址 操作数地址 = 变地址 + 基地址 基地址寄存器 DPTR 或 PC 变址寄存器 A 该寻址方式常用于访问程序存储器,查表。 如 MOVC A,A + DPTR,12,6、相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址。 例如 “李同学20岁,张同学比李同学大3岁,问张同学多少岁?” 这就是一个相对寻年龄的问题,而相对寻址与此类似。 如 JC 60H ;设(PC) = 2000H为基址,相对偏移量为60H; ; 则当C = 1时,转移的目的地址 = 2000H + 2 + 60H 相对寻址只出现在相对转移指令中。,13,14,7.位寻址 位寻址范围: 20H2FH的16个字节单元中的128位; 部分特殊功能寄存器中的各位 位地址表示: (1)直接使用位地址:对于20H2FH的16个单元共128位的位地址分布是00H7FH。 (2)单元地址.位地址 20H.1 (3)对于特殊功能寄存器,可以直接用寄存器名字加位数或位名表示, 如PSW.3 , 位名:CY, AC。,15,16,一、指令分类 111条指令,共分五大类: 数据传送类;(29条) 算术运算类;(24条) 逻辑运算类;(24条) 控制转移类;(17条) 位操作类:(17条),2-2 MCS-51 指令系统,17,指令中操作数的描述符号: Rn 工作寄存器R0 R7 Ri 间接寻址寄存器R0、R1 Direct 直接地址,包括内部128B RAM单元地址、 26个SFR地址。 #data 8位常数 #data 16 16位常数 addr 16 16位目的地址 addr 11 11位目的地址 rel 8位带符号的偏移地址 DPTR 16位外部数据指针寄存器 bit 可直接位寻址的位,18,A 累加器 B 寄存器B C 进、借位标志位,或位累加器 间接寄存器或基址寄存器的前缀 / 指定位求反 (x) x中的内容 (x) x中的地址中的内容 当前指令存放的地址,19,二、数据传送类指令 1、内部RAM数据传送类 1)一般数据传送指令,20,回忆前述操作数描述符:A,direct,Rn,Ri,#data,DPTR等。 经排列组合可写出下列指令: MOV A,Rn ;(A) (Rn)以下类似。,MOV A,direct MOV A,Ri MOV A,#data MOV Rn,A MOV Rn,direct MOV Rn,#data,21,MOV direct,Rn MOV direct,direct MOV direct,Ri MOV direct,#data MOV Ri,A MOV Ri, direct MOV Ri,#data MOV DPTR,#data16 ;唯一的16位数据传送指令。 上述指令不影响任何标志位,但PSW的P位除外。,(direct),(A),MOV direct,A ;,22,上述指令不影响任何标志位,但PSW的P位除外。 注意:MOV Rn,Rn MOV Ri, Ri MOV Rn, Ri MOV #data, A 等等指令是非法指令。,哇!好容易出错啊!,23,(2) (direct),2)栈操作指令 PUSH direct POP direct 不影响任何标志位。 PUSH direct 指令执行中,机器自动进行两步操作: (1) (SP)+ 1,例1、设(SP) = 09H,(DPTR)= 0123H,分析: 执行 PUSH DPL PUSH DPH 后,各单元中的内容。,(SP),(SP),24,POP direct 指令执行中,机器也自动进行两步操作: (1)(direct) (SP) (2)(SP) (SP) 1 例2、设(SP)= 0BH,(0BH)= 01H,(0AH)= 23H 执行 POP DPH POP DPL 后,各单元中的内容。,25,结论:1)PUSH 与 POP 操作过程刚好相反; 2)进、出栈规则: 先进后出,后进先出。应注意指令书写先后顺序; 3)可用于“保护断点,保护现场”。,26,3、字节交换指令 XCH A,Rn XCH A,direct 整字节交换 XCH A,Ri XCHD A,Ri SWAP A 半字节交换 不影响任何标志位。,27,2、 外部RAM数据传送 MOVX A,Ri MOVX A, DPTR MOVX Ri, A MOVX DPTR,A 执行过程中会使/WR、/RD有效。,28,例3、试编写一程序段,实现将外RAM 0FAH单元中的内容传送到外RAM 04FFH单元中。,解: MOV DPTR,#04FFH MOV R0,#0FAH MOVX A,R0 MOVX DPTR, A,29,3、 查表指令 与ROM之间的数据传送。 MOVC A,A + DPTR MOVC A, A + PC 执行后会使/PSEN有效。 MOVC 含义是传送常数。 以DPTR 为基地址的指令,可在ROM 的64KB范围内查表; 而以PC为基地址的指令只能在(PC)+ 1为中心上、下256B范围内查表。,30,例4、设(A)= 一个BCD码常数,试用查表法获得其相应的ASCII码。,解法II: MOVC A,A+PC TAB:DB 30H,31H,32H,33H DB 34H,35H,36H,37H ,解法I: MOV DPTR,#TAB MOVC A,.A+DPTR TAB:DB 30H DB 31H DB 32H,33H,34H,35H ,31,32,二、逻辑操作类指令,共分两大类:单字节逻辑操作,双字节逻辑操作,共24条。 1、单字节逻辑操作指令 CLR A ;(A) 0 CPL A A中8位按位求反。 循环左移、右移指令: RL A RLC A RR A RRC A 注:左移一位相当于乘2;右移一位相当于除2。,共分两大类:单字节逻辑操作,双字节逻辑操作,共24条。 1、单字节逻辑操作指令 CLR A ;(A) 0 CPL A A中8位按位求反。 循环左移、右移指令: RL A RLC A RR A RRC A 注:左移一位相当于乘2;右移一位相当于除2。,33,2、双字节逻辑操作指令 “与操作”: ANL A,Rn ; (A) (A)(Rn),以下类同。 ANL A,direct ANL A,Ri ANL A,#data ANL direct,A ANL direct,#data 例1、(P1)= 35H,使其高4位输出0,低4位不变。 解: ANL P1,#0FH 此做法称为“屏蔽”位。,34,“或操作”: ORL A,Rn ; (A) (A)(Rn),以下类同。 ORL A,direct ORL A,Ri ORL A,#data ORL direct,A ORL direct,#data,例2、将A中的低3位送入P1中,并且保持P1中高5位不变。 ANL A,#07H ANL P1,#0F8H ORL P1,A ;(P1)= P17P16P15P14P13A2A1A0 这称为“数位组合”。,35,“异或操作”: XRL A,Rn ; (A) (A)(Rn),以下类同。 XRL A,direct XRL A,Ri XRL A,#data XRL direct,A XRL direct,#data 例3、设(P1)= 0B4H = 10110100B,执行: XRL P1,#00110001B 结果按# 0 0 1 1 0 0 0 1 取反,即: (P1)= 1 0 0 0 0 1 0 1 B = 85H 这称为“指定位取反”。,36,在上述ANL、ORL、XRL操作中,用于端口操作时,无论P0 P3是第一,还是第二操作数,都遵循“读修改写”端口锁存器的操作。,37,三、算术运算类指令,包括:加、 减、乘、除;加一、减一。 1、加法指令 ADD A,Rn ;(A) (A)+ (Rn)以下类同。 ADD A,direct ADD A,Ri ADD A,#data 无符号数相加时:若C = 1,说明有溢出(其值 255)。 带符号数相加时:若OV = D7cD6c = 1,说明有溢出。,38,ADDC A,Rn ;(A) (A)+(Rn)+(C) ; 以下类同。 ADDC A,direct ADDC A,Ri ADDC A,#data 上述四条指令多用于多字节数相加。,INC A ;(A) (A)+1 ,以下类同。 INC Rn INC direct INC Ri INC DPTR,39,INC A ;(A) (A)+1 ;以下类同。 INC Rn INC direct INC Ri INC DPTR,例1、设(R0)= 7FH; (7EH)= 40H 执行:INC R0 INC R0 INC R0 后,(R0)= 7FH;,(7EH)= 00H;,(7FH)= 41H,40,DA A ;二 十进制调整指令。 执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二十进制调整。,选择修正值的规则:,41,例2、设(A) = 56H 为56的压缩的BCD码数,(R3)= 67H,(CY)=1 执行 ADDC A,R3 DA A 结果为:124 注意:1)DA指令只能跟在加法指令后面使用; 2)调整前参与运算的两数是BCD码数; 3)DA指令不能与减法指令配对使用,但可以实现对A中 压缩BCD数进行减一操作。 例3、设(A)=30H(压缩BCD码数),执行: ADD A,#99H DA A 后,便实现了30 1 = 29的操作。,42,例4、两个4位BCD码相加,一个存放在(31H)(30H);另一个存放在(33H)(32H);和数拟回存在(31H)(30H)中,试编程实现之。 解: MOV R0,#30H MOV R1,#32H MOV A,R0 ADD A,R1 DA A MOV R0,A,43,INC R1 MOV A,R0 ADDC A,R1 DA A MOV R0,A,INC R0,44,2、减法指令 SUBB A,Rn ;(A) (A)(Rn)(C),以下类同。 SUBB A,direct SUBB A,Ri SUBB A,#data 注意:减法之前先清零C。 DEC A ;(A) (A)1 ,以下类同。 DEC Rn DEC Ri DEC direct,45,例5、设(R0)=7FH,在内RAM中,(7EH)=00H, (7FH)=40H 执行: DEC R0 DEC R0 DEC R0 结果为 :(R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。,46,3、乘法和除法指令 乘法: MUL AB ;(A)(B),积的低8位在A中,积的 ; 高8位在B中; C总为0。 除法: DIV AB ;(A)(B),商在A中,余数在B中。 ; 若(B)= 0 ,则结果不定,(OV)= 1, ;(C)= 0。,47,例6、试将A中的二进制数转换为3位BCD码,其中,百位数存放于31H单元,十位数和个位数压缩后存于30H单元中。,解: MOV B,#100 DIV A,B MOV 31H,A MOV A,#10 XCH A,B DIV A,B SWAP A ADD A,B MOV 30H,A,48,49,四、位操作类指令,包括:位传送指令、条件转移指令、位运算指令。 位操作由单片机内布尔处理器来完成。 位地址的四种表示: 1)使用直接位地址表示;如20H、30H、33H等; 2)使用位寄存器名来表示;如C、OV、F0等; 3)用字节寄存器名后加位数来表示; 如PSW.4、P0.5ACC.3等; 4)字节地址加位数来表示;如20.0、30.4、50.7等。,50,1、位传送指令 MOV C,bit MOV bit,C 功能:(C) (bit);或(bit) (C),2、位状态控制指令 CLR bit ;(bit) 0 SETB bit ;(bit) 1 CPL bit ;(bit) (/ bit),51,例1、编程通过P10线连续输出256个宽度为5个机器周期长的方波。,解: MOV R0,#00H CLR P10 LOOP:CPL P10 NOP NOP DJNZ R0,LOOP,52,ANL C,bit ;(C) (C)(bit) ANL C,/ bit ;(C) (C)(/ bit),ORL C,bit ;(C) (C)(bit) ORL C,/bit ;(C) (C)(/bit),3、位逻辑操作指令,53,例2、用软件实现下图所示的P10 P13间的逻辑运算。,解: MOV C,P1.1 ORL C,P1.2 ANL C,P1.0 MOV P13,C,P1.1,P1.2,P1.0,P1.3,54,4、布尔条件转移指令 有5条,分别对C和直接位地址进行测试, 并根据其状态执行转移。 1)判布尔累加器转移 JC rel ;(C)= 1,转移,否则顺序执行。 JNC rel ;(C)= 0,转移,否则顺序执行。 不影响标志。转移地址 :(PC) (PC)+ rel,55,解: MOV A,30H CJNE A,40H,LOOP1 SETB 7FH SJMP $ LOOP1: JC LOOP2 MOV 20H,A MOV 21H,40H SJMP $ LOOP2: MOV 20H,40H MOV 21H,A SJMP $,例3、比较内部RAM的30H和40H单元中的二个无符号数的大小,将大数存入20H单元,小数存入21H单元,若二数相等,则使内RAM的第127位置1。,56,2)判位变量转移 JB bit,rel ;(bit)= 1,则转移,否则顺序执行。 JBC bit,rel ;(bit)= 1,则转移,否则顺序执行, ; 且无论(bit)是否等于1,均使该位清零。 JNB bit,rel ;(bit)= 0,则转移,否则顺序执行。 ; 不影响标志。,57,例4、试判断A中的正负,若为正数,存入20H单元;若为负数则存入21H单元。,解: JB ACC7,LOOP MOV 20H,A SJMP $ LOOP:MOV 21H,A SJMP $,58,59,五、控制转移类指令,作用:改变程序计数器PC的值,从而改变程序执行方向。 分为四大类:无条件转移指令;条件转移指令;调用指令; 返回指令。,60,LJMP addr16 ;长跳转指令 转移目的地址 addr16 (PC),0000H FFFFH,64KB AJMP addr11 ;绝对转移 转移目的地址的形成:先(PC) (PC)+ 2; 然后 PC15 11不变,PC10 0 addr10 0 64KB = 216 =25211 = 322KB 转移目的地址与(PC)+ 2在同一个2KB范围内。,61,SJMP rel ;短转移,相对寻址。 转移目的地址 = (PC)+ 2 + rel, 所以 rel = 转移目的地址(PC)2 但,实际使用中常写成 SJMP addr16,汇编时会自动转 换成rel。 JMP A + DPTR ;间接转移,散转移指令。 转移目的地址 = (A) + (DPTR) 本指令不影响标志位,不改变 A 及DPTR中的内容。常 用于多分支程序结构中,可在程序运行过程中动态地决定 程序分支走向。,62,例1、设A中为键值,试编写按键值处理相应事件的程序段。,解: MOV DPTR,#KYEG MOV B,#03H MUL AB JMP A + DPTR KYEG: LJMP KYEG0 LJMP KYEG ,63,比较LJMP、AJMP、SJMP、JMP转移的起点和范围:,64,LCALL addr16 ;长调用 ACALL addr11 ;绝对调用,LCALL addr16 ;转移范围64KB,不影响标志位。执行中自动完成如下过程: (PC) (PC) + 3 (SP) (SP)+ 1 (SP) (PC7 0), 保护断点地址低字节; (SP) (SP)+ 1 (SP) (PC15 8),保存断点地址高字节; (PC) addr16 ,目的地址送PC,转子程序。,2、调用指令,65,执行结果:(SP)= 09H,(09H)= 21H,(08H)= 03H, (PC)= 3456H,66,转移范围与(PC)+ 2在同一个2KB内。不影响任何标志位,执行中机器自动完成下列过程: (PC) (PC)+ 2 (SP) (SP)+ 1 (SP) (PC7 0) (SP) (SP)+ 1 (SP) (PC15 8) (PC10 0) addr10 0,ACALL addr11 :,67,3、返回指令 从子程序返回主程序。 RET ;调用子程序返回; RETI ;中断子程序返回。,(PC15 8) (SP) (SP) 1 (PC7 0) (SP) (SP) (SP) 2,其机器自动操作过程如下:,比较两种返回指令含义上的异同点 结论:RET返回地址事先已知,而RETI的返回地址在程序执行中产生的,不固定。不影响标志位,但PSW不能恢复到中断前的状态。,(SP),68,69,空操作指令 NOP ;空操作 不执行任何操作,仅仅使(PC)+ 1,继续执行下条指令,不影响标志位,在ROM中占一个字节。 用于延时调整。,70,71,4、条件转移指令 实现按照一定条件决定转移的方向,分三类: 判零转移指令 比较转移指令 循环转移指令,JZ rel : 若(A)= 0 ,则转移,否则顺序执行。 JNZ rel : 若(A) 0,则转移,否则顺序执行。 转移目的地址 = (PC)+ 2 + rel 不影响任何标志位。,1)判零转移 JZ rel JNZ rel,72,例1、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。,解: MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1: MOVX A,DPTR JZ LOOP2 MOV R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2: SJMP LOOP2,73,2)比较转移指令 功能:比较二个字节中的值,若不等,则转移。 CINE A,#data,rel CJNE A,direct,rel CJNE Ri,#data,rel CJNE Rn,#data,rel,该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。 转移目的地址 = (PC)+ 3 + rel 若第一操作数内容小于第二操作数内容,则(C)= 1,否则(C)= 0。,74,该类指令可产生三分支程序: 即,相等分支;大于分支;小于分支。,75,例2、设P1口的P1.0 P1.3为准备就绪信号输入端,当该四位为全1时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。,解: MOV A,P1 ANL A,#0FH CJNE A,#0FH,WAIT ;P1.0 P1.3不为全1时,返 ; 回WAIT MOV A,R2 ,76,3)循环转移指令 DJNZ Rn,rel ;(二字节指令) DINZ direct,rel ;(三字节指令) 本指令也为双功能指令,即减1操作和判断转移操作。 第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。 转移目的地址 = (PC)+ 2或3 + rel,77,例3、将8031内部RAM的40H 4FH单元置初值#A0H #AFH。,解: MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP: MOV R0,A INC R0 INC A DJNZ R2,LOOP ,78,79,伪指令是告诉汇编程序,如何汇编源程序的指令。 伪指令既不控制机器的操作,也不能被汇编成机器代码, 故称为伪指令。,1、起始地址伪指令 ORG ORG addr16 用于规定目标程序段或数据块的起始地址, 设置在程序开始处。 2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。 一个程序中只出现一 次,在末尾。,2-3 伪指令,80,3、赋值伪指令 EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。 格式: 标号名称 EQU 数值或汇编符号 “标号名称”在源程序中可以作数值使用,也可以作数据地址、 位地址使用。先定义后使用,放在程序开头。 4、定义字节伪指令 DB 告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。 格式: 标号: DB 字节数据或字节数据表 5、定义字伪指令 DW 从指定地址开始,定义若干个16个位数据,高八位存入低地址; 低八位存入高地址。,81,例、 ORG 1000H PIOI:DW 7654H,40H、12、AB,6、数据地址赋值伪指令 DATA 将表达式指定的数据地址赋予规定的字符名称 格式: 字符名称 DATA 表达式 注:该指令与EQU 指令相似,只是,可先使用后定义, 放于程序开头、结尾均可。,82,7、定义空间伪指令 DS 从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。 格式: 标号: DS 表达式 例2、 ORG 1000H DS 0AH DB 71H,11H,11H ;从100BH开始存放 ;71H11H、11H。,注:DB、DW、DS 只能用于程序存储器; 而不能用于数据存储器。,83,8、位地址赋值伪指令 BIT 将位地址赋予规定的字符名称。 格式: 字符名称 BIT 位地址,例3、 X1 BIT P12 相当于 X1 EQU 92H,84,MCS -51传送指令示意图,小 结,数据传送类指令,85,数据传送类指令一览表,86,数据传送类指令一览表,87,算术运算类指令,算术运算指令,88,算术运算指令,89,影响标志位的指令,90,影响标志位的指令,91,逻辑运算类指令,逻辑运算指令,92,控 制 转 移 指 令,93,位操作类指令,位 操 作 指 令,94,23 MCS-51 汇编语言程序设计,一、编程步骤 1、分析问题:对需要解决对问题进行分析,有正确的理解。 2、确定算法:即如何将实际问题转化成程序模块来处理。 3、画程序流程图: 4、编写程序。 由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由14个部分组成,其格式是: 标号指令助记符操作数;注解,95,二、汇编程序功能,源程序 (汇编指令程序),目标程序 (机器码指令程序),汇编指令与机器码指令有一一对应的关系。 汇编程序是一种翻译程序,将源程序翻译成目标程序。,96,三、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。,1、手工汇编: 第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出; 第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。,97,源程序,目标程序,地址,ORG 1000H START:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP $ END,第一次汇编,第二次汇编,1000 A82F 1002 7A00 1004 E6 1005 FB 1006 0B 1007 80NEXT 1009 08 100A B644NEXT 100D 0A 100E DBLOOP 1010 8A2A 1012 80FE,A82F 7A00 E6 FB 0B 8005 08 B64401 0A DBF9 8A2A 80FE,98,2、机器汇编 两次扫描过程。 第一次扫描:检查语法错误,确定符号名字; 建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。 第二次扫描:是在第一次扫描基础上,将符号地址转换成 地址(代真); 利用操作码表将助记符转换成相应的目标码。,99,四、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。 伪指令既不控制机器的操作,也不能被汇编成机器代码, 故称为伪指令。,1、起始地址伪指令 ORG ORG addr16 用于规定目标程序段或数据块的起始地址, 设置在程序开始处。 2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。 一个程序中只出现一 次,在末尾。,100,3、赋值伪指令 EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。 格式: 标号名称 EQU 数值或汇编符号 “标号名称”在源程序中可以作数值使用,也可以作数据地址、 位地址使用。先定义后使用,放在程序开头。 4、定义字节伪指令 DB 告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。 格式: 标号: DB 字节数据或字节数据表 5、定义字伪指令 DW 从指定地址开始,定义若干个16个位数据,高八位存入低地址; 低八位存入高地址。,101,例、 ORG 1000H PIOI:DW 7654H,40H、12、AB,6、数据地址赋值伪指令 DATA 将表达式指定的数据地址赋予规定的字符名称 格式: 字符名称 DATA 表达式 注:该指令与EQU 指令相似,只是,可先使用后定义, 放于程序开头、结尾均可。,102,7、定义空间伪指令 DS 从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。 格式: 标号: DS 表达式 例2、 ORG 1000H DS 0AH DB 71H,11H,11H ;从100BH开始存放 ;71H11H、11H。,注:DB、DW、DS 只能用于程序存储器; 而不能用于数据存储器。,103,8、位地址赋值伪指令 BIT 将位地址赋予规定的字符名称。 格式: 字符名称 BIT 位地址,例3、 X1 BIT P12 相当于 X1 EQU 92H,104,105,2-4 汇编语言程序的基本结构及应用举例,程序编写做到:占用存储空间少;运行时间短; 程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。,按结构化程序设计思想,任何复杂程序都可由 顺序结构、 分支结构、 循环结构,106,107,一、顺序程序举例 例1、设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。,分析:,# # # # ¥ ¥ ¥ ¥, , ¥ ¥ ¥ ¥,108,解: 核心指令 ANL ORG 1000H MODE:MOV R0,#60H MOVX A,R0 MOV B,A ANL A,#0F0H SWAP A MOVX R0,A ANL B,#0FH MOV A,B INC R0 MOVX R0,A END,109,二、分支结构与分支程序设计 结构:根据不同的条件,进行相应的处理。 通常用条件转移指令形成简单分支结构。 如: 判(A) = Z 或 NZ ,转移 判(CY)= 1 或 0 ,转移 判(bit)=1 或 0 ,转移 CJNE 比较不相等转移,110,例3、设a存放在累加器A中,b存放在寄存器B中,要求按下式 计算Y值,并将结果Y存于累加器A 中,试编写程序。 a-b (a0) Y = a+b (a 0),解:本题关键是判a是正数,还是负数;由ACC.7便知。 ORG 1000H BR: JB ACC.7,MINUS CLR C SUBB A,B SJMP DONE MINUS: ADD A,B DONE: SJMP END,111,例4、设有两个16位无符号数NA,NB分别存放在8031单片机内部RAM的40H、41H及50H、51H单元中,当NA NB时,将内部RAM的42H单元清0;否则,将该单元置成全1,试编程。 解法I:因为无16位数的比较指令,所以,只能用8位数的比较 指令。 (画出流程框图),112,解: ORG 2000H CMP:MOV A,50H CJNE A,40H,CMP1 MOV A,51H CJNE A,41H,CMP1 SJMP NHIGHE CMP1:JC HIGHE NHIGHE:MOV 42H,#0FFH SJMP DONE HIGHE:MOV 42H,#00H DONE:SJMP END,113,解法II:先假设NA NB,再来判断是否NA NB ORG 3000H CMP2:MOV R0,#00H MOV A,50H CJNE A,40H,CMP3 MOV A,51H CJNE A,41H,CMP3 SJMP NHIGHE CMP3:JC HIGHE NHIGHE:MOV R0,#0FFH ;不大于标志 HIGHE:MOV 42H,R0 SJMP END,114,小结: 1、汇编程序有哪三种基本结构? 2、构成分支程序,常用到哪些判断语句?,顺序程序 每条指令只执行一次; 分支程序 根据不同条件,会跳过一些指令,而转去 执行另一些指令 共同点: 每条指令至多执行一次。但是,实际中有时要求某程 序段多次重复执行,需要采用循环结构。,115,循环结构不但使程序简练,而且大大节省存储空间。 循环程序包含四部分: 、初始化部分 (循环计数器、变量置初值) 、循环处理部分(主体,需要重复执行的部分) 、循环控制部分(修改地址指针、修改变量、检测 循环结束条件) 、循环结束部分(对结果分析、处理,存放结果),116,先修理,后判断:,先判断,后处理:,117,循环有:单循环、多重循环。 循环次数已知,可用计数器控制循环次数; 循环次数未知,按问题条件控制循环是否结束。,1、单循环程序 (1)循环次数是已知的程序 例1、已知片外RAM的10H单元存放8位二进制数,要求将其转移成相应的ASCII码,并以高位在前,低位在后的顺序,依次存放到片外RAM以11H为首地址的连续单元中,试编程。 解:先将中间单元置成30H,然后判欲转换位是否为1, 若是,则将中间单元内容加1;否则,中间单元内容保持不变。 通过左移指令实现由高到低的顺序进行转换。,118,START:MOV R2,#08H ;循环计数初值(循环次数已知) MOV R0,#10H ;地址指针初值 MOVX A,R0 ;取数 MOV B,A ;暂存B中 LOOP:MOV A,#30H ;将中间单元(A)置成30H JNB B.7,NA ;判断转换的二进制位为0否? INC A ;若为1,则变成1的ASCII码“31H” NA:INC R0 ;修改地址指针 MOVX R0,A ;存放转换的结果 MOV A,B RL A,B ;作好准备,判断下一位 MOV B,A ;暂存 DJNZ R2,LOOP ;判断转换结束否?未完继续 SJMP ,119,(2)循环次数未知的程序 例2、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(CR= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。 解:从首单元开始取数,每取一数判断其是否为CR,是则结束。,ORG 1000H STADA DATA 20H SLANG DATA 1FH CMCR2:MOV R0,#STADA-1 MOV B,#0FFH,CRLOP:INC R0 INC B MOVX A,R0 CJNE A,#0DH,CRLOP MOV SLANG,B SJMP END,120,2、多重循环设计 循环体中还包含着一个或多个循环结构,即双重或多重循环。 例3、设8031使用12MHz晶振,试设计延迟100ms的延时程序。,121,内循环延时: (1 + 2 CTR)T = 500us(假设) 则CTR = 250 实际延时:1 + 2 250 1us = 501us 外循环延时:T +(501 + 2T) CTS = 100ms = 100 000us 所以 , CTS = 198.8 取 199 实际延时:1 + (501 + 2)199 = 1000.98ms,122,例4、设在8031内部RAM中存一无符号数的数组,其长度为100,起始地址是30H,要求将它们从大到小排序,排序后仍存放在原区域中,试编者按程。,解: 先举四个数排序的例子 内RAM 第一次外循环 第二次外循环 第三次外循环 30H 0 0 0 3 0 3 0 6 31H 0 3 0 2 0 6 0 3 32H 0 2 0 6 0 2 0 2 33H 0 6 0 0 0 0 0 0,共4 1 = 3 次外循环,123,这就是所谓的“冒泡法”。 4个数排序最多经过 3 次外循环就可排出,每次外循环都包含3次内循环。实际上大多情况不用 3 次外循环就可排完。 对于100个数排序也是如此,用不到99次循环,排序就结束。为了提高排序速度,程序中可设一交换标志位,如10H位, 每次循环中:若有交换则 SETB 10H 若无交换则 CLR 10H 每次循环结束时,测10H位,判断排序是否结束。,124,ORG 1000H BUBBLE:MOV R0,#30H MOV B,#64H CLR 10H DEC B ;长度计数 LOOP:MOV A,R0 ;内循环的入口 MOV 20H,A ;暂存,为交换作准备 INC R0 MOV 21H,R0 CJNE A,21H,BUEU ;若(20H)(21H)转移,125,BUEU: JNC BUNEXT ;(20H)(21H)转移 MOV A,R0 ;若(20H) (21H)则交换 MOV R0,20H DEC R0 ;使R0退格指向小地址 MOV R0,A INC R0 ;恢复R0指向大地址 SETB 10H ;置交换标志 BUNEXT: DJNZ B,LOOP ;内循环是否结束的判断 JB 10H,BUBBLE ;判断标志位为1否?外循环结 ;束的判断 END,126,127,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!