指令系统及汇编语言程序设计
- 格式:docx
- 大小:76.28 KB
- 文档页数:22
汇编语⾔程序设计第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.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
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 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
百度文库 - 让每个人平等地提升自我 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章 指令系统及汇编语言程序设计