《汇编语言程序设计》PPT课件.ppt
《《汇编语言程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》PPT课件.ppt(143页珍藏版)》请在三一办公上搜索。
1、第四章 8086汇编语言程序设计,几个概念8086汇编语言的语句8086汇编中的伪指令8086汇编中的运算符汇编语言程序设计宏定义与宏调用汇编语言系统程序设计实例与上机调试,几个概念,程序是一组为完成某种功能而按一定顺序(由算法确定)编排的指令序列。本章将首先介绍8086宏汇编语言的基本语法及常用伪指令,然后用实例说明8086宏汇编语言源程序的设计方法。,1.3种语言,机器语言:当指令和数据都用二进制代码表示时,计算机能够直接识别与执行,因而称 之为机器语言。高级语言:是完全独立于机器的通用语言,效率低。面向过程、面向对象,必须译成机器语言。汇编语言:汇编语言是一种用符号表示的、面向CPU 指
2、令系统的程序设计语言。是用指令的助记符、符号地址、标号等 编写程序的语言。,汇编语言程序是机器语言程序的符号表示,用汇编语言编写程序能够:,程序目标代码占用内存少,执行速度快,效率高,具有实时性.,直接利用硬件系统的特性(如寄存器、标志、中断系统等),直接对位、字节、字、寄存器或存储单元、I/O端口进行处理,同时也能直接使用CPU指令系统提供的各种寻址方式,编制出高质量的程序。,从源程序获得目标程序的过程,为了能顺利完成汇编,用户必须为汇编程序提供一些额外的、与硬件有关的信息.如:程序使用的变量应分别存放在内存的哪个单元、堆栈应从内存的什么地址开始等等。,2.汇编程序的作用,将源程序翻译成机器
3、语言程序。按用户要求自动分配存储区域(如程序区、数据区等)。自动地把各种进制数 二进制数。把字符 ASCII码。计算表达式的值。自动对源程序进行检查,指出语法错误(如非法格式、未定义的助记符、标号、漏掉操作数等)。,3.汇编语言程序的上机与处理过程,汇编语言上机过程D:EDIT ABC.asmD:MASM ABC 有语法错,回EDIT下改该程序D:LINK ABC 有错,回在EDIT下改程序D:ABC 运行结果错,回EDIT下改程序 或在DEBUG下调试,找原因。D:DEBUG ABC.exe,4.1 汇编语言的程序结构与语句格式,语法语句和程序结构必须遵循的规则。源程序按其编译器能够理解的语
4、法编 写方可。,4.1.1 汇编语言源程序的框架结构,1.源程序由若干个逻辑段组成每段由伪指令SEGMENT开始、由ENDS结束。通常有:代码段(必不可少)堆栈段建立一个堆栈区,以存放中断时的断 点地址,子程序调用时断点地址及子程序 间传递参数。数据段和附加数据段用来在内存中建立一个 适当容量的工作区用以存放数据。,一、源程序的结构特点 按逻辑段组织源程序。包括代码段、堆栈段、数据段等。,【例题4.1】实现:123+456sum 的源程序,CODESEGMENT;语句6 ASSUME CS:CODE,DS:DATAMAIN PROC FAR;语句8START:PUSH DS;语句9.;RET;
5、语句17MAIN ENDP;语句18CODE ENDS;语句19,数据段,代码段,DATA SEGMENT;语句1 A DW 123;语句2 B DW 456;语句3 SUM DW?;语句4DATA ENDS;语句5,END START;语句20,汇编语言语法,3.每段由若干语句行组成,每行只有一条语句且不能超过128个字符,允许有后续行。整个源程序以END结束,它通知汇编程序停止汇编。END后的START标号为程序运行时的起始地址。,2.在代码段起始处,用ASSUME伪指令说明各个段Reg与逻辑段的关系,并在程序 起始处设置段Reg的初值(代码段CS除外)。,4.每条语句由4个字段构成。各字
6、段间用空格分开。,5.源程序中设有返回DOS的指令语句,使程序执行完后返回DOS系统的命令接受状态。,二、源程序与PC DOS的接口 汇编语言源程序(.ASM)经过汇编转变为目标程序(.OBJ),当用链接程序对其进行链接和定位时,操作系统为每个用户程序建立:,一个256字节的程序段前缀区(PSP),存放用户程序信息。在PSP的开始处(偏移地址0000H)安排一条INT 20H 软中断指令。INT 20H功能是使系统返回到DOS管理状态。因此,用户执行程序完后,必须能够转到PSP起始处执行INT 20H指令。,定位用户程序 设置DS和ES的值使之指向PSP的开始处,即PSP的段地址 DS和ES。
7、将用户程序的段基址、第一条指令的偏移地址设置CS、IP;同时设置SS、SP。运行用户程序,保证用户程序执行完后返回DOS的方法 第一种方法:标准序法 将用户程序中的主程序定义为FAR过程,其最后一条指令为RET(当程序执行到RET时,会将栈顶的两个字分别送IP、CS)在主程序的开始处将PSP的段地址和偏移地址(DS、ES和0000H)进栈保护:PUSHDS;保护PSP段地址MOVAX,0;保护偏移0地址PUSHAX;用户程序开始当用户程序返回时,会返回到DOS(执行INT 20H)。,注:由于DS、ES由DOS设置,所以在用户程序开始处应重新设置DS、ES。,第二种方法:非标准方法 不定义主程
8、序为FAR过程,并去掉标准序。在代码段结束之前(即CODE ENDS之前)增加两句:MOVAH,4CHINT21H;4CH号的DOS系统功能调用,8086汇编语言的语句,源程序是一个语句序列,每条语句规定一个基本操作,语句 序列完成某个特定的操作任务。,一、语句的种类与格式 1.语句的种类(1)指令语句 _可执行语句,对应CPU指令系统规定的一条指令。,汇编时,汇编程序为之产生一一对应的机器目标代码。例:MOVAH,4CH INCBX,(2)伪指令语句 _汇编时给汇编程序提供与硬件有关的汇编信息,本身并不产生目标代码,CPU不执行。是指示汇编 程序进行汇编的操作。,例:MESSAGE DB T
9、HIS IS A SAMPLE PROGRAM.;定义变量MESSAGE在数据段DATA中的存放形式汇编时,汇编程序将MESSAGE定义为一个字节类型数据区的首地址,并按字节存储字符串。,2.语句格式,指令语句的一般格式:标号:前缀 指令助记符 操作数;注释 伪指令语句的格式:名字 伪指令定义符 操作数;注释,标识符字段 标识符字段由各种有效字符组成,一般表示符号地址,具有段基址、偏移量、类型三种属性。很多情况下标识符字段是语句中的可选部分,主要为便于程序的读写方便而使用。标识符字段通常有:标号 后跟冒号,在程序中作为JMP、LOOP指令的转移目标,与具体的指令地址相联系。名字 用于定义常量名
10、、变量名、过程名、段名等。,(1)标号和名字,标号和名字必须符合汇编语言对标识符的规定:以字母开头,由字母(不分大小写)、数字(09)及部分特殊字符(?$和下划线_等)组成,字符串长度不超过31个。标识符不能是汇编语言中有特定意义的保留字、助记符、Reg等,如:CPU的内部寄存器名AH、AL、AX等。,(2)助记符、定义符 规定指令或伪指令的操作功能,是语句中唯一不可缺少的部分。,对于指令,汇编程序将其翻译成机器语言指令。MOV AX,100 B8 00 01对于伪指令,汇编程序据其要求的功能进行处理。data SEGMENT data与一段地址对应 string DB Tsinghua st
11、ring与一内存地址对应,前缀仅可出现在指令助记符前。,(3)操作数 指令语句中提供给指令的操作对象、存放位置。操作数可以是1个、2个或0个,2个时用逗号,分开。(INC BX;MOV AX,DATA;RET)伪指令语句中操作数的格式和含义随伪操作指令不同而不同。,(4)注释 以“;”开始,给以编程说明。汇编程序对“;”后的内容不做处理。注释对汇编不起任何作用,不对应于任何机器码,仅增强源程序的可读性。,操作数可能为以下几种情况:常量操作数:如 34 等。寄存器操作数:如 AX 等。存储器操作数:如0100H 等。表达式操作数:如AX+2、SEG NUM1等。,4.2 8086汇编中的伪指令,
12、指示汇编、链接程序如何进行汇编和链接,影响目标代码生成,本身不产生目标代码。有符号定义语句、数据定义语句、程序结构语句、模块链接语句、有关宏的语句、条件汇编语句等。,给表达式赋予一种符号名,以便在程序中用它替代表达式1、等值语句 格式:符号名 EQU 表达式例:PORT EQU 40H;用PORT代替40H号端口 COUNT EQU CX;用COUNT代替CX寄存器 M EQU MOV;用M代替MOV指令助记符,注:EQU语句不能重新定义,即在同一源程序中,用EQU定义过的符号不能赋予不同的值。,例:B EQU bp+8 B EQU 20H 不行!,4.2.1 符号定义语句,2、等号语句 格式
13、:符号名 表达式 功能与EQU类似。例:PP=89FAH;赋值 PP=PP+1;PP=89FBH,注:等号语句与EQU语句的相同点:符号不是变量,所以用EQU、=定义的符号不占用存储器单元。区别:等号语句可以在同一源程序中重复定义符号。,4.2.2 变量定义语句 用于定义变量(程序中所用的存储器操作数),指定变量的类型和名称,并为其分配存储单元和预置初值。,1.格式 变量名 数据定义符 操作数,操作数,操作数 变量名指示存储器操作数的地址(符号地址)数据定义符指示存储器操作数的类型(字节、字、双字等)操作数指示存储器操作数的内容,是赋给变量的初值。多个相同类型的变量可在一条语句中定义 表示可选
14、,汇编程序将定义的操作数,按其类型分配内存单元数,并顺序存入变量名指向的内存单元中。常用的数据定义符有:DB 变量为字节数据类型DW 变量为字数据类型,存放时低对低高对高。DD 变量为双字数据类型,存放时低对低高对高。,经过定义的变量有3种属性:段值、段内偏移量和类型。若某个变量表示的是一个数组,则其类型属性为变量的单个元素所占用的字节数。,其它的数据定义符有:DQ 变量为4字数据类型(64位)DT 变量为10字节数据类型(80位),2.具体形式和功能(1)为数据项分配存储单元,用变量名作为该存储单元的名称。例:X DB25H Y DW4142H Z DD12345678H 存储形式如图:,初
15、始值也可以是表达式 如:IN_PORT DBPORT_VAL OUT_PORT DBPORT_VAL+1 其中,PORT_VAL已由EQU语句赋了值。,(2)预留内存单元,但不赋值,以存放运算结果.例:A DB?B DB?,(3)定义一个数组 例:W_TABLE DW 1122H,3344H B_TABLE DB 1,2,4,9,16 当表中的操作数相同时,可用重复操作符DUP来缩写:格式:重复次数 DUP(操作数)例:ALL_ZERO DB 0,0,0,0,0,0 ALL_ZERO DB 6 DUP(0),(4)定义字符串(只能用DB定义)例:MESSAGE DBHELLO 每个字符的值为它
16、的ASCII码值,所以 用DB来定义。,例:str1 DB TsingHua str2 DB INPUT:,0dH,0aH,$,data SEGMENTxx DB 1,-1,0FCHyy DW 1,-1,0FCHzz DD 1,-1,0FCHstr DB TsingHuabuf DB 4,?,4 DUP(?)DB dataenddata ENDScode SEGMENT ASSUME CS:code ASSUME DS:datastart:MOV AX,data MOV DS,AX LEA BX,xx LEA SI,yy LEA DI,zz MOV AH,4CH INT 21Hcode END
17、S END start,例:在DEBUG下查看变量存放情况。,例:XX DW CYCLE YY DD CYCLE CYCLE:MOV BX,AX;CYCLE是程序的一个NEAR标号,例:VAR3 DW VAR+1;将VAR+1的的偏移地址存入 VAR3开始的两个字节或 VAR3 DD VAR+1;将VAR+1的的全地址存入 VAR3开始的两个字,(5)将已定义的地址存放内存单元 当操作数是标号或变量时,可用DW或DD将标号或变量操作数的偏移地址或全地址来初始化存储器。,例:TABLE DB 12H,34H TAL_PS DD TABLE,4.2.3 段定义伪指令(将程序分成若干逻辑段)用于告诉
18、汇编程序和链接程序如何按逻辑段来组织程序和利用存储器。,1.段定义语句 SEGMENT/ENDS 用于对 DS、ES、SS、CS 段的定义 格式:段名 SEGMENT 定位类型组合属性类别名(段体)段名 ENDS,功能:指出段名和段的各种属性,并表示段的开始和结束位置。,段定义由伪操作SEGMENT开始、ENDS结束。SEGMENT 和ENDS 必须成对出现,且段名必须相同。SEGMENT和ENDS语句之间可以有指令和其他伪指令,表示存放在该段内存中的变量、指令或其他伪指令对该段内存的处理 程序中可以定义多个段 程序经汇编、连接及装入内存后,段名为一具体的段值(常量值)。,(1)定位类型告诉链
19、接程序链接时段的起始边界,有4种选择:PAGE:段起始地址必须是256的倍数(XXX00H),最低8位为0。PARA:段起始地址必须是16的倍数(XXXX0H),最低4位必须为0。WORD:段起始地址必须是偶数(XX0B),最低1位必须为0。BYTE:段起始地址为任意值,即从任何地址开始都行。缺省类型为PARA。,(2)组合类型 在多模块(每个模块有自己的代码段、数据段、堆栈段)组合时,告诉链接程序本段与其他模块中同名段的链接关系,有6种选择:NONE:本段与其它同名段逻辑上不发生关系,有自己的段基地址(缺省选择)。PUBLIC:在满足定位类型的前提下,链接程序将其与其他模块中的同名段邻接在一
20、起,共用一个段地址。链接的先后次序由链接命令指定。,段定义的相关约定,STACK:与PUBLIC同样处理,链接后作为堆栈段,并自动初始化SS、SP,SS指向第一个STACK段。若程序中不说明STACK,则必须由用户在程序的开始处,自己通过语句设置SS、SP。COMMON:各模块中同名段重叠覆盖,有着相同的起始地 址。段的长度取决于最长的COMMON段。段的内容为所链接的最后一个模块中COMMON段的内容。AT表达式:链接程序把本段装在表达式值所指定的段地址(此方式不能指定代码段)。例:AT 0903H;本段从09030H开始存放。MEMORY:链接在其他所有段的后面(高端存储区)。若有多个ME
21、MERY段,则只认第一个,其余按COMMON处理。,段定义的相关约定,(3)类别名给各段的名字信息,表示段的类别。类别必须用单引号括起来,典型类别名如:STACK、CODE和DATA等。若缺省类别名,则表明该段类别为空。同名同类别的段在内存中依序连续存放。,2.段寄存器说明伪指令 格式:ASSUME 段寄存器:段名,段寄存器:段名,(1)设定特定的Sreg指向特点的段,说明源程序中定义的段应由哪一个Sreg去寻址。否则,汇编程序无法生成机器代码程序。(2)ASSUME并未真正的将段地址装入相应的Sreg。Sreg的初值还必须由用户在程序的开始处用MOV指令来设置(CS除外)。,3.指定地址伪指
22、令 ORG 在汇编程序中,有一个软件计数器(LC)地址计数器。在每个段定义开始处,它被复位为0。当汇编程序逐行扫描语句时,用LC保存当前指令的地址。格式1:ORG 表达;将表达式的值(065535)LC 格式2:ORG$+表达式;将LC的当前值$表达式的值 LC 功能:强行指定地址计数器LC的当前值,在段内改变它以后的代码或数据存放的偏移地址。,ORG语句之后段内所有的代码或数据均以表达式(常量)的值为起始偏移量连续存放,除非遇到另一个ORG语句。此语句本身并不占内存。,4.模块的定义和通信 MASM宏汇编语言提供了模块化编程伪指令,用以实现模块的定义与通信。一个任务的源程序由若干模块组成,每
23、个模块有代码段、数据段等,对应一个.ASM,是个独立的编译单位。当各个模块编译完毕,可用LINK连接各模块形成一个完整的可执行程序(.exe)。,1).模块定义伪指令 NAME/END NAME 模块名;为模块命名;语句 END 标号;结束模块模块名的作用是指示给连接程序进行连接用。源程序中可无模块定义,此时源文件名作为模块名。主模块的END后要跟标号,子模块不跟标号。部分可省略。,2).模块间通信伪指令 实现模块间数据或过程的互访和共享。格式:PUBLIC名字,名字,EXTRN名字:类型,名字:类型,,PUBLIC 和EXTRN配对使用。由PUBLIC 说明的名字是全局的,可以在其他模块中使
24、用,EXTRN表明本模块中使用的名字在别的模块中定义过,且类型一致。,其中,名字可以是标号、变量名、过程名或由EQU(或)伪指令定义的符号名。,类型可以是BYTE、WORD、DWORD、NEAR、FAR和ABS(常量属性)等。,格式:过程名 PROCNEAR/FAR RET 过程名 ENDP,4.2.4 过程和宏定义伪指令 过程和宏是模块化程序设计的基础。汇编语言中常用定义过程和宏的方法来实现按模块管理 程序代码的功能。,1.过程定义伪指令 过程:一段可以由CALL指令调用,用RET返回的程序。当整个源程序由主、子程序构成时,主、子程序 都在代码段,且都可用过程来表示(即定义为过程)。,功能:
25、定义一个过程,并指出过程名及过程的属性。过程定义由伪指令PROC开始、ENDP结束。PROC和ENDP之间为过程的指令序列。程序中可以定义多个过程。程序经汇编、连接及装入内存后,过程名为一具体的内存地址,指示子程序入口。,过程的属性有NEAR和FAR NEAR过程只能被定义该过程的段中的其他程序调用(段内调用)FAR过程可由任何段中的程序调用(段间调用)缺省时为NEAR 根据过程的属性,汇编程序自动对CALL、RET翻译成段内(段间)调用及段内(段间)返回的目标代码。,COD1SEGMENTASSUME CS:COD1,;代码段中的其它语句(主程序)SUB1PROC FAR;名为SUB1的FA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 汇编语言 程序设计 PPT 课件
链接地址:https://www.31ppt.com/p-5541243.html