chap4 汇编语言程序设计
- 格式:ppt
- 大小:330.00 KB
- 文档页数:43


第四章 汇编语言程序设计
本章的汇编语言程序设计的主要内容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。在介绍之前,我们还是来学习汇编语言的一些基础知识)
4.1 汇编语言程序设计概述
1、计算机的汇编语言
以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。汇编语言的语句有严格的格式要求)
2、汇编语言的语句格式
MCS-51汇编语言的语句格式表示如下:
[]: []; []
标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。)
操作码:规定语句执行的操作内容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)
分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后
空格( )用于操作码和操作数之间
逗号(,)用于操作数之间,分割两个以上的操作数
第4章 汇编语言程序设计
本章主要介绍了汇编语言程序的基本结构与组成、伪指令及其使用方法、DOS功能调用和BIOS功能调用,以及汇编语言程序设计的基本技术。本章还给出了汇编语言程序上机和调试的实例。通过该实例,可以了解汇编语言程序设计与开发的全过程。本章中介绍的程序设计技术包括简单程序设计、分支程序设计、循环程序设计和子程序设计,每种程序设计均给出了多个具体实例,并对设计思想进行了分析,提供了有价值的程序设计技术和方法。使用这些技术和方法可以为PC机开发基于汇编语言的软件。
1.机器语言与汇编语言(Machine Language and Assembly Language)
计算机程序由一系列指令序列组成。计算机通过对每条指令的译码和执行来完成相应的操作。指令必须以二进制代码的形式存放在内存中,才能够被计算机所识别和理解,并加以执行。由二进制代码表示的指令称为机器指令,相应的程序称为机器语言程序。
机器语言程序由0、1二进制代码组成,不便于编程和记忆。由此产生了用指令助记符表示的汇编语言指令,对应的程序称为汇编语言程序。
例4-1 将4位二进制数转换为ASCII码字符。当数在0000B-1001B时,对应的ASCII码为‘0’-‘9’;当数在1010B-1111B时,对应的ASCII码为‘A’-‘F’。设待转换的数据已在累加器AL中(低4位)。8086汇编语言程序如下:
AND AL,0FH
CMP AL,0AH
JB NUM
ADD AL,07H
NUM: ADD AL,30H
RET
对例4-1程序进行汇编以后,得到8086汇编指令对应的机器代码(用十六进制数表示),如表4.1所示。在表4.1中,第一列表示机器代码存放的内存地址,该地址与机器所处的环境有关;第二列表示8086机器代码,每条指令的机器代码由一个或几个字节组成;第三列表示汇编指令,由指令助记符和操作数组成。指令前可能有标号,表示该指令第一个字节所在的地址。
第四章 汇编语言程序设计
4-1 若晶振为12MHz,试编制延时2ms和1s子程序。
4-2 将20H单元中8位无符号数,转换成3为BCD码并存放在30H(百位)和31H(十位)单元中。
4-3 将30H单元内的2个BCD数相乘,乘积位BCD数,并把乘积存放在31H单元。
4-4 试求21H和20H单元中16位带符号二进制补数码的绝对值,并送回20H和21H单元,高位在先,低位在后
4-5 试求内部RAM30H~37H单元中8个无符号数的算术平均值,结果存入38H单元。
4-6 试编一数据块搬迁程序。将外部RAM2000H~204FH单元中的数,移入内部RAM30H~7FH单元中。
4-7 在内部RAM的BLOCK开始的单元中有一无符号数据块,数据块长度存入LEN单元。试编程求其中的最小数并存入MINI单元。
4-8 在内部RAM的BLOCK开始的单元中有一带符号数据块其长度存入LEN单元。试编程求其中正数和负数的代数和,并分别存入PSUM与MSUM指向的单元中。
4-9 在内部RAM的BLOCK开始的单元中有一无符号数据块,其长度存入LEN单元。试编程重新按递增次序排列,并存入原存储区
4-10 试编程将(R2R3)中的二进制数转换成BCD码,并存入R0指向的单元中。用除以10次幂取商法编程。
4-11 试编程将R0指向的内部RAM中16个单元的32个十六进制数,转换成ASCII码并存入R1指向的内部RAM中。
4-12 在内部RAM的ONE和TWO单元各存有一带符号X和Y。试编程按下式要求运算,结果F存入FUNC单元。
X+Y
若X位正奇数
X∧Y 若X位正偶数
F= X∨Y 若X位负奇数
X+Y 若X位负偶数
第四章 汇编语言程序设计上机练习及简单程序设计
一、 汇编语言程序上机过程
1、掌握常用工具软件 PE,MASM和LINK的使用。
2、伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。
3、利用的 1号功能实现键盘输入的方法。
4、了解.EXE文件和.COM文件的区别及用INT 21H 、INT 4CH号功能返回系统的方法。
程序:
data segment
message db 'This is a sample program of keyboard and disply'
db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'
data ends
stack segment para stack 'stack'
db 50 dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov dx,offset message
mov ah,9
int 21h
again: mov ah,1
int 21h
cmp al,1bh
je exit
cmp al,61h
jc nd
cmp al,7ah
ja nd
and al,11011111b
nd: mov dl,al
mov ah,2
int 21h
jmp again
exit: mov ah,4ch
int 21h
code ends
end start
实验步骤:
1、用用文字编辑工具(记事本或EDITPLUS)将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
4、在DOS状态下运行LINK产生的.EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。