第四章 汇编语言程序设计

合集下载

汇编语言程序设计

汇编语言程序设计

汇编语⾔程序设计第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章 汇编语言程序设计

第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第四章汇编语言程序设计

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章  汇编 语言程序设计
14
汇编时,遇到“ 就停止“翻译” 因此, 汇编时,遇到“;” 就停止“翻译”。因此,注释字 段不会产生机器代码。 段不会产生机器代码。 4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息, 在汇编语言源程序中应有向汇编程序发出的指示信息, 向汇编程序发出的指示信息 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令来实现 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令不属于指令系统中的汇编语言指令,它是程序员 伪指令不属于指令系统中的汇编语言指令, 发给汇编程序的命令,也称为汇编程序控制命令。 发给汇编程序的命令,也称为汇编程序控制命令。 命令 汇编程序控制命令 只有在汇编前的源程序中才有伪指令。 “伪”体现在 只有在汇编前的源程序中才有伪指令。 汇编后,伪指令没有相应的机器代码产生。 汇编后,伪指令没有相应的机器代码产生。 没有相应的机器代码产生 伪指令具有控制汇编程序的输入/输出、 伪指令具有控制汇编程序的输入/输出、定义数据和符 号、条件汇编、分配存储空间等功能。 条件汇编、分配存储空间等功能。
6
经过十几年努力,C51已成为单片机的实用高级编程语言。 经过十几年努力,C51已成为单片机的实用高级编程语言。 已成为单片机的实用高级编程语言 尽管目前已有不少设计人员使用C51来进行程序开发, 尽管目前已有不少设计人员使用C51来进行程序开发,但在 C51来进行程序开发 对程序的空间和时间要求较高的场合,汇编语言仍必不可少 程序的空间和时间要求较高的场合, 空间 要求较高的场合 。 在这种场合下,可使用C语言和汇编语言混合编程。 在这种场合下,可使用C语言和汇编语言混合编程。在很多 需要直接控制硬件且对实时性要求较高的场合,则更是非用 需要直接控制硬件且对实时性要求较高的场合, 汇编语言不可。 汇编语言不可。 掌握汇编语言并能进行程序设计, 掌握汇编语言并能进行程序设计,是学习和掌握单片机程 序设计的基本功之一。 序设计的基本功之一。 基本功之一 4.1.2 汇编语言语句和格式

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

第4章-汇编语言程序设计

第4章-汇编语言程序设计
第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_汇编语言程序设计完整

04_汇编语言程序设计完整
量位置之间的字节数。对于16位的段,则是16位的无符号数; 对于32位的段,则是32位的无符号数。
第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 段不需要,代码段的这一操作在程序初始化时完 成。

第04章 汇编语言程序设计 39页 0.2M PPT版

第04章 汇编语言程序设计 39页 0.2M PPT版

MOV AL,10100000B OR 00000101B ;(AL)←10100101B
例4-4 关系运算符的应用
MOV AX,5 EQ 101B ;(AX)←0FFFFH
MOV BH,10H GT 16 ;(BH)←0
例4-5 数值返回运算符的应用
K1 DB 30H,31H,32H
K2 DW 4041H,4043H
(4)STACK
(5)MEMORY
(6)AT表达式
4. 类别名
返回
4.2.4 段寻址伪指令
格式:
ASSUME 段寄存器名:段名,段寄存器名:段名,……
例4-15 求从NUM开始的12个无符号字节数的和,结果放在SUM字单元中。
DATA SEGMENT NUM DB 95H,83H,36H,2DH DB 33H,22H,1AH,34H DB 62H,45H,75H,49H SUM DW ?
例4-13
STR1 DB ‘COMPUTER’ ;定义一个字符串,字符串的首地址为STR1 STR2 DW ‘AA’,‘BC’,‘DE’ ;给两个字符组成的字符串分配两个字节存储单元 DATA DW ?,?,? ;为DATA预留6个存储单元
例4-14
DATA1 DB 20 DUP(?) ;为变量DATA1分配20个字节的空间,初值为任意值 DATA2 DW ? ;为变量DATA2分配2个字节的空间,初值为任意值 DATA3 DB 20 DUP(30H) ;为变量DATA3分配20个字节的空间,初值均为30H
K3 DW 20H DUP(0)
K4 DD 50515253H
MOV AL,TYPE K1 ;等效于MOV AL,1
MOV AH,TYPE K2 ;等效于MOV AH,2

第4章 汇编语言程序设计

第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章汇编语言程序设计

第4章汇编语言程序设计
MOV AL,BARRAY 等效于
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章(汇编语言程序设计)

第4章(汇编语言程序设计)
第4章 汇编语言程序设计
本章要点
1. 掌握汇编语言语句格式
2. 掌握段定义源程序格式
3. 了解指令与伪指令的区别,掌握常用伪指令 的使用。
4. 掌握常量表达式、变量的定义及应用;变量、 标号的属性。 5. 掌握基本DOS功能的调用
4.1 8086汇编语言概述
汇编语言是利用指令的助记符、符号地址、 标号来编写的语言,它是机器语言的符号 表示,是低级语言。 汇编语言是面向机器的,是和CPU密切相 关的。 汇编语言编写的程序效率高,节省内存, 运算速度快。
伪指令语句主要完成变量定义、存储 器分配、指示程序开始和结束、段定义、 段分配等。 伪指令语句没有对应的机器代码,它 是由汇编程序(MASM)对源程序汇编期 间进行处理的。
4.2.1 符号定义语句
1.EQU 格式: 符号名 2.= EQU 表达式 功能: 定义符号名
格式: 符号名 = 表达式
功能:与EQU相同
标号、变量与标识符
• 标号是反映指令位置(逻辑地址)的标识符, 后跟一个冒号分隔。 • 变量是反映伪指令位置(逻辑地址)和属性 的标识符,后跟空格或制表符分隔,没有冒 号。 • 标识符一般最多由31个字母、数字及规定的 特殊符号(如 _、$、?、@)组成,不能以 数字开头。默认情况下,汇编程序不区别标 识符中的字母大小写。 • 一个程序中,每个标识符的定义是唯 一的,还不能是汇编语言采用的保留字。
语句格式
• ⑴ 指令性语句——由指令构成的语句,它通常对应 一条机器指令,出现在程序的代码段中: • [标号:] 指令助记符 [操作数1][,操作数2][;注释]
操作码
⑵ 说明性语句——由伪指令构成的语句,它通常指示 汇编程序如何汇编源程序:
[名字] 伪指令助记符 参数,参数,… [;注释]

第4章汇编语言程序设计

第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 位操作程序
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DB 100 DUP(0)
STACK ENDS
MOV AH,2 ;显示高位数字 CODE SEGMENT 'CODE' ;定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CX,1 CYCLE: ADD SUM,CX INC CX ;加上当前数 ;产生下一个新数 CODE ENDS END START MOV AH,4CH INT 21H ;返回操作系统 MOV DL,BH INT 21H
第四章 汇编语言程序设计
基本概念: ①汇编语言:用指令的助记符、符号地址、标号 等来编写的语言。 ②汇编语言源程序:用汇编语言编写的程序(*.asm) ③汇编程序:将汇编语言源程序翻译成目标目标程 有两种语句格式: 序(代码),这个翻译过程称为汇编,翻译软件就 ⑴指令性语句:汇编时翻译成目标代码(机器码), 叫汇编程序。 占代码段空间。 ⑵指示性语句(伪指令):汇编时,不产生目标代 用户 生成 通过 汇编 生成 通过 连接 生成 码,只是为汇编程序提供信息,不占代码段空间。 *.asm *.obj *.EXE
DT:用来定义10个字节,表示每个操作数10个字节
例4-21 操作数是常数或表达式 DA1 DB 10H,20H DA2 DW 1122H,34H DA3 DD 5*10H,1234H
DA1 DA2
10 20 22 11 34 00
DA3
1122H 0034H
50 00 00 00 34 12 00 00
例4-5 IN AL,PORT AND DX,PORT AND 0FEH OUT DX,AX 前一个AND是指令助记符,而后一个AND是 逻辑运算符。
三、关系运算符 有:EQ(相等)、NE(不等)、LT (小于)、GT(大于),LE(小于或等于)、 GE(大于或等于)。 关系运算符的两个操作数必须是数据, 例4-6 MOV AX,10H GT 16 或是同一段内的两个存储单元的地址。进行 MOV BL,6 EQ 0110B 关系运算的比较操作后,结果是一个数值, MOV CX, 12H GE 12 若结果为真,输出全1,即FFH(8位)或 由于表达式12H GE 12 为真所以汇编成: 由于表达式6 EQ 0110B为真所以汇编成: FFFFH(16位)。若结果为假,输出全0。 由于表达式10H GT CX,0FFFFH 16为假所以汇编成: MOV BL,0FFH MOV CX,1 AX,0 注意: MOV BL,1 × ×
五、修改属性运算符 修改属性运算符也经常称作综合运算符 有:段操作符、PTR、THIS、HIGH、LOW 、SHORT 6种,可以在程序运行过程中,通 过修改属性运算符来修改变量或标号的属性, 包含段属性、偏移地址属性、类型属性等。 1.段操作符 格式: 段前缀:变量或地址表达式 段前缀有段寄存器CS、DS,ES,SS后跟冒号 例4-12 ‘:’,用来表示某个变量或地址被修改到哪个 MOV AX,[BX] ;DS:BX→AX 段寄存器提供的段地址。 MOV AX,ES:[BX] ;ES:BX→AX
四、数值返回运算符 数值返回运算符也经常称作分析运算符 有:OFFSET、SEG、TYPE、LENGTH、 SIZE 5种,它们加在变量或标号前,返回运 算对象的某个参数值,例如偏移地址值、段 地址值、类型属性、变量包含的单元数等。
1.OFFSET 格式:OFFSET 变量或标号 OFFSET 返回标号或变量的偏移地址值。
编辑 程序 程序
汇编过程
DATA SEGMENT
;定义数据段
SUM DW ?
DATA ENDS
;变量SUM用来保存结果
MOV AX,SUM AAM ;将该值转化为BCD数字 ;转化为ASCII码 ;数字存于BX中
STACK SEGMENT STACK ;定义堆栈段
ADD AX,3030H MOV BX,AX
MOV DL,BL
INT 21H
;显示低位数字
CMP CX,11
JLE CYCLE
;比较(CX)和12看是否可以结
束 ;未结束转CYCLE继续
4-1 汇编语言的标记
一个完整的汇编语言的语句由下列几部分组成: 标号和变量、指令助记符、界符、常数和注释,所 有这些都称为标记。
一、标号和变量 表示指令性语句的符号地址或表示一个数据单 元的符号地址。 例、
4-2 汇编语言中的表达式
表达式由运算对象和运算符组成,在汇编时由 汇编程序对它进行运算,运算结果作为一个语句中 的操作数来使用。 ※运算对象:常数、标号或变量
※运算符:
①算术运算符 ②逻辑运算符 ③关系运算符 ④数值返回运算符 ⑤修改属性运算符 ⑥其它运算符
一、算术运算符 有:+、-、*、/、MOD(模,即取除法运算结 果之余数)、SHL(左移,左移1位相当于乘2)、 SHR(右移,右移1位相当于除以2)。 例4-2 数组ARRAY的定义如下: ARRAY DB 1,2,3,4,5,6,7,8 TRY DB 20 两变量偏移地址之差 指令为: MOV AX,30*5 MOV CX,(TRY-ARRAY);数组长度→CX 汇编时,计算表达式形成指令为: MOV AX,150 MOV CX,8
2.PTR 格式: 类型/距离:PTR 变量或标号
功能:是将PTR左边的类型属性赋给右边的 变量或标号。这样可以保证运算时操作数类 型的匹配,常与类型BYTE、WORD、 DWORD、FAR、NEAR等连用。
JMP FARN1 DBLO;修改标号的距离属性 PTR 12H,34H 例4-13 JMP NEAR PTR LO N2 DW 1122H,3344H LO: MOV AX,WORD PTR N1 MOV BL,BYTE PTR N2
一、数据定义语句
A1 DB 1,2,3
格式1:变量名 助记符 操作数,操作数┅ 格式2:变量名 助记符 n DUP(操作数,操作数┅)
功能:将操作数存入变量名指定的存储单元 中,或者只分配存储空间不存入数据。 A3 DB 5 DUP(1,2) 助记符——主要有: 操作数——操作数可以是常数、字符串、变 变量名——它用符号表示,可以省略,作用 DB:用来定义字节,表示每个操作数占一个字节 量、标号、表达式等,多个操作数之间必须 与指令语句中的标号相同,但后面不跟冒号 DW:用来定义字,表示每个操作数占一个字 用逗号‘,’隔开。 ‘:’。汇编程序汇编时将此变量的助记符后 DD:用来定义双字,表示每个操作数占两个字 的第一个字节的偏移地址作为它的符号地址。 DQ:用来定义四个字,表示每个操作数四个字
4-3 伪指令语句
伪指令语句没有对应的机器代码,并不 像指令语句那样由CPU来执行,它是MASM 汇编程序对源程序汇编期间进行处理的。主 要完成变量定义、存储器分配、指示程序开 始和结束、段定义、段分配等。伪指令ቤተ መጻሕፍቲ ባይዱ以 下几种类型:
●程序开始结束语句ORG、END、NAME ●过程定义语句PROC┅ENDP ●标号赋值语句EQU、= ●段分配语句ASSUME ●段定义语句SEGMENT┅ENDS ●数据定义语句DB、DW、DD等
汇编成:
4.LENGTH 格式:LENGTH 变量
★当变量中使用DUP时,LENGTH返回此变 例4-10 M1 DW 100 DUP(?) 量所包含的单元数,对其它变量则返回1。 M2 DB 1,2,3,4
M3 DW 1234H,12H,3456H MOV CX,LENGTH M1 MOV BL,LENGTH M2 MOV DL,LENGTH M3 汇编成: 汇编成: MOV MOV MOV BL,1 BL,4 DL,1 CX,100 DL,3 √ × √ ×
5.SIZE 格式:SIZE 变量 ★SIZE加在变量前,返回该变量包含的总字 例4-10 M1 DW 100 DUP(?) 节数,注意不能简单去数有多少个字节,而 M2 DB 1,2,3,4 是利用公式SIZE=LENGTH×TYPE来计算。 M3 DW 1234H,12H,3456H MOV CX,SIZE M1 MOV BL,SIZE M2 MOV DL,SIZE M3 汇编成: 汇编成: MOV BL,1 MOV DL,2 CX,200 √ MOV BL,4 × DL,6
00000050H
00001234H
例4-22 操作数是字符串 FIRST DB ‘HELLO’ SECOND DW ‘OK’ THIRD DB ‘OK’
FIRST
注意:用DW定义字符 串时,只允许包含两个 字符,多于两个字符时, SECOND 只能用DB来定义。
THIRD
48(‘ H’ ) 45(‘ E’ ) 4C(‘ L’ ) 4C(‘ L’ ) 4F(‘ O’ ) 4B(‘ K’ ) 4F(‘ O’ ) 4F(‘ O’ ) 4B(‘ K’ )
汇编成:MOV AL,0BL,0 汇编成:MOV 汇编成:MOV AH,0FFH 汇编成:MOV CH,0FFH 例4-4 MOV MOV MOV MOV AL,NOT 0FFH BL,8CH AND 73H AH,8CH OR 73H CH,8CH XOR 73H
★逻辑运算符与8086指令系统中的指令助记 符AND、OR、XOR、NOT符号完全相同, 但两者是不会混淆的。作为MASM的运算符 是在汇编过程中进行计算的,而指令助记符 是在程序执行时进行运算的。
3.TYPE 格式:TYPE 变量或标号 ①TYPE加在变量前,返回变量的类型属性。 ②TYPE加在标号前,返回标号的距离属性。
类型 DB 类型 DW DB DD DW DQ DD DT DQ NEAR DT FAR NEAR FAR 返回 返回 1 2 1 4 2 8 4 10 8 FFH或FFFFH(-1) 10 FEH或FFFEH(-2) FFH或FFFFH(-1) FEH或FFFEH(-2)
相关文档
最新文档