汇编语言与程序设计.ppt
《汇编语言与程序设计.ppt》由会员分享,可在线阅读,更多相关《汇编语言与程序设计.ppt(99页珍藏版)》请在三一办公上搜索。
1、第5章 汇编语言与程序设计,本章学习要点,1、INTEL 8086 微处理器的寄存器和主存储器2、汇编语言语句格式3、8086 的指令系统及寻址方式4、8086 汇编语言的数据、表达式和运算符 5、8086 汇编语言的伪指令6、汇编语言程序设计技术7、汇编与C/C+接口,5.1 概述,程序设计语言通常分为3类:机器语言(Machine Language)汇编语言(Assembler Language)高级语言(High Level Language)。1机器语言(1)机器指令机器指令是指用二进制编码的指令,以表示计算机所要进行操作数及操作对象(数据或数据地址)。,基本概念,(2)指令系统和机器
2、语言指令系统是指特定计算机上机器指令的集合。机器语言是由指令系统以及机器指令的使用规则构成的。机器语言是计算机惟一能识别的语言,只有用机器语言描述的程序,计算机才能直接执行。(3)机器语言的主要特点机器语言主要具有下列两个特点:机器语言与机器密切相关 机器语言设计程序非常困难,但容易实现高性能,2 汇编语言,以助记符描述的指令称作汇编格式指令或符号指令,通常简称指令。指令和伪指令的集合及其程序设计规则便构成了汇编语言。用汇编语言编写的程序就是汇编语言源程序。,5.2 INTEL8086寄存器和主存储器,8086通用寄存器 8086的标志寄存器 存储器组织与段寄存器,5.2.1.8086通用寄存
3、器,5.2.2 8086的标志寄存器,8086CPU中有一个16位标志寄存器,由6位条件码标志(flag)和3位控制标志构成.,5.2.3 存储器组织与段寄存器,数据类型,【例5.1】各独立段的分配情况示例。,设CS=B000H、DS=1CDEH、SS=4200H、ES=0150H,它们分别为代码段、数据段、堆栈段和附加段的段首址。自每个段首址开始,各段均占64KB的范围,各段之间互不重叠。如图所示。,5.3 汇编语言语句格式,汇编语言源程序由语句序列构成。每条语句一般占一行,分表达硬指令的执行性语句和表达伪指令的说明性语句两种格式。语句一般由分隔符分成的四个部分组成,它们有两种格式:执行性语
4、句由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:标号:硬指令助记符 操作数,操作数,.;注释说明性语句由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:名字 伪指令助记符 参数,参数,.;注释,5.3.1.段定义的简化,在MASM 5.0及以上版本中,段的定义可以非常简单,方便了程序设计。使用简化段定义伪指令前,必须先说明用户程序使用的内存模式。内存模式定义伪指令MODEL内存模式指用户程序的代码和数据的存放格式,及他们占用内存的大小。.MODEL,语言类型,操作系统类型,堆栈类型,简化的段定义1.简化段定义伪指令,简化段定义伪指令在.MODEL 语句之后,如下所列。每
5、个简化段伪指令都可用来表示一个段的开始,同时也说明前一个段结束。.STACK长度;定义堆栈段,长度缺省值为1KB.CODE名字;定义代码段.DATA;定义数据段.DATA?;定义数据段,初值不确定.FARDATA名字;定义远调用数据段.FARDATA?名字;定义远调用数据段,初值不确定.CONST;定义只读常数数据段.STARTUP;程序起始点,并初始化DS、SS.EXIT 0;程序结束点,返回操作系统上述简化段定义伪指令中带方括号的项可省略。伪指令.EXIT 0相当于MOV AX,4C00H和INT 21H两条指令。,2.缺省段名,完整的段定义,使用完整的段定义伪指令来定义一个段,可具体控制
6、汇编程序MASM和连接程序LINK在内存中组织代码和数据的方式。整个逻辑段必须用段定义语句括起来。SEGMENTENDS伪指令 SEGMENT 定位类型 组合方式 段长度 分类名 段体 ENDS,5.3.4 源程序编程格式,1.EXE文件编程格式该格式下源程序允许使用多个逻辑段,适合编写大型程序,汇编-连接后生成扩展名为.EXE的可执行文件。2.COM文件编程格式该格式只允许源程序设置一个代码段(堆栈在代码段内),代码段的目标模块要小于64KB,适合编写中小程序。在.MODEL TINY伪指令定义的内存模式下即可生成.COM结构的源程序。,返回操作系统方式,1使用功能号为4CH的DOS功能调用
7、,2将主程序定义为远过程,3利用20H号BIOS中断调用,4利用0号DOS系统功能调用,建立汇编语言的工作环境,为运行汇编语言程序至少要在磁盘上提供以下文件:1.编辑程序文件,如EDIT.EXE。2.汇编程序文件,如MASM.EXE。3.连接程序文件,如LINK.EXE。4.调试程序文件,如DEBUG.COM。必要时,还可建立如CREF.EXE和EXR2BIN.EXE等文件。,汇编语言源程序上机过程,在计算机上运行汇编语言程序的步骤是:1.用编辑程序建立ASM源文件;2.用MASM程序把ASM文件转汇编成OBJ文件;3.用LINK程序把OBJ文件转连接成EXE文件;4.用DOS命令直接键入文件
8、名就可执行该程序。,5.4 8086 的指令系统及寻址方式,8086 CPU的指令系统的基本指令包括数据传送类指令、算术运算类指令、位操作类指令、串操作类指令、控制转移类指令、处理机控制类指令。,5.4.1 指令中操作数的符号说明,计算机中的一条指令通常包含两部分:,操作码,操作数,5.4.2 三类操作数的寻址方式,寻找指令中所需操作数存放地址的方式或程序转移时寻找转移地址的方式称为寻址方式。因而寻址方式分为两大类,一类是数据寻址方式,另一类是转移地址寻址方 式。由于80X86指令涉及四种操作数:立即操作数、寄存器操作数、存储器操作数和隐含操作数,因此,数据寻址方式又可对应四种寻址方式,即:立
9、即寻址、寄存器寻址、存储器寻址和固定寻址。本节只介绍前三种。,5.4.3 数据传送类指令,8086指令系统按功能可分为六大类:数据传送类指令、算术运算类指令、位操作指令、串操作指令、控制转移指令、处理器控制指令。8086指令按操作数个数可划分为三种类型:双操作数指令、单操作数指令、无操作数指令。,1通用数据传送指令,(1)传送指令MOV(2)查表转换指令XLAT,2地址传送指令,(1)传送有效地址指令LEA(2)传送偏移地址及数据段首址指令LDS(3)传送偏移地址及附加段首址指令LES,3标志位传送指令,(1)标志送AH指令LAHF(2)AH标志送指令SAHF(3)标志进栈指令PUSHF(4)
10、标志出栈指令POPF,4.堆栈操作指令,(1)进栈指令PUSH(2)出栈指令POP,算术运算类指令,8086的算术运算类指令能够对二进制或十进制(BCD码)数进行加、减、乘、除运算,操作数的数据形式可以是8位或16位的无符号数或带符号数。对于单操作数指令,不允许使用立即数形式;对于双操作数指令,只有源操作可以使用立即数,两个操作数中必须有一个在寄存器中。,1.加法运算指令,(1)加法指令ADD(2)带进位加法指令ADC(3)加1指令INC,2.减法运算指令,(1)减法指令SUB(2)带借位减法指令SBB(3)减1指令DEC(4)求负数指令NEG(5)比较指令CMP,3.乘法运算指令,(1)无符
11、号数乘法指令MUL(2)有符号数乘法指令IMUL,4.除法运算指令,(1)无符号数除法指令DIV(2)有符号除指令IDIV,5.符号扩展指令,(1)字节转换成字指令CBW(2)字转换成双字指令CWD,6.十进制算术运算调整指令,(1)非压缩BCD码调整指令(2)压缩BCD码调整指令,逻辑运算类指令,8086提供的位操作指令包括逻辑运算指令和移位指令,这类指令可直接对寄存器或存储器中的位进行操作。逻辑运算指令包括:AND指令、OR指令、XOR指令、TEST指令和NOT指令,其中前四种指令是双操作数指令,符合双操作数指令的一般规律,这四条指令执行后将使CF和OF位为0,AF位不确定,而SF、ZF和
12、PF位则根据运算结果设置;NOT指令是单操作数指令,符合单操作数指令的一般规律,它的执行不影响标志位。,1.逻辑与指令,格式:AND OPD,OPS功能:将目的操作数与源操作数按位相与,结果送目的操作数。即:OPD(OPD)(OPS)。,2.逻辑或指令,格式:OR OPD,OPS功能:将目的操作数与源操作数按位相或,结果送目的操作数。即:OPD(OPD)(OPS)。,3.逻辑异或指令,格式:XOR OPD,OPS功能:将目的操作数与源操作数按位相异或,结果送目的操作数。即:OPD(OPD)(OPS)。,4.测试指令,格式:TEST OPD,OPS功能:目的操作数与源操作数按位相与,结果反映在标
13、志位上,但不送回目的操作数。即:(OPD)(OPS),5.逻辑非指令,格式:NOT OPD功能:将目的操作数各位取反,结果送目的操作数。即:OPD(OPD),移位操作类指令,移位指令包括逻辑移位指令、算术移位指令和循环移位指令。这些指令都对目的操作数按操作符规定的方式向左或向右移动指定位数的操作。这些指令均有统一的语句格式:标号:操作符OPD,1或 标号:操作符OPD,CL,(1)逻辑左移指令(2)算术左移指令(3)逻辑右移指令(4)算术右移指令(5)循环左移指令ROL(6)循环右移指令ROR(7)带进位的循环左移指令RCL(8)带进位的循环右移指令RCR,串操作类指令,串操作指令中,源操作数
14、用寄存器SI寻址,默认在数据段DS中,但允许段超越;目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越。每执行一次串操作指令,作为源地址指针的SI和作为目的地址指针的DI将自动修改:1(对于字节串)或2(对于字串)。地址指针是增加还是减少则取决于方向DF标志。在系统初始化后或者执行指令CLD指令后,DF=0,此时地址指针增1或2;在执行指令STD指令后,DF=1,此时地址指针减少1或2。,1传送指令MOVS2.往目的串中存数指令STOS 3.从源串中取数指令LODS4.串比较指令CMPS 5.串搜索指令SCAS6重复前缀指令REP/REPZ/REPNZ,控制转移类指令及其寻址方式,I
15、ntel 8086中,程序的执行序列是由代码段寄存器CS和指令指针IP确定的。CS包含当前指令所在代码段的段地址,IP则是要执行的下一条指令的偏移地址。程序的执行一般是以指令序列顺序执行,但有时需要改变程序的流程。控制转移类指令通过修改CS和IP寄存器的值来改变程序的执行顺序,包括5组指令:无条件转移指令,有条件转移指令,循环指令,子程序指令和中断指令。,1.控制转移指令,(1)控制转移指令(2)无条件转移指令(3)条件转移指令(conditional jump),2.指令寻址方式,(1)段内直接寻址(2)段间直接寻址(3)段内间接寻址(4)段间间接寻址,处理机控制类指令,处理机控制类指令用来
16、控制各种CPU的操作,如暂停、等待或空操作等。,汇编语言的指令语句和伪指令语句操作数一般为常量、变量、标号、表达式。,5.5 8086 汇编语言的数据、表达式和运算符,常数,常量是没有任何属性的纯数值,它的值在汇编期间已能完全确定,且在程序运行中也不会发生变化。常量分为数值常量、字符串常量和符号常量,它主要用于指令语句中的立即数或伪指令语句中给变量赋初值等。,1.数值常量2.字符串常量3.符号常量,变量,在汇编语言中,变量是一个数据存储单元的名称,即数据存放地址的符号表示。它代表存放在某些存储单元的数据,这些数据在程序运行期间随时可以改变。为方便访问变量,在程序中通过变量名来使用变量。,变量,
17、变量名-为用户自定义标识符,表示初值表首元素的逻辑地址,即用这个符号表示地址,常称为符号地址。变量名可以没有,这种情况,汇编程序将直接为初值表分配空间,无符号地址。设置变量名是为了方便存取它指示的存储单元。初值表-是用逗号分隔的参数,主要由数值常数、表达式或?、DUP组成。其中?表示初值不确定,即未赋初值;重复初值可以用DUP进行定义。DUP的格式为:重复次数 DUP(重复参数)变量定义伪指令-有DB/DW/DD/DF/DQ/DT,它们根据申请的主存空间单位分类。,标号,标号是一条指令语句的符号地址,在汇编源程序中,只有在需要转向一条指令语句时,才为该指令语句设置标号,以便在控制转移指令中直接
18、引用这个标号。标号一般在代码段中定义和引用。由于标号代表了指令的符号地址,所以标号也有3个属性:段属性(SEG):标号的段属性是指标号定义所在段的段首地址。偏移属性(OFFSET):标号的偏移属性是指标号所在段的段首地址到该标号的字节距离。类型属性(TYPE):标号的类型属性表示了它的转移特性,即该标号是作为段内还是段间转移(或调用)指令的目标地址。标号的类型属性有2种:NEAR类型和FAR类型。,表达式与运算符,1.数值表达式2.地址表达式(1)属性运算符(2)数值返回运算符(3)分离运算符(4)其他运算符,5.6 8086 汇编语言的伪指令,伪指令又称为伪操作,伪指令是汇编语言程序设计的一
19、个重要部分,由于汇编程序在汇编过程中无法区分源程序中的分段情况,哪些是数据,哪些是指令,也无法识别数据的类型,以及源程序在哪结束,因此,80X86宏汇编语言提供了多种伪指令,它主要告诉汇编程序如何正确地将汇编源程序汇编成目标程序。,5.6.1 数据定义及存储器分配伪指令,常用的数据定义伪指令有DB、DW、DD、DQ、DT。它们的定义如上节所示。格式:变量 数据定义伪指令 表达式,表达式,功能:定义数据存储区,类型由数据定义伪指令确定,初值由表达式给定。,5.6.2 表达式赋值伪指令,1等价伪指令EQU格式:符号名 EQU 表达式功能:为常量或表达式及其它各种符号定义一个等价的符号名,但它不申请
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-6586383.html