汇编语言及其程序设计.doc





《汇编语言及其程序设计.doc》由会员分享,可在线阅读,更多相关《汇编语言及其程序设计.doc(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流汇编语言及其程序设计.精品文档.第五章 汇编语言及其程序设计5.1 汇编语言程序结构5.2 表达式及伪指令5.3 汇编语言程序设计5.4 DOS功能调用5.5 汇编语言程序上机过程5.1 汇编语言程序结构汇编语言与汇编程序前面介绍了指令,指令系统及程序的基本概念,由此了解到计算机所以能够自动地工作,是因为运行程序的结果.计算机能够按照程序中的安排去执行相应的指令,才使得计算机看起来工作得非常有序.通过第四章的内容还了解到计算机可直接识别的是机器指令,而用机器指令编写的程序称为机器语言程序.由于机器指令是用二进制编码来表示的,既不直观又难以记忆
2、,所以使得机器指令编写的程序在使用上受到了限制. 第五章 汇编语言及其程序设计为了解决机器语言使用上的不便,人们开始使用容易记忆和识别的符号指令编写程序.汇编语言就是用与操作功能含义相应的缩写英文字符组成的符号指令作为编程用的语言.因此说汇编语言实际上是一种符号语言,并且是一种面向机器的低级语言.在使用汇编语言编写程序时需要对计算机硬件有一定的了解. 下面分别使用机器语言和汇编语言编写的一段小程序, 以此观察它们的不同. 机器语言程序 汇编语言程序0000 B0 09 MOV AL, 90002 04 08 ADD AL, 80004 F4 HLT使用汇编语言编写的程序计算机是不能够直接地识别
3、和执行的,必须经过翻译,将汇编语言程序翻译成机器语言程序.这个翻译是由汇编程序来完成的,汇编程序是由系统预先提供的系统软件之一,汇编程序不是简单的翻译,而是一个把源文件转换成二进制编码表示的目标文件(.OBJ)的过程(将这个过程称为汇编).在这个过程中,对源程序进行语法检查(又称扫描),得到无语法错误的结果后,还要经过连接程序,使目标程序成为计算机可执行文件(.EXE).汇编语言程序转换成为计算机可运行的程序的过程如下图 所示. 汇编语言源程序经汇编程序转换为目标文件经连接程序转换成可执行文件机器语言机器码表示,例如B8H,C3H汇编语言用指令助记符表示机器码例:机器码B8H,C3H的助记符为
4、MOV AX,BX CPU不同,机器码不同,助记符不同高级语言语言规范,可用于不同的CPU广泛较广应用范围较低高程序员硬件知识低高对硬件的依附性好较差源程序可读性较低高代码效率高级语言汇编语言语言汇编语言和高级语言的比较汇编语言程序结构特点例:5个连续字节单元的累加DATA SEGMENT ;定义数据段D1 DB 5 DUP( ) ;连续的字节单元CC EQU $-D1 ;对单元计数SUM DW 0 ;为结果保留一个字DATA ENDS ;数据段定义结束STACK SEGMENT PARA STACK STACK ;定义堆栈段DB 100 DUP ( ) ;100字节的栈空间STACK END
5、S ;堆栈段定义结束CODE SEGMENT ;定义代码段ASSUME DS:DATA,SS:STACK,CS:CODE ;对各段进行说明BEGIN:MOV AX,DATA ;DS初始化为DATAMOV DS,AXLEA SI,D1 ;预置源数据的指针定义存储单元的数据伪指令定义堆栈段定义语句作堆栈用的存储单元指令MOV CX,CC+1 ;预置次数CLD ; (DF)=0,串指针自动增量LODS BYTE PTR SI ;取一个数并修改指针DEC CX ;修改次数MOV AH,0 ;清AX的高字节CLC ;清CF位AGAN:ADC SUM,AX ;累加LODS BYTE PTR SI ;再取数
6、并修改指针LOOP AGAN ;控制循环MOV AH,4CH ;完成,返回DOSINT 21HCODE ENDS ;代码段结束END BEGIN ;整个程序结束段定义汇编程序结束源程序的一般格式代码段是必需的.每段必须有且仅有一个名字,以SEGMENT定义段的起始,以ENDS定义段的结束,整个程序结束后需以END收尾.源程序的一般格式为:段名1 SEGMENT语句语句段名1 ENDS段名2 SEGMENT语句语句段名2 ENDSEND (标号)汇编语言源程序的结构段名1 SEGMENT语句行语句行段名1 ENDS段名2 SEGMENT语句行语句行段名2 ENDSEND 标号或过程名一个源程序由
7、若干段组成,如数据段,代码段,堆栈段等;各段由若干条语句行组成;指令必须放在代码段中;为了确保程序的执行和正确返回,必须借助堆栈段;根据编程需要确定是否需要数据段,附加段.语句行的构成1.指令性语句:即执行性语句(指令)包括四部分: 标号: 指令操作码 操作数 ;注释 例: AGAN:ADC SUM,AX ;累加2.指示性语句:即说明性语句(伪指令),由四部分组成: 名字 伪指令 操作数 ;注释 例:SUM DW 0 ;为结果保留一个字汇编语言的语句行指令性语句 指令,与机器码一一对应.指示性语句 伪指令,可以对源程序进行指示,说明,定义等.注释语句 以分号开始,整行均是对程序的注解,增强可读
8、性.本身不参与汇编,对指令代码无任何贡献.汇编语言的语句行构成指令性语句指令标号: 指令助记符 操作数1,操作数2 ;注释指示性语句伪指令名字 伪指令助记符 参数1,参数2,参数n ;注释应用程序开发过程源程序的编辑使用源程序编辑软件 EDIT.COM产生源程序文件 如: *.ASM目标程序的汇编( 编译)使用目标程序汇编软件 MASM.EXE产生目标程序文件 如: *.OBJ执行程序的连接使用执行程序连接软件 LINK.EXE产生执行程序文件 如: *.EXE5.2 表达式及伪指令在指令系统一章中所看到的指令都是在程序运行期间由计算机来执行的指令,在汇编语言源程序中除了这些指令以外,还有伪指
9、令和宏指令.伪指令又称伪操作,在汇编程序对源程序汇编期间由汇编程序处理的操作.伪指令可用来进行数据定义,分配存储区及指定程序结束等操作.下面对一些常用的伪操作作简单介绍. 5.2 表达式及伪指令5.2.1 汇编语言中的字符集字符A Z 或 a z注:汇编源程序中,大小写字符功能一样数字0 9注:数字不用于标识符的第一位特殊符号,/,%等注:标识符中谨慎使用特殊符号汇编语言中的保留字汇编源程序中标识符不能使用的字符串寄存器名 例:AX,SP标志符 例:CF,TF指令助记符 例:MOV,ADD伪指令符 例:SEGMENT,END运算符 例:OFFSET,PTR 标识符(标号,符号地址,变量名)标识
10、符由编程人员自行定义的,有特殊意义的字符序列.标识符的使用可使用字母,数字,特殊字符( $ _)不能使用保留字 !符合字符集要求不用数字开头,第一个符号最好用字母长度小于 32 个字符标识符的作用用作段名,过程名,结构名,宏名等的定义用作变量名,数据段符号地址的定义用作代码段标号 标识符数据段中的标识符符号地址具有存储地址值和数据类型的特征代码段中的标识符伪指令前的标号定义变量指令前的标号定义标号:标识符与常量MOV AL,F8H (AL)=(F8H),从符号地址中取数MOV AL,0F8H (AL)=F8H,常数F8H赋值常量常量出现在源程序中指令操作数的位置,具有固定值的数值.整数:必须以
11、数字开头!二进制数以B 结尾八进制数以O或Q 结尾十进制数不带结尾字母,或以D 结尾十六进制数以H 结尾字符串连续的字节单元,每个单元均存放ASCII码.用包括在单引号中的字母表示(单引号本身不算作字符).如abcdef,对应的数值依次是61H66H.变量和标号变量编程人员为内存单元起的名字.有3种属性:段基址:该单元所在段的首址,用相应的段寄存器值表示(16位)偏移量:该单元在段内的偏移量或有效地址,表示与段首地址之间的距离(16位)类型:该单元中存放的数据长度类型,可能是字节 (Byte),字 (Word) 或双字 (Double Word)等,对应于类型值1,2,4标号编程人员为目标地址
12、单元起的名字,对应于该指令在代码段中的存放地址.也有3种属性,仅类型与变量不同:类型:标号的类型共有远(Far),近(Near)两种,类型值分别是-2,-15.2.2 表达式与运算符表达式由运算符和操作数组成的,具有确定结果的有意义的序列,可作为指令的操作数.运算符共有5类:算术运算符,逻辑运算符,关系运算符,分析运算符,合成运算符.操作数常量,变量和标号等均可参与运算.对于地址指针,只能进行加/减算术运算.运算规则表达式的值由汇编程序在编译的过程中自动完成计算,所得确定的运算结果与操作码一起被编译成机器码.汇编语言的运算符算术运算符:+,-,*,/,MOD,SHL,SHR逻辑运算符:AND,
13、OR,XOR,NOT关系运算符:EQ,NE,LT,GT,LE,GE分析运算符:SEG,OFFSET,TYPE,SIZE,LENGTH综合运算符:PTR,DS:,THIS,SHORT,HIGH,LOW算术运算符数值表达式中可使用所有算术运算符地址表达式仅使用+,-算术运算符算术运算符不影响标志位例:完成80H+90H解:MOV AL,80H+90H;使用数值表达式;(AL)=10H,CF=不变MOV AL,80HADD AL,90H ;使用加法指令;(AL) =10H,CF = 1算术运算符的使用若以算术运算表达式作为源操作数,则整个表达相当于立即数;运算结果(返回值)的长度由目操作数决定乘,除
14、运算不带符号除法运算的返回值为整数商表达式的运算不影响标志位 例:MOV AL,80H + 90H 相当于 MOV AL,10H 80H + 90H=10H由汇编程序完成;指令执行后(AL)=10H,各标志位不变.逻辑运算符AND,OR,XOR,NOT逻辑指令助记符与逻辑运算符形同意不同逻辑指令助记符出现在指令语句的开始AND CX,00FFH AND 10AEH逻辑运算符出现在指令语句的操作数段 AND CX,00FFH AND 10AEH 注:等价指令 AND CX,00AEH 逻辑运算符的使用若以逻辑运算表达式作为源操作数,则整个表达相当于立即数;运算结果(返回值)的长度由目操作数决定除
15、NOT之外,均为双目运算符表达式的运算不影响标志位 例:AND CX,1F03H AND 72B6H相当于 AND CX,1202H 1F03H 72B6H = 1202H由汇编程序完成,各标志位不变;CX 1202H在执行过程中完成.关系运算符EQ 相等关系NE 不等关系LT 小于关系GT 大于关系LE 小于等于关系GE 大于等于关系进行关系判断时,表达式中所有的数均视为无符号数关系运算符EQ,NE,LT,GT,LE,GE两性质相同的操作数的比较若关系正确为真(T), 有全 1 操作数若关系错误为假(F), 有全 0 操作数例:MOV BL,(PORT LT 5)AND 20H若PORT=2
16、,(PORT LT 5)=0FFH,为真 原式为 MOV BL,20H若PORT=7,(PORT LT 5)=00H,为假原式为 MOV BL,00H关系运算符的使用关系运算的返回值 若关系成立,即为真,返回全1(1个字)若关系不成立,即为假,返回全0 (1个字)例:MOV BX ,(PORT LT 5)AND 20H若 PORT = 2,(PORT LT 5)= 0FFFFH,为真 原式相当于 MOV BX,0020H若 PORT = 7,(PORT LT 5)= 0000H,为假原式相当于 MOV BX,0000H分析运算符分析运算符(数值返回运算符)的功能SEG 符号地址段值属性返回符
17、OFFSET 符号地址偏移量值属性返回符 TYPE 符号地址中数据类型属性返回符LENGTH DUP重复次数返回符SIZE 变量总字节数返回符 分析运算符SEG 取变量/标号的段基值 OFFSET 取变量/标号的段内偏移量TYPE 取变量/标号的类型值LENGTH 取以DUP定义的变量的重复次数SIZE 取以DUP定义的变量的总字节数分析运算符例:定义数据段 DATA 如下:从实际地 02000H 开始存数据,即段地址为 0200H,段内偏移地址从 0000H 开始 DATA SEGMENTVAR1 DB 20,30VAR2 DW 2000H,3000HVAR3 DD 22003300HDAT
18、A ENDS33H00H22H00H30H00H20H00H3020段地址 = 0200H0000H0002H0006HVAR1VAR2VAR3分析运算符SEG 和 OFFSET 应用MOV BX,SEG VAR1 ;(BX)= 0200HMOV BX,SEG VAR2 ;(BX)= 0200HMOV BX,SEG VAR3 ;(BX)= 0200HMOV BX,OFFSET VAR1 ;(BX)= 0000HMOV BX,OFFSET VAR2 ;(BX)= 0002HMOV BX,OFFSET VAR3 ;(BX)= 0006H 分析运算符TYPE 的应用返回变量数据类型所含的字节数MOV
19、 BL,TYPE VAR1 ;(BL)= 1MOV BL,TYPE VAR2 ;(BL)= 2MOV BL,TYPE VAR3 ;(BL)= 4结构名返回结构所含字节数过程名返回近,远过程属性表示值(-1,-2)即: 对标号,返回标号的属性值NEAR,FAR标号的属性值分别是-1,-2分析运算符LENGTH 和 SIZE:只对DUP指令有效,否则为1定义数据段DATA SEGMENT VAR1 DB 100 DUP( )VAR2 DW 100 DUP( )DATA ENDS指令功能 MOV BX,LENGTH VAR1 ;(BX)= 100MOV BX,LENGTH VAR2 ;(BX)= 1
20、00MOV BX,SIZE VAR1 ;(BX)= 100MOV BX,SIZE VAR2 ;(BX)= 200 LENGTH 和 SIZE 已有变量定义VAR1 DW 100 DUP( )VAR2 DB , , , 运算符功能 MOV AX,LENGTH VAR1 ;(AX)= 100MOV BX,SIZE VAR1 ;(BX)= 200MOV CX,LENGTH VAR2 ;(CX)= 1MOV DX,SIZE VAR2 ;(DX)= 1 例1:存储器示意图设段的起始地址为02000HDATA SEGMENTDBYTE DB 10,10HDWORD DW 100,100HDDWORD DD
21、 12345678HDQWORD DQ 1234567890ABCDEFHDBS DB ABDWS DW ABDWOFF DW OFFSET DWORDDATA ENDS例2:DATA SEGMENTARRAY DB 2 DUP(0,1,2)ARRAY2 DW 100 DUP( )ARRAY3 DB 20 DUP(0,1,4 DUP(2),5)AB904142424112345678CDEF1234567801000064100A020202020202010005020201000201000201000002DBYTEDWORDDDWORDDBSDWSDQWORDDWOFFARRAYARR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 及其 程序设计

限制150内