指令系统及汇编语言程序设计
汇编语言程序设计

汇编语⾔程序设计第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。
第4章 汇编语言程序设计及仿真调试(1)

第4 章
4.1 4.2
汇编语言程序设计及仿真调试
指令系统 汇编语言程序设计
4.3 典型汇编语言程序设计举例 4.4 利用Keil uVision集成开发环境调试程序 利用Keil uVision集成开发环境调试程序
4.5 利用ISP工具将程序下载到单片机中验证程序 利用ISP工具将程序下载到单片机中验证程序
传送字节变量(数据存储器、I/O口 传送字节变量(数据存储器、I/O口) 外部送数到A 外部送数到A 程序存储器送数到A 程序存储器送数到A 加 带借位减 乘 除 绝对转移(短转移、长转移) 绝对转移(短转移、长转移) 有条件转移 绝对调用(长调用) 绝对调用(长调用) 子程序返回 第一操作数与第二操作数比较不等则转移 与 或 异或 3/80
程序存储器 PC 11100101 操作码 60H 01100000 直接地址
RAM 89H
89H ACC 0E0H
9/80
增强型8051单片机实用开发技术
1.立即寻址
指令中的源操作数是立即数,叫做立即寻址。 指令中的源操作数是立即数,叫做立即寻址。立即数的类型可 以是:二进制(B) 十进制、十六进制(H) 整数、序数或者字符。 (B)、 (H)、 以是:二进制(B)、十进制、十六进制(H)、整数、序数或者字符。 立即数的字长可以是8位或16 16位 立即数的字长可以是8位或16位。 例如: 例如: MOV A,#61H 这条指令是把61H这个数据送入到累加器A 61H这个数据送入到累加器 这条指令是把61H这个数据送入到累加器A中。 例如: DPTR,# ,#2050H 例如: MOV DPTR,#2050H 这条指令是把2050H这个数据送入到数据指针DPTR 2050H这个数据送入到数据指针DPTR中 这条指令是把2050H这个数据送入到数据指针DPTR中。
汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序
是
SYSCALL
从右到左 被调用程序
是
STDCALL 名字前加
下划线 (注)
被调用程序
是
PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序
是
从左到右 被调用程序
是
从左到右 被调用程序
是
12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体
《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》教案附:习题参考答案《汇编语言程序设计》(第4版)钱晓捷主编前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (1)1.1进位计数制与不同基数的数之间的转换 (1)1.2二进制数和十六进制数的运算 (2)1.3计算机中数和字符的表示 (3)1.4几种基本的逻辑运算 (3)第 2 章 80X86计算机组织 (4)2.180X86微处理器 (4)2.2基于微处理器的计算机系统构成 (4)2.3中央处理机 (5)2.4存储器 (6)2.5外部设备 (7)第 3 章 80X86的指令系统和寻址方式 (8)3.180X86的寻址方式 (8)3.2程序占有的空间和执行时间 (10)3.380X86的指令系统 (10)第 4 章汇编语言程序格式 (27)4.1汇编程序功能 (27)4.2伪操作 (27)4.3汇编语言程序格式 (31)4.4汇编语言程序的上机过程 (34)第 5 章循环与分支程序设计 (37)5.1循环程序设计 (37)5.2分支程序设计 (38)5.3如何在实模式下发挥80386及其后继机型的优势 (38)第 6 章子程序结构 (40)6.1子程序的设计方法 (40)6.2子程序的嵌套 (41)6.3子程序举例 (41)第 7 章高级汇编语言技术 (43)7.1宏汇编 (43)7.2重复汇编 (44)7.3条件汇编 (45)第 8 章输入/输出程序设计 (46)8.1I/O设备的数据传送方式 (46)8.2程序直接控制I/O方式 (47)8.3中断传送方式 (47)第 9 章 BIOS和DOS中断 (50)9.1键盘I/O (50)9.2显示器I/O (52)9.3打印机I/O (53)9.4串行通信口I/O (54)第 10 章图形与发声系统的程序设计 (55)10.1显示方式 (55)10.2视频显示存储器 (55)10.3EGA/VGA图形程序设计 (56)10.4通用发声程序 (57)10.5乐曲程序 (58)第 11 章磁盘文件存取技术 (59)11.1磁盘的记录方式 (59)11.2文件代号式磁盘存取 (60)11.3字符设备的文件代号式I/O (61)11.4BIOS磁盘存取功能 (62)附录:《IBM—PC汇编语言程序设计》习题参考答案 (63)第一章.习题 (63)第二章.习题 (64)第三章.习题 (65)第四章.习题 (79)第五章.习题 (84)第六章.习题 (104)第七章.习题 (118)第八章.习题 (125)第九章.习题 (130)第十章.习题 (134)第十一章.习题 (145)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
第3章MCS-51指令系统

第3章 MCS-51指令系统 4. 伪指令 在汇编语言源程序中,除了包含可以转化为特定计算机系 统的机器语言指令所对应的汇编语言指令外,还可能包含一些 伪指令,如“ORG 2000H”、“END”等。“伪”者,假也,尽 尽 管它不是计算机系统对应的指令,汇编时也不产生机器码,但 管它不是计算机系统对应的指令,汇编时也不产生机器码, 汇编语言程序中的伪指令并非可有可无。伪指令的作用是指导 汇编语言程序中的伪指令并非可有可无。 源程序的汇编过程, 源程序的汇编过程,例如“ORG 2000H”伪指令,指示汇编程序 将该伪指令后的汇编语言指令对应的机器码从2000H单元开始存 放。
第3章 MCS-51指令系统
· 52/54子系列内部RAM后128字节(即地址编码为80~FFH) 各单元之间不能直接传送。原因是高128字节内部RAM只能使 用寄存器间接寻址方式,而一条指令中,最多只允许一个操作 数使用寄存器间接寻址方式。 数据传送指令一般不会影响程序状态字寄存器PSW中的标 志位,但当数据传送到累加器A时,PSW中的奇偶标志位P会改 变,原因是奇偶标志位P总是体现累加器A中“1”的个数的奇偶 性。
第3章 MCS-51指令系统 1. 内部 内部RAM与特殊功能寄存器之间的数据传送 与特殊功能寄存器之间的数据传送 表3-1 内部RAM与特殊功能寄存器之间的数据传送指令
指令名称 指令格式 MOV A,Rn 以累加器A作为 目的操作数 MOV A,direct MOV A,@Ri MOV A,#data 机器码 11101rrr 11100101 direct 1110011i 01110100 data 功能 A←Rn A←(direct) A←(Ri) A←data 指令周期 1 1 1 1
MOV 90H,0F0H ; 将特殊功能寄存器0F0H单元(即寄存器B) 内容传送到特殊功能寄存器90H ; 单元(即P1口锁存器)中
第4章 汇编 语言程序设计

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

2020/12/27
16
4.2.4 表达式
在80x86汇编语言中,有数值表达式和地址 表达式两种。
数值表达式 由各种常量与数值运算符连接而成的式子,
称为数值表达式。数值表达式的计算结果是 一个数值,它只有大小而没有属性。 算术、关系、逻辑运算符
2020/12/27
17
地址表达式
由常量、变量、标号、寄存器和数值运算符、 地址运算符组合而成的有意义的式子,称为 地址表达式,单个变量、标号是地址表达式 的最简形式。由于变量和标号具有段 (SEG)、偏移(OFFSET)、类型 (TYPE)3种属性,这就决定了对它们的访 问是多种形式的。
Байду номын сангаас第四章 汇编语言程序
4.1 汇编语句 4.2 汇编语言数据 4.3 8086指令系统 4.4 汇编语言伪指令 4.5 汇编源程序结构 4.6 上机操作过程
2020/12/27
1
4.1 汇编语句
4.1.1 语句种类 汇编语言有3种语句类型,指令语句、伪指令语句、宏指令语
句。
指令语句是可执行语句,在汇编时可产生供机器执行的二进制
2020/12/27
3
2.名字
名字是一串字符序列,最多包含31个字符。在汇 编语言中,名字的应用范围很广,有寄存器名、变 量名、常量名、标号、指令名等等。在语句格式中 作为第一可选成分出现的<名字>,在不同的语句 中具有不同的含义。它在指令语句中表示标号,后 面必须跟有冒号“:”;而在伪指令语句中表示变 量名,常量名,段名,过程名,后面不能有冒号。 这是两种语句在格式上的主要不同之处。
指令语句中的标号和伪指令语句中变量名,段名, 过程名是一种符号地址,可作为汇编指令的一个操 作数,但常量名不是符号地址,不能用做目的操作 数。不同的标号、变量和常量不能同名。
汇编语言程序设计

段寄存器赋值
在DOS环境下运行程序时,DOS的装载程序对寄 存器CS:IP、SS:SP作正确的初始化,而将段寄存 器DS、ES初始化为程序段前缀PSP的起点,而不是用 户所需的地址。因此段寄存器DS、ES的赋值还要有程 序本身来完成。如 MOV AX,DATA MOV DS,AX 注意这里的MOV 指令,其源操作数是段名,它是把 段名对应段的基地址送给目的操作数,这是传送指令 中的一个特殊情况。
汇编语言程序语句的格式
注释域以分号打头,注释部分是编程者对指令的作 用所作的言简意赅的说明。汇编语言不对这部分汇编。
• 汇编语言中的标号或名字或其他变量名(统称标识符)
必须是由字母或特殊字符打头的字母数字串,中间不能 有空格。合法的字符包括:字母 A~Z 或 a~z ;数字 0~9 ; 特殊字符有问号(?)、圆点(.)、@、下横线(_) 和美元符号($),圆点只能作为第一个字符。 标号和名字的长度不超过31个字符,超过部分均被删 去。 标识符不能和保留字重名
MASM.EXE是用于8088/8086、80286、80386等CPU的微机上的一种宏汇编 程序。它支持多模块的程序设计,由它生成的目标程序可直接和其他模块的汇编 语言程序的目标程序相连接,也可直接和其它高级语言程序的目标程序模块相连 接。
8088/8086汇编语言程序的上机操作过程:
1)根据任务要求,应用指令系统给定的指令编制程序; 2)利用编辑软件如EDIT等将程序输入计算机,程序名后缀*.asm; 3)应用MASM.EXE对.asm程序进行汇编,得到*.obj和*.lst文件; 4)应用LINK.EXE程序对.obj文件进行连接定位,得到*. exe文件; 5)执行*. exe文件,应用文件进行调试、查看文件执行情 况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
百度文库 - 让每个人平等地提升自我 21 指令系统及汇编语言程序设计
2.4 伪指令
伪指令本身不会产生可执行的机器指令代码,它仅仅是告诉汇编程序有关源程序的某些信息,或者用来说明内存单元的用途。伪指令在汇编过程中由汇编程序进行处理。
2.4.1 数据定义伪指令 数据定义伪指令用于定义变量的类型、给存储器赋初值或给变量分配存储单元。常用的数据定义伪指令有DB、DW和DD等。 格 式: [变量名] 伪指令助记符 数据表项 功 能: 定义一个数据存储区,其类型由所定义的数据定义指令而指定。 操作说明: 方括号中的变量名为任选项,变量名后面不跟冒号“:”。数据表项可以包含多个数据之间用逗号分隔开。数据定义伪指令助记符有以下三种: (1) DB 定义变量类型为字节(BYTE),DB后面的每个数据占一个字节。 (2) DW 定义变量类型为字(WORD),DW后面的每个数据占一个字,即两个字节。在内存中,低字节在前,高字节在后。 (3) DD 定义变量类型为双字(DWORD),后面的每个数据占两个字。在内存中,低位字在前,高位字在后。 例如,有下列数据定义语句 D1 DB 1,-12 D2 DW 1,2010H D3 DD 1,10203040H 数据表项中除了常数、表达式和字符串外,还可以是问号“?”,它仅给变量保留相应的存储单元,而不给变量赋初值。相同的操作数重复出现时,可用重复符号“DUP”表示。 其格式为: n DUP(初值[,初值,……]) ;n表示重复的次数,圆括号中为重复的内容。 下面是用问号或DUP表示操作数的例子: ARRAY DB 1000 DUP(0) VAR DW ?,?
2.4.2 符号定义伪指令 1. 赋值伪指令 格 式: 变量名 EOU 表达式 功 能: 将右边表达式的值赋给左边的变量。 操作说明: 表达式可以是一个常数、符号、数值表达式或地址表达式。 需要注意的是:EQU伪指令不允许对同一符号重复定义。 EQU伪指令具体应用举例如下: CR EQU ODH ;定义CR为常数(回车的ASCII代码) TAB EQU TABLE-ASCII ;定义变量 DIS EQU 1024*768 ;定义数值表达式 ADR EQU ES:[DI+3] ;定义地址表达式 M EQU MOV ;定义助记符 2.等号(=)伪指令 百度文库 - 让每个人平等地提升自我 21 格 式: 变量名=表达式
功 能: 将右边表达式的值赋给左边的变量。 操作说明:等号(=)伪指令的功能与EQU伪指令相仿,它可以对同一个名字重复定义。 利用等号(=)伪指令可以使程序设计更加灵活。 例如下面的程序段: TABLE=1 MOV AX,TABLE RRRR: ADD AX,1 ┊ TABLE=TABLE+1 MOV AX,TABLE CMP AX,100 JNE RRRR ┊ 3. 定义符号名伪指令LABEL 格 式: 符号名 LABEL 类型 功 能:定义一个标号或变量名,并指定其类型。 操作说明:其中符号名可以是标号或变量,LABEL伪指令通常要与指令语句或DB、DW、DD伪指令语句连用。与指令连用时,类型属性有NEAR和FAR两种;与DB等伪指令语句连用,可以使同一个数据区既有BYTE属性,又有WORD属性和DWORD属性,这样在以后的程序中根据不同的需要分别以字节或字为单位存取其中的数据。LABEL伪指令具体使用如下: DATAW LABEL WORD ;变量DATAW类型为WORD DATAB DB 20 DUP(?) ;变量DATAB类型为BYTE MOV DATAW,AX ;按字存入 MOV DATAB[2],AL ;按字节存入 LABEL伪指令也可以将属性已经定义为NEAR的标号再定义为FAR属性。例如: ABCF LABEL FAR ;过程入口(远程调用) ABC MOV AX,0000H ;过程入口(段内调用) 上面的过程既可用标号ABC在本段调用,也可以用标号ABCF被其他段调用。
2.4.3 段定义伪指令 段定义伪指令在汇编语言源程序中定义逻辑段。常用的段定义伪指令有ASSUME、SEGMENT和ENDS等。 1. 段定义伪指令SEGMENT和ENDS SEGMENT和ENDS伪指令用于定义一个逻辑段,给逻辑段赋予—个段名,并在后面的任选项中给出这个逻辑段的其他特性,如定位类型、组合类型和类别。 段定义伪指令格式如下: 段名 SEGMENT [定位类型][组合类型][‘类别’] ┊ 段名 ENDS 说 明: SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令则表示一个逻辑段的结束,这两个伪指令总是成对出现,而且前面的段名必须一致。两个伪指令语句之间的部分是该逻辑段的内容。汇编语言的逻辑段包括代码段、数据段和堆栈段等。代码段主要是程序指令和某些伪指令;数据段用于定义数据和存储单元;堆栈段为堆栈操作预留出存储空间。 SEGMENT伪指令后面可以有三个任选项: 1)定位类型 定位类型任选项是告诉汇编程序如何确定逻辑段的边界在存储器中的位置,定位类型有四种: 百度文库 - 让每个人平等地提升自我 21 ① BYTE 表示逻辑段边界可以从任何一个字节开始。
② WORD 表示逻辑段边界从字地址开始,这样该逻辑段的起始地址必须是偶数。 ③ PARA 表示逻辑段边界从节地址开始,16个字节称为一个节。如果省略定位类型任选项,汇编语言程序默认该逻辑段为PARA。 ④ PAGE 表示逻辑段边界地址从页边界开始,256个字节称为一个页。 2)组合类型 SEGMENT伪指令的第二个任选项是组合类型,它告诉连接程序,装入存储器时各个逻辑段如何进行组合。组合类型有6种。 ① NONE 此项为不组合,如果编程时省略SEGMENT伪指令的组合类型。 ② PUBLIC 汇编程序连接时,将不同程序模块中具有相同的类别名的逻辑段顺序连接成一个逻辑段装入内存。 ③ STACK 组合类型为STACK时,编译程序把所有同名段连接成一个连续的堆栈段。 ④ COMMON 该组合类型产生一个覆盖段。模块连接时,如果有相同的类别名,则都从同一个地址开始装入,因而连接的逻辑段将发生重叠。连接以后段的长度等于原来最长的逻辑段的长度,重叠部分的内容是最后一个逻辑段的内容。 ⑤ MEMORY 组合类型为MEMORY时,表示本段在存储器中应定位在所有其他段的最高地址。 ⑥ AT AT组合类型表示本段可以定位在表达式所指示的边界上。如: AT 0830H ;本段的地址从0830H开始。 3)类别名 类别名必须用单引号括起来,类别名可由程序设计人员自己选定任何字符串组成,但它不能再作为程序的标号,变量名或其他定义的符号。在连接处理时,LINK程序把类别名相同的所有段存放在连续的存储区内。 下面是一个分段结构的源程序框架: DATAl SEGMENT ┊ DATAl ENDS STACK1 SEGMENT PARA STACK ┊ STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATAl,SS:STACKl BEGIN: …… ┊ CODE ENDS END BEGIN 2. 指定段址伪指令ASSUME 格 式: ASSUME 段寄存器名:段名[,段寄存器名:段名,……] 功 能: 指定段寄存器与某个逻辑段建立对应关系。 操作说明: 其中段寄存器名是指四个段寄存器CS、SS、DS、ES中的一个,段名是指逻辑段的段名。 需要注意的是:ASSUME伪指令只是告诉汇编程序段寄存器与逻辑段的关系,并没有给段寄存器赋予实际的初值。 若要给段寄存器赋值,可参考下面程序: CODE SEGMENT ASSUME CS:CODE,DS:DATA1,SS:STACKl MOV AX,DATA1 MOV DS,AX MOV AX,STACKl MOV SS,AX 百度文库 - 让每个人平等地提升自我 21 ┊
CODE ENDS
2.4.4 过程定义伪指令 程序设计中,我们常常把具有一定功能的程序段设计成一个子程序。汇编程序用“过程”来构造子程序。 格 式:过程名 PROC [NEAR/FAR] ;NEAR与FAR只选一个,或都不选 ┊ RET 过程名 ENDP 功 能:定义一个过程(子程序)。 操作说明:其中,过程名不能省略,过程的开始和结束应使用同一个过程名。过程名也就是子程序的程序名,可以通过CALI指令调用,它类同于一个标号的作用,具有三个属性:段、偏移量和类型。类型可以选择NEAR或FAR,如果没有选择距离类型,则默认为NEAR。
2.4.5 定位伪指令ORG和当前位置计数器$ 格 式: ORG 数值表达式 功 能:指定在它之后的程序段或数据块所存放的单元起始地址的偏移量。 当前地址计数器‘$’它表示当前地址,即地址计数器的值。例如: DATA SEGMENT ORG 20H D1 DB 12H,13H ORG $+01H D2 DB 61H,62H,63H DATA ENDS CODE SEGMENT ASSUME CS:CODE,…… ORG 100H BEGIN: MOV AX,DATA ┋ CODE ENDS 上面的数据段中,D1的段内偏移量为0020H而不是0000H,D2的段内偏移量是0023H。代码段里,指令代码从偏移量0100H处开始。
2.4.6 结束汇编指令END 格 式: END 标号 功 能:通知汇编程序结束汇编。 操作说明:标号为主程序执行时的入口标号。注意,该指令并表示执行程序结束,只是汇编程序结束汇编。而要计算机停止执行程序而退回到DOS操作系统,需用DOS调用: MOV AH,4CH INT 21H
第2章 指令系统及汇编语言程序设计