1 / 36

第 4 章 汇编语言 程序设计

第 4 章 汇编语言 程序设计. 第二部分 微机原理. 主讲教师:喻红. 主要内容. 汇编语言的基本概念 汇编语言程序方法. 4.1  汇编语言的基本概念. 一 、程序设计语言. ( 1 )机器语言: 用二进制代码 0 和 1 表示指令和数据的最原始的程序设计语言。 ( 2 )汇编语言: 是一种符号语言。经过汇编后才能被计算机执行。 ( 3 )高级语言: 是以接近于人的常用语言形式编写程序的语言。. 一 、程序设计语言. 目标程序. 汇编语言源程序. 汇编程序. 源程序列表. 二、汇编语言的语句结构.

waseem
Download Presentation

第 4 章 汇编语言 程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章 汇编语言程序设计 第二部分 微机原理 主讲教师:喻红

  2. 主要内容 • 汇编语言的基本概念 • 汇编语言程序方法

  3. 4.1 汇编语言的基本概念 一 、程序设计语言 (1)机器语言: 用二进制代码0和1表示指令和数据的最原始的程序设计语言。 (2)汇编语言: 是一种符号语言。经过汇编后才能被计算机执行。 (3)高级语言: 是以接近于人的常用语言形式编写程序的语言。

  4. 一 、程序设计语言 目标程序 汇编语言源程序 汇编程序 源程序列表

  5. 二、汇编语言的语句结构 (1)汇编语言的指令类型 • 基本指令:指令系统中的指令,是机器能够执行的指令。 • 伪指令:汇编时用于控制汇编的指令,机器不能执行的指令。

  6. (2)汇编语言的语句格式 标号: 操作码 操作数 ;注释 1.标号:将指令首字节的地址赋给标号;不能使用指令助记符等特殊意义的字符,同一程序中不可重复使用。 2.操作码:指令操作的性质和控制要求 3.操作数:操作的对象 4.注释:使程序具有可读性

  7. 三、伪指令 伪指令:是非执行指令,它只是在源程序进行汇编的过程中起某种控制作用。伪指令汇编后不产生目标代码,不影响程序的执行。 常用的伪指令: ORG(Origin)、END; EQU(Equate); DB(Define Byte)、DW( Define Word)DS( Define Store) BIT、DATA

  8. 1.ORG(Origin):设定程序或数据区的起始地址。1.ORG(Origin):设定程序或数据区的起始地址。 ORG 16位地址 2.END:表示汇编语言源程序结束的伪指令。 3.EQU:赋值(或等值)指令。将地址或数据赋值给标号。 标号 EQU 数或汇编符号 ADDR EQU 1600H COUNT EQU R0 MOV DPTR,#ADDR MOV A,COUNT

  9. 4.DB:定义字节数据。从指定地址开始,存储若干个字节的数据或ASCII码字符。4.DB:定义字节数据。从指定地址开始,存储若干个字节的数据或ASCII码字符。 标号:DB 字节常数表 ORG 2000H TAB :DB 14H,26,’BC’ (2000H)=14H; (2001H)=1AH; (2002H)=42H; (2003H)=43H;

  10. 5.DW:定义字数据。从指定地址开始,存储若干个字数据。5.DW:定义字数据。从指定地址开始,存储若干个字数据。 标号:DW 字常数表 ORG 2000H TAB: DW 1432H,26 (2000H)=14H; (2001H)=32H; (2002H)=00H; (2003H)=26H;

  11. 6.DS:定义存储区。从指定地址开始,保留指定数量的存储单元。6.DS:定义存储区。从指定地址开始,保留指定数量的存储单元。 标号:DS 表达式 ORG 1000H TAB: DS 26 7.BIT:位地址符号指令。把位地址赋予给所规定的字符名称。用于定义位符号地址。 字符名称 BIT 位地址

  12. 8.DATA:数据地址赋值指令。将数据地址或代码地址赋予给所规定的标号。8.DATA:数据地址赋值指令。将数据地址或代码地址赋予给所规定的标号。 标号: DATA 表达式 可以先使用后定义。

  13. 4.2 汇编语言程序设计 一、程序设计步骤 1.分析问题 2.确定算法 3.设计程序流程图 4.分配内存单元 5.编写源程序 6.调试程序

  14. 二、顺序程序设计 • 顺序程序:最简单、最基本的程序。 • 特点:程序按照编写的顺序依次往下执行每一条指令,直到最后一条。 例4.2.1将一个字节内的两位BCD码拆开并转换为ASCⅡ码,存入RAM区的两个单元。 解:查17页的表1.6.3可知,数字0~9的ASCⅡ码为30H~39H。 转换方法:将BCD码作为低4位,前面加0011即可成为ASCⅡ码

  15. ORG 2000H MOV R0,#32H MOV @R0,#0 ;32H单元清0 MOV A,30H ;取数 XCHD A,@R0 ;低4位存入32H单元 ORL 32H,#30H ;低位数转换 SWAP A ORL A,#30H ;高位数转换 MOV 31H,A ;高4位存入31H单元 END

  16. 例4.2.2设有两个4位BCD码,分别存放在片内RAM的 50H、51H单元和60H、61H单元中。试编写求这两数之和的程序,结果存放到40H、41H单元中,数据逆序存放。 解 多字节BCD码相加: • 先加低位,再加高位; • 高位相加必须加进位标志C; • BCD码运算时每位相加后进行BCD码调整。

  17. ORG 2000H MOV A,50H ;取一数的低位字节 ADD A,60H ;两数的低位字节相加 DA A ;BCD码修正 MOV 40H,A ;存放低位结果 MOV A,51H ;取一数的高位字节 ADDC A,61H ;两数的高位字节相加 DA A ;BCD码修正 MOV 41H,A ;存高位结果

  18. 三、分支程序设计 分支程序:根据问题的需要,利用条件转移指令形成不同的程序分支,称为。 分支程序的基本形式

  19. 分支程序设计要点: 1.建立转移的测试条件 2.适当的转移指令(控制类转移指令) 3.正确的程序转移控制

  20. 1.双向分支程序例 例4.2.3设数a在30H单元,数b在31H单元中。 当b≥10时,y=a+b; 当b<10时,y=a-b; 计算结果y存入32H中。 解 首先判断b的值是否大于或等于10,然后再根据b的值计算

  21. ORG 1000H MOV A,31H CJNE A,#10,NEQU ;b≠10,转NEQU ADDAB: ADD A,30H ;b=10,计算a+b MOV 32H,A SJMP DONE NEQU: JNC ADDAB ;Cy=0,b>10,转ADDAB SUBAB: CLR C ;Cy=1,b<10,计算a-b MOV A,30H SUBB A,31H MOV 32H,A DONE: SJMP $

  22. ORG 1000H MOV A,31H CLR C; SUBB A,#10; JC SUBAB ;b < 10,转SUBAB ADDAB: MOV A,30H; ADD A,31H SJMP DONE SUBAB: CLR C ;Cy=1,b<10,计算a-b MOV A,30H SUBB A,31H DONE: MOV 32H,A SJMP $

  23. 2.多向分支程序 例4.2.4符号函数, x>0时,y=1; x=0时,y=0; x<0时,y=-1。 解 设变量x存于VAR单元中,函数y存于FUNC单元中,选用位操作类指令JB、JNB判断x的符号位。

  24. ORG 1000H VAR DATA 30H ;定义变量x的单元地址 FUNC DATA 31H ;定义函数y的单元地址 MOV A,VAR ;取变量x JZ COMP ;x=0,转COMP JNB ACC.7,POSI ;x>0,转POSI MOV A,#0FFH ;x<0,-1→y SJMP COMP POSI: MOV A,#1 ;x>0,1→y COMP: MOV FUNC,A SJMP $

  25. 例4.2.5根据R3的值,控制程序转向8个不同的 分支程序。 解法一:采用分支地址表法 表格是每个分支程序的地址 分支程序的首地址为两个字节 解法二:采用转移指令表法 表格是转移到每个分支程序的转移指令 分为两字节转移指令表和三字节转移指令表 解法三:采用地址偏移量表法 表格是每个分支程序的首地址与某个固定地址的差值(偏移量) 偏移量为一个字节,使用指令JMP @A+DPTR

  26. 四、循环程序设计 循环程序:程序设计中,某一段程序重复执行多次,可采用循环程序,以简化程序。 循环程序的结构: 置循环初值 循环体 循环控制 结束

  27. 例4.2.6数据块求和,设有100个单字节数据,连续存放在内部数据存储器中,起始地址为BLOCK单元,数据和存放在RESULT单元中。例4.2.6数据块求和,设有100个单字节数据,连续存放在内部数据存储器中,起始地址为BLOCK单元,数据和存放在RESULT单元中。

  28. ORG 1020H BLOCK DATA 12H ;BLOCK=12H RESUL DATA 10H ;RESUL=10H RESUH DATA 11H ;RESUH=11H MOV A,#0 MOV R0,#BLOCK ;R0为地址指针 MOV R1,#100 ;R1中存放循环次数 MOV R2,#0 ;结果高位清0 LOOP: ADD A,@R0 ;求和 INC R0 ;修改指针 JNC OUT; INC R2; OUT: DJNZ R1,LOOP ;循环控制判断 MOV RESUL,A ;存结果 MOV RESUH,R2 LOOP2: SJMP LOOP2

  29. 例4.2.7寻找最大数 方法:比较、置换

  30. 例4.2.8排序 方法:比较、交换

  31. 例4.2.9 8051单片机的晶振频率为12MHz,设计延时20ms的程序。内循环1ms,外循环20次 ORG 1000H; 机器周期数 MOV R0,#20 ;1 DELAY2: MOV R1,#DIMS ;1 DELAY1: NOP ;1 NOP ;1 DJNZ R1,DELAY1;2 DJNZ R2,DELAY2;2 DIMS的计算: 机器周期tMC=12/fosc=1μs 内循环时间TM内=1ms=12/fosc×(1+1+2)×DIMS 则DIMS=250 总循环时间:T总=(TM内+1+2)×20=20061 μs=20.061ms

  32. 五、子程序设计 在同一个程序中,需要多次进行一些相同的计算和操作,可将这些相同的操作编写为一个独立的程序段,称为子程序。 调用子程序的程序称为主程序,子程序也可调用子程序。 • 调用子程序通过子程序调用指令LCALL和ACALL实现。 • 调用子程序和子程序执行完成返回,都会进行堆栈操作。

  33. 编写子程序时应注意: 1.子程序取名 子程序的第一条指令前必须加标号,该标号为子程序名。 2.正确的传送参数 即满足入口条件和出口条件 入口条件:执行子程序所必须的有关源数据输入 出口条件:子程序执行完毕计算结果输出 3.保护现场和恢复现场 保护现场:进入子程序后,将子程序要使用的寄存器的内容保存到堆栈。 恢复现场:子程序返回前,将保存在堆栈中的内容还原到对应寄存器中。 4.子程序返回 使用子程序返回指令RET

  34. 例4.2.10用程序实现c=a2+b2。设a、b均小于10。 解 本题要求两次平方,所以先编写求平方子程序SQR。 ORG 2000H MOV A,31H ;取a ACALL SQR ;求a2 MOV R1,A ;存a2 MOV A,32H ;取b ACALL SQR ;求b2 ADD A,R1 ; 求a2+b2 MOV 33H,A ;存结果 HERE: SJMP HERE SQR: INC A ;A加1,表格在RET指令后 MOVC A,@A+PC ;查表 RET ;子程序返回,1字节指令 TABl DB 0,1,4,9,16 ;表格 DB 25,36,49,64,81 ;表格 END

  35. 本章结束

More Related