第四章 汇编语言程序设计
汇编语言程序设计
汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
第四章 汇编语言程序设计
一、算术运算符
包括:+,-,*,/(取商),MOD(取余),SHL,SHR 特点:①运算对象及结果均为整数 ②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV MOV
如:加法:1001、1D、2B……
特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和通 信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
类型 返回值 1 2 4 类型 返回值 -1 [FFH] -2 [FEH] DB DW DD
变量
标号
NEAR FAR
数值返回运算符(续)
LENGTH:
•对于一般变量,返回1; •对于DUP定义的变量,返回单元数(直接返回第一
个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
则:COUNT的值为5
COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P136 表4-3)
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。
第4章 汇编语言程序设计
因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)
004第四章汇编语言程序设计
逻辑运算符 关系运算符 分析运算符
属性运算符
其
它
+、-、*、/、MOD
AND、OR、NOT、XOR EQ、NE、LT(<)、GT(>)、LE(<=)、GE(>=) SEG、OFFSET、TYPE、LENGTH、SIZE PTR、THIS、SHORT LOW、HIGH
1.算术运算符
例(1)ARRAY DW 1*2+3-4,56H MOV AX,ARRAY ;汇编后为:MOV AX,1
ASSUME:用于明确段与段寄存器的关系
ASSUME 段寄存器名:段名[,段寄存器名:段名…]
例:ASSUME DS:DSEG,CS:CSEG,ES:ESEG,SS:SESG 例:ASSUME CS:CODE,DS:DATA,ES:DATA 说明: 1. 该伪指令出现在代码段中; 2. 本伪指令只是指示各逻辑段使用段寄存器的情况,并没有
…… MOV BL,AREAB ;BL = 34H
3.段定义伪指令
段名 SEGMENT [定位类型] [组合类型] [‘类别’ …
段名 ENDS
定位类型:说明段的起始地址应有怎样的边界值:
BYTE:×××× ×××× ×××× ××××B, 即段可以从任何地址开始;
WORD:×××× ×××× ×××× ×××0B, 即段的起始地址必须为偶地址;
执行的起始点,一个程序只有一个起始点 所有的可执行性语句必须位于某一个代码段内,说明
性语句可根据需要位于任一段内 通常,程序还需要一个堆栈段
源程序由语句序列构成
汇编语言语句行
标号/名字: 操作码 操作数 ;注释
汇编语言源程序的格式 源程序由若干各段组成。每段以 SEGMENT开始,以ENDS结束,整个源 程序以END结束。
第4章 汇编 语言程序设计
汇编时,遇到“ 就停止“翻译” 因此, 汇编时,遇到“;” 就停止“翻译”。因此,注释字 段不会产生机器代码。 段不会产生机器代码。 4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息, 在汇编语言源程序中应有向汇编程序发出的指示信息, 向汇编程序发出的指示信息 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令来实现 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令不属于指令系统中的汇编语言指令,它是程序员 伪指令不属于指令系统中的汇编语言指令, 发给汇编程序的命令,也称为汇编程序控制命令。 发给汇编程序的命令,也称为汇编程序控制命令。 命令 汇编程序控制命令 只有在汇编前的源程序中才有伪指令。 “伪”体现在 只有在汇编前的源程序中才有伪指令。 汇编后,伪指令没有相应的机器代码产生。 汇编后,伪指令没有相应的机器代码产生。 没有相应的机器代码产生 伪指令具有控制汇编程序的输入/输出、 伪指令具有控制汇编程序的输入/输出、定义数据和符 号、条件汇编、分配存储空间等功能。 条件汇编、分配存储空间等功能。
6
经过十几年努力,C51已成为单片机的实用高级编程语言。 经过十几年努力,C51已成为单片机的实用高级编程语言。 已成为单片机的实用高级编程语言 尽管目前已有不少设计人员使用C51来进行程序开发, 尽管目前已有不少设计人员使用C51来进行程序开发,但在 C51来进行程序开发 对程序的空间和时间要求较高的场合,汇编语言仍必不可少 程序的空间和时间要求较高的场合, 空间 要求较高的场合 。 在这种场合下,可使用C语言和汇编语言混合编程。 在这种场合下,可使用C语言和汇编语言混合编程。在很多 需要直接控制硬件且对实时性要求较高的场合,则更是非用 需要直接控制硬件且对实时性要求较高的场合, 汇编语言不可。 汇编语言不可。 掌握汇编语言并能进行程序设计, 掌握汇编语言并能进行程序设计,是学习和掌握单片机程 序设计的基本功之一。 序设计的基本功之一。 基本功之一 4.1.2 汇编语言语句和格式
第四章-汇编语言程序的设计
第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
第4章-汇编语言程序设计
*
目标文件中的段与目标存储器之间的关系:
目标文件
目标存储器
.bss
.data
.text
RAM
E2PROM
ROM
第4章 汇编语言程序设计
*
3. 段定义伪指令
汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分:
;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;0123h放入.data段 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令
;初始化数据段 ;3组数据放入.data段
第4章 汇编语言程序设计
*
汇编语言源程序:
链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。
第4章 汇编语言程序设计
*
4.2.1分段结构 所谓“段”就是在存储器映像中占据连续空间的一段独立的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。
第4章 汇编语言程序设计
*
C源文件
C编译器
汇编 源文件
汇编器
汇编 源文件
COFF 目标文件
链接器
可执行的 COFF文件
宏源文件
存档器
宏库
存档器
目标 文件库
建库工具
运行时 支持库
EPROM 编程器
交叉引用 列表器
调试工具
绝对地址 列表器
04_汇编语言程序设计完整
第4章 汇编语言程序设计 类型属性(TYPE):指变量占用存储单元的字节数。若占 用一个字节,称为字节变量,其类型为BYTE:若占用两个字 节,称为字变量,其类型为WORD;若占用4个字节,称为双 字变量,其类型为DWORD。
第4章 汇编语言程序设计
2) 伪指令语句
伪指令语句也叫指示性语句,它只是为汇编程序在翻译汇 编语言源程序时提供有关信息,并不翻译成机器代码,所以也 不占用执行时间。 伪指令的格式为:
【符号名】 伪指令定义符 【参数表】 【;注释】
实际上,汇编语言源程序中还可出现宏指令语句。宏指令
语句就是由若干条指令语句形成的语句体。一条宏指令语句的
果程序中有堆栈段,也需要把段地址装入SS中。但是,代码段
CS不需要这样做,这一操作是在程序初始化时完成的。
第4章 汇编语言程序设计 为了对段定义作进一步地控制,SEGMENT伪操作添加有类 型及属性的说明,其格式如下:
<段名> SEGMENT [定位类型][组合类型][使用类型]
[类别] … <段名> ENDS 在一般情况下,这些说明可以不用。但是,如果需要用连 接程序把本程序与其他程序模块相连接时,就需要使用这些说 明。
ASSEMBLER)两种。我们采用QASM2.7版来说明汇编程序所提供的
伪操作和操作符,操作流程如图所示。
第4章 汇编语言程序设计
出错 编辑程序 EDLINE WPS WORD EDIT 文件 EXMP.ASM 汇编程序 ASM MASM TASM
文件 EXMP.OBJ (EXMP.LST) (EXMP.CRF)
串、?、用逗号隔开的上述各项或DUP(表达式)。
第四章 汇编语言程序设计
(1)OFFSET运算符 格式:OFFSET 变量或标号 功能:分离出其后变量或标号的偏移地址。 例如:MOV BX,OFFSET BUF (2)SEG 运算符 格式:SEG 变量或标号 功能:分离出其后变量或标号所在段的段首址。 例如:MOV AX,SEG NEXT MOV DS,AX
(3)TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量, 将返回该变量的类型对应字节数;如果是标号,则返 回代表标号类型的数值。它们之间的关系见下表所示
标号:指令助记符 操作数,操作数
;注释
•
伪指令语句
– – – 在汇编时不产生目标代码,只为汇编程序提供汇编时 所需要信息 完成数据定义、存储区分配、段定义、段分配、指示 程序结束等
名字 伪指令指示符 操作数,操作数
;注释
第四章 汇编语言程序设计
• 数据项:常数、变量、标号
变量:存放在存储单元中的值。 ⅰ)段属性(SEGMENT):变量所在的逻辑段基址 ⅱ)段的偏移属性(offset):表示变量在逻辑段中离段起点 的字节数。变量的段属性和偏移属性构成了变量的逻辑地址 ⅲ) 类型属性(type):表示变量占用存储单元的字节数 DB( 1),DW( 2),DD (4),DQ(8),DT(10) 标号 ⅰ)段值(SEGMENT):标号所在的段地址 ⅱ)段内偏移地址(offset):标号地址与所在段的段首址之间 的偏移地址字节数 ⅲ)类型(TYPE):在转移指令中标号可转移的距离
第四章 汇编语言程序设计
2、段分配伪指令ASSUME 格式:ASSUME 段寄存器:段名 [,段寄存器: 段名] 功能:建立段寄存器与段之间的对应关系。该伪 指令一般出现在代码段中。
3、设置段地址(把段地址装入相应段寄存器) DS、ES、SS段地址装入用MOV指令完成,CS 段不需要,代码段的这一操作在程序初始化时完 成。
第4章 汇编语言程序设计
例: 三字节无符号数相加,其中被加数在内部RAM 的50H、51H和52H 单元中;加数在内部RAM的53H、 54H和55H单元中;要求把相加之和存放在50H、 51H和52H单元中,进位存放在位寻址区的00H位中。
内部RAM
50H 51H 52H
高字节 低字节
53H 54H 55H
R1→55H
结 束
常用程序结构:
顺序程序、分支程序、循环程序。
4-3
顺序程序
顺序程序又称简单程序,程序走向只有一条路径。 例:双字节求补程序(设数据在R4R5中): 开 始 CLR C MOV A,R5 ;取低字节 处 理 CPL A ADD A,#01H ;低字节变补 处 理 MOV R5,A MOV A, R4 ;取高字节 处 理 CPL A ADDC A,#00H ;高字节变补 结 束 MOV R4,A
片内 RAM 42H 0 十 41H 0 个 40H 十 个
4 -- 4
分支程序(参见书P49-57)
分支程序就是在程序执行过程中要判 断某些条件,当条件成立后程序转移到不 同的功能处运行。在MCS-51单片机中条件 转移指令都可以用在分支程序中。 (复习、参见书P38---39) (1)测试条件符合转移,如: JZ、JNB …等
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和 列表文件(*.LST)。
一、汇编语言指令类型:
1. 机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。
在源程序中只能有一条END指令
第4章汇编语言程序设计
MOV AL ,BYTE PTR AARRAY
汇编语言程序设计基础
4.ASSUME伪指
令
ASSUME 伪 指 令 告 诉 汇 编 程 序 (MASM.EXE)在对源程序汇编时,源程序 中的段名与哪个段寄存器建立关系。这种关 系只是一种承诺关系,汇编程序对源程序汇 编时,承认这种关系,但段寄存器的值并未 确定,用户必须在代码段一开始用MOV指令 对DS、ES、SS初始化。
汇编语言程序设计基础
汇编语言源程序的完整结构
STACK SEGMENT STACK DB 256 DUP(?)
TOP LABEL WORD STACK ENDS DATA1 SEGMENT
用DB、DW等伪指令定义的段的实体 DATA1 ENDS
……
……
汇编语言程序设计基础
DATA2 SEGMENT
SS:0000 H
SS:00FF H 0100
H
……
256B堆栈
区 TOP具有该单
TOP
元的偏移地址 属性,但不占
用该单元。
汇编语言程序设计基础
由于堆栈指针SP初始化后要指向栈底+1 单元,所以上述程序段中有:
……
MOV AX , STACK
MOV SS , AX
此段程序完成对
MOV SP , OFFSET TOP SS、SP的初始
即它们的边界地址(20位地址)应分别 可以被256、16、2、1除尽,分别称为以 页、节、字、字节为边界。
汇编语言程序设计基础
在实际应用中,每个段的定位类型常 选PARA(节)型。因为若选PAGE(页) 型,将会使相邻的段间有较大空间的浪 费;而选WORD或BYTE型,又很难做 到使一个段的偏移地址从0000H开始。
第4章(汇编语言程序设计)
本章要点
1. 掌握汇编语言语句格式
2. 掌握段定义源程序格式
3. 了解指令与伪指令的区别,掌握常用伪指令 的使用。
4. 掌握常量表达式、变量的定义及应用;变量、 标号的属性。 5. 掌握基本DOS功能的调用
4.1 8086汇编语言概述
汇编语言是利用指令的助记符、符号地址、 标号来编写的语言,它是机器语言的符号 表示,是低级语言。 汇编语言是面向机器的,是和CPU密切相 关的。 汇编语言编写的程序效率高,节省内存, 运算速度快。
伪指令语句主要完成变量定义、存储 器分配、指示程序开始和结束、段定义、 段分配等。 伪指令语句没有对应的机器代码,它 是由汇编程序(MASM)对源程序汇编期 间进行处理的。
4.2.1 符号定义语句
1.EQU 格式: 符号名 2.= EQU 表达式 功能: 定义符号名
格式: 符号名 = 表达式
功能:与EQU相同
标号、变量与标识符
• 标号是反映指令位置(逻辑地址)的标识符, 后跟一个冒号分隔。 • 变量是反映伪指令位置(逻辑地址)和属性 的标识符,后跟空格或制表符分隔,没有冒 号。 • 标识符一般最多由31个字母、数字及规定的 特殊符号(如 _、$、?、@)组成,不能以 数字开头。默认情况下,汇编程序不区别标 识符中的字母大小写。 • 一个程序中,每个标识符的定义是唯 一的,还不能是汇编语言采用的保留字。
语句格式
• ⑴ 指令性语句——由指令构成的语句,它通常对应 一条机器指令,出现在程序的代码段中: • [标号:] 指令助记符 [操作数1][,操作数2][;注释]
操作码
⑵ 说明性语句——由伪指令构成的语句,它通常指示 汇编程序如何汇编源程序:
[名字] 伪指令助记符 参数,参数,… [;注释]
第4章汇编语言程序设计
2000H
MOV
R0,#10
MOV
R1,#30H
START: MOV A,@R1 ;取数
JB ACC.7,NEG
;若为负数,转NEG
JZ ZER0 ;若为零,转ZER0
ADD
A,#02H ;若为正数,求X+2
AJMP SAVE ;转到SAVE,保存数据
ZER0: MOV A,# 64H ;数据为零,Y=100
2.汇编语言的语句格式 汇编语言源程序是由汇编语句(即指令)组成
的。汇编语言一般由四部分组成。 其典型的汇编语句格式如下:
标号: 操作码 操作数 ;注释 START:MOV A,30H ;A←(30H)
即将30H这个存储单元给累加器A
返回本节
4.1.3 伪指令
1.ORG:汇编起始地址
用来说明以下程序段在存储器中存放的起始地址。此后的源程 序或数据块就依次连续存放在以后的地址内, 直到遇到另一 个ORG指令为止。
开始 初始化
修改循环参数
循环结束?
Y
N 循环体
结束部分
结束 (a)当型循环结构
开始 初始化 循环体 修改循环参数
N
循环结束?
Y 结束部分
结束
(b)直到型循环结构
图4-6 循环结构程序流程图
外循环 中循环 内循环
(a)嵌套正确
外循环 内循环 内循环
(b)嵌套正确
外循环 内循环
(c)交叉不正确
图4-7 多重循环示意图
返回本节
4.2 汇编语言程序设计
4.2.1 汇编语方程序设计步骤 4.2.2 顺序程序 4.2.3 分支程序 4.2.4 循环程序 4.2.5 子程序 4.2.6 位操作程序
第4章汇编语言程序设计new
常量
常量的值固定,不能改变,没有属性,是一个 确定的数
用二进制表示时,以B结束;以八进制表示时, 以O或Q结束;用十进制表示,以D结束,D也 可以省略,也可以用科学记数法;用十六进制 表示,以H结束,当十六进制数以“A~E”的开 头时,前面必须加0
常量也可以是字符串,字符串用单引号括起来, 在内存中以字符的ASCII码存放。
操作数
操作数由伪指令具体要求的,有的伪指 令不带操作数,有的伪指令可以带多个 操作数,多个操作数用逗号隔开。
操作数可以是常数、变量、字符串和表 达式,但不能为寄存器。
注释
注释的功能和使用与指令性语句相同
数据项
汇编语言中使用的操作数可以是常数、 寄存器、存储器、变量、标号或表达式
其中常量、变量和标号是三种基本数据 项
其他运算符
圆括号():用来改变运算符的优先级别 方括号[]:用来表示地址表达式或多重变
量的下标
运算符的优先级
优先级 1(最高) 2 3 4 5 6 7 8 9 10(最低)
运算符 () [] LENGTH SIZE PTR OFFSET SEG TYPE THIS CS: DS: ES: SS: HIGH LOW * / MOD SHL SHR +EQ NE LT LE GT GE NOT AND OR XOR SHORT
汇编语言的应用场合
程序执行占用较短的时间,或者占用较 小存储容量的场合。
程序与计算机硬件密切相关,程序直接 控制硬件的场合。
分析系统的底层软件、加密解密软件、 分析和防治计算机病毒。
需提高大型软件性能的场合。
汇编语言的基本定义
汇编语言也是一门计算机语言 比我们已经学过的C语言等其他计算机语
第4章 汇编语言程序设计
功能是从标号指定地址单元开始,在程序存储器中保留由表 达式指定的若干字节空间作为备用空000H
DS
0AH
表达式
;1000H—100AH为保留单元
;从100BH开始存放 ;71H、11H、11H。
DS
DB
71H,11H,11H
§4.1 汇编语言及汇编过程
汇编起始地址命令
§4.1 汇编语言及汇编过程
在一个源程序中,可多次使用ORG指令,来规定不同 的程序段的起始地址。但是,地址必须由小到大排列, 地址不能交叉、重叠。
ORG 2000H ┇ ORG 2500H ┇ ORG 3000H ┇
§4.1 汇编语言及汇编过程
2) END 汇编终止命令
汇编语言源程序的结束标志 用于终止源程序的汇编工作。 在整个源程序中只能有一条END命令 且位于程序的最后。 在程序存储器的连续单元中定义字节数据。
;第1个字
;第2个字 ;第3个字(2005H)=0AH
§4.1 汇编语言及汇编过程
5) EQU 赋值命令 <字符名称> EQU <赋值项>
<赋值项> 可以是常数、地址、标号或表达式。 其值为8位或16位二进制数。
用于给标号赋值。 赋值以后,其标号值在整个程序有效。
TEST EQU 2000H 表示标号TEST=2000H, 在汇编时,凡是遇到标号TEST时,均以2000H来代替。
§4.1 汇编语言及汇编过程
小结: 1. 常用伪指令的功能各是什么? 2. 为什么要对汇编程序进行汇编?
§4.2 汇编语言程序的基本结构
1. 汇编语言程序的基本结构形式 1. 顺序结构 2. 分支结构 程序中含有转移指令 分支结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.3 分支程序设计
第四章 汇编语言程序设计
第四章 汇编语言程序设计
大小写字母的比较和转换
‘A’=41H=01000001B
‘a’=61H =01100001B
‘B’=42H … ‘Z’=5AH=01011001B
‘b’=62H … ‘z’=7AH =01111001B
结论1:大小写字母的ASCII码值相差20H 结论2:大小写字母的ASCII码值仅D5位不同
第四章 汇编语言程序设计
习题2
• 1、在内存XYZ中开始存放了10个带符号数 字节数,判断它们中有多少个正数、多少个 负数,正数的个数存放在DH中,负数的个 数放在DL中。 • 2、在内存BLOCK单元中开始存放10个无符 号数,从中找出最大值和最小值分别送入 MAX和MIN 单元中。 • 3、编制一个查表程序将16进制数2A49H转换 成ASCII码,结果依次存入BLOCK数组的4个 字节中,即程序执行后BLOCK中4个字节内容 成为39H,34H,41H,32H。
第四章 汇编语言程序设计
例4 在首地址BLOCK处存放了10个字数据(无 符号数),编程求其和,存入SUM单元。
.MODEL SMALL .DATA BLOCK DW 1020H,3040H,… SUM DD ? .CODE .STARTUP MOV CX,10 LEA SI,BLOCK MOV AX,0 MOV DX,0 AGAIN:ADD AX,[SI] ADC DX,0 INC SI INC SI LOOP AGAIN MOV SUM,AX MOV SUM+2,DX .EXIT END
第四章 汇编语言程序设计
• 4、编程序将数据串(-10,0,23,12,-8, 9)中最大数和最小数找出来,存入MAX和 MIN中,并计算数据串中各数据项绝对值之 和。 • 5、编写程序,将字符串STRING中的“&” 字符用空格符代替。字符串STRING为 “The day is cloud&rain.”
第四章 汇编语言程序设计
第四章 汇编语言程序设计
4.1 4.2 4.3 4.4 4.5 汇编语言 顺序结构程序 分支程序设计 循环程序设计 子程序设计
第四章 汇编语言程序设计
4.1 汇编语言
4.1.1 汇编语言及语句格式
汇编
汇编语言源程序
目标程序
1、指令语句 [标号:] 助记符 操作数 ;注释 2、伪指令语句 [名字] 定义符 参数 ;注释
CALL FAR PTR 过程名为段间调用,系统将:
2、返回指令 RET 或 RET n
第四章 汇编语言程序设计
例1 输入一个字符,若其ASCII码小于41H, 显示‘N’,否则显示‘C’。
.MODEL TINY .CODE .STARTUP MOV AH,1 INT 21H CMP AL,41H JB NEXT MOV BL,’C’ JMP P NEXT: MOV BL,’N’ P: CALL DISP .EXIT END DISP PROC MOV DL,BL MOV AH,2 INT 21H RET DISP ENDP
第四章 汇编语言程序设计
• 4.1.4
常用伪指令
变量定义类型:DB DW DD DUP 取偏移地址:OFFSET 指定偏移地址:ORG 符号定义:EQU(不占用内存空间) 强制定义符:(BYTE/WORD/DWORD)PTR
例1 ①用比较指令 CMP DEST,SRC ③用逻辑指令 JE EQUL SHR DEST,CL …… JC NEXT EQUL: …… ②用测试指令 NEXT: TEST DEST,SRC JNZ NEXT …… NEXT:
方法1(加减指令): “ADD DL,20H” “SUB DL,20H” 方法2(逻辑指令): “OR DL,20H” “AND DL,0DFH 大小写互换(异或指令): “XOR DL,20H”
第四章 汇编语言程序设计
例2 编程实现将键盘输入的小写字母转换成大写后输 出。
DATA SEGMENT MOV DL,AL BLOCK DB ‘ERROR!’,0DH,0AH,’$’ MOV AH,02H DATA ENDS INT 21H CODE SEGMENT JMP DONE ASSUME CS:CODE,DS:DATA NEXT:LEA DX,BLOCK START: MOV AH,9 MOV AH,1 INT 21H INT 21H DONE:MOV AH,4CH CMP AL,’a’ INT 21H JB NEXT CODE ENDS CMP AL, ‘z’ END START JA NEXT AND AL, 11011111B
第四章 汇编语言程序设计
例3 多位十进制数相加:02233585+03703994,两数在内 存中以DATA1 和DATA2为首址存入,各分配4个字节单 元,以其8位组合BCD码存入(低位在前),两数相加结 果(组合BCD码)送回DATA1处。 .MODEL SMALL AGAIN:MOV AL,[SI] .DATA ADC AL,[DI] DATA1 DD 02233585H DAA DATA2 DD 03703994H MOV [SI],AL .CODE INC SI .STARTUP INC DI LEA SI,DATA1 LOOP AGAIN LEA DI,DATA2 ADC BYTE PTR[SI],0 CLC .EXIT MOV CX,4 END
第四章 汇编语言程序设计
例1
4.4 循环程序设计
③
①
MOV CX,COUNT MOV CX,COUNT AGAIN:JCXZ NEXT AGAIN: …… …… LOOP AGAIN JMP AGAIN ② NEXT: MOV CL,COUNT AGAIN: …… DEC CL JNZ AGAIN
第四章 汇编语言程序设计
2、完整的段定义伪指令
(1)段定义伪指令 段名 SEGMENT [属性] …… 段名 ENDS (2)段寄存器定义伪指令 ASSUME 段寄存器1:段名1,段寄存器2:段名 2,……
3、汇编结束伪指令
对于简化的段结构程序,汇编结束伪指令格式: END 对于完整的段结构程序,汇编结束伪指令格式: END 标号
第四章 汇编语言程序设计
例2 在内存BLOCK开始处存放了10个无符号字 节数,从中找出最大值送入MAX单元中。
.MODEL SMALL XCHG AL,[BX] .DATA NEXT:LOOP AGAIN BLOCK DB 100,60,20,…… MOV MAX,AL MAX DB ? .EXIT .CODE END .STARTUP MOV CX,9 MOV AL,BLOCK LEA BX,BLOCK AGAIN:INC BX CMP AL,[BX] JAE NEXT
DATA4
第四章 汇编语言程序设计
DATA5 DATA6 DATA7 DATA8
DB DW DB DW
? ? ‘ABCD’ ‘AB’,’CD’
返回
---41H 42H 43H 44H 42H 41H 44H 43H
DATA5 DATA6 DATA7
DATA8
第四章 汇编语言程序设计
DATA9 DW 2 DUP (?) DATA10 DB 2 DUP(5,2 DUP(0))
第四章 汇编语言程序设计
4.5 子程序设计
4.5.1 过程定义
过程名 PROC [TYPE] [USES REG] …… RET (或RET n) 过程名 ENDP
SUB1 PROC PUSH AX
PUSH BX
PUSH CX
其中,TYPE 包括: NEAR FAR USES REG:要保护的通用寄存器 如 SUB1 PROC USES AX,BX,CX …… RET 等效于 SUB1 ENDP
……
POP CX
POP BX
POP AX RET SUB1 ENDP
第四章 汇编语言程序设计
4.5.2 调用与返回指令 1、调用指令 CALL 过程名 CALL FAR PTR 过程名
CALL 过程名为段内调用,系统将:
EIP(IP) 新偏移地址 CS EIP(IP) 新偏移地址 新段基址 堆栈 EIP(IP) 堆栈 堆栈 EIP(IP) CS
返回
----05H 00H 00H 05H 00H 00H
DATA9
DATA10
变量和标号的属性
第四章 汇编语言程序设计
变量定义数据的逻辑地址,其属性有段属性、偏移地 址属性、类型属性。 其类型属性如下:BYTE-----字节 WORD-----字 DWORD----双字 PWORD----三字 QWORD----四字 TWORD----五字 标号定义指令的逻辑地址,其属性有段属性、偏移 地址属性、距离属性。 其距离属性如下:NEAR----近程(默认) FAR-----远程
第四章 汇编语言程序设计
开始
2、若从0200H单 元开始有100个有 符号数,编一个 程序检查这些数, 正数保持不变, 负数都取补后送 回。
置循环次数 AGAIN 缓冲区指针
取数AL
AL>0?
N OVER N
Y
AL取相反数后回送Βιβλιοθήκη 修正指针循环结束?结束
Y
第四章 汇编语言程序设计
教学要求
• 1、掌握常用的伪指令 • 2、掌握四种程序结构:顺序、分支、循 环、子程序 • P140: • 1,4,5(选做)
第四章 汇编语言程序设计
4.1.2 数据定义伪指令格式 DB DW 变量 DD 表达式1,表达式2,…… DQ DT
此伪指令把存储单元中的数与一个变量联系 起来。其中:DB------字节类型 DW------字类型 DD------双字类型 DQ------四字类型 DT------五字类型