第5讲汇编语言程序设计.pptx
《第5讲汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《第5讲汇编语言程序设计.pptx(135页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1机器语言、汇编语言、高级语言汇编和连接汇编是将汇编源程序翻译为机器代码,即目标程序;目标程序必须经过连接,才能生成可执行文件;连接是将目标程序和库文件等连接为可执行程序;EXE文件除了程序外还有一个程序段前缀PSP,PSP长度为256字节。前2个字节是一条INT 20H指令。第1页/共135页2汇编语言源程序结构 第2页/共135页3汇编语言的语句格式汇编语言共有三种语句类型 指令语句 伪指令语句 宏指令语句1.指令语句及其格式 指令语句即8086CPU的指令,每一条指令即可构成一指令语句。每一指令都有对应的机器代码。指令语句格式 标号:助记符 操作数,;注释格式共有四部分:其中标号,操作数
2、,注释可以是任选项;助记符是必选项,该项在一条语句中不可省略。标号最多由31个字母和数字字符构成。还可以使用?_$等字符。标号后面一定要跟一个冒号;注释前一定加一分号。第3页/共135页42、伪指令语句及其格式 伪指令语句不是真正的指令语句,它不产生机器代码,它是汇编程序要求的,用来指示汇编程序做何种操作 伪指令语句格式 名字 伪指令 操作数,操作数 ;注释 说明:格式共有四部分:其中名字,操作数,注释可以是任选项;伪指令是必选项,该项在一条伪指令语句中不可省略。对于有些语句,名字也是必需的。名字后面不要跟冒号:注释前一定加一分号;各个参数之间用,分开。标号与名字或其他变量必须由字母或特殊字符
3、打头的字母数据串,中间不能有空格,合法的字符包括:字母 AZ 或 az;数字 09 特殊字符:?.$_ ;圆点(.)只能作为第一个字符。第4页/共135页53、宏指令语句及其格式宏指令语句:为了书写方便,把一个重复出现的汇编语句序列用一条指令代替,这种重新定义的指令就称为宏指令。这种由宏指令组成的语句称为宏指令语句。宏指令必须先定义,才能被使用,这称为宏定义;在汇编时,又要把宏指令语句进行宏展开,生成对应的机器代码。宏指令语句格式将在后面应用中介绍。第5页/共135页6常用伪指令语句一、符号定义语句 1、赋值语句(EQU)格式:符号名 EQU 表达式说明:EQU语句给符号定义一个值或其他符号名
4、,甚至定义一条可执行指令等。它把表达式赋给符号名。在程序中,EQU对一个符号名只许定义一次。例如 :COUNT EQU 20 BLOCK DB READ AFTER ME NUM EQU$-BLOCK 第6页/共135页7常用伪指令语句(续)2、等号语句(=)格式:符号名=表达式 说明:此语句的功能与 EUQ 类似,但该语句在一个程序中可以对同一符号名多次再定义。例如 A1=10 ;A1 定义为 10 A1=100 ;A1重定义为100 A1 EQU 20;出错,因为A1已定义过,不能再用EQU重新定义。第7页/共135页8常用伪指令语句(续)二、数据定义语句 1、定义字节语句(DB-Defi
5、ne Byte)格式:符号名 DB 表达式 说明:数据定义语句(或称数据伪指令或变量定义伪指令),它可以是DB、DW、DD、DQ、DT。表达式可以是下列情况之一:一个常数表达式;问号(?)作为非确定的初始值;一个或多个字符的字符串(只限于DB类型);重复子句:重复次数 DUP (表达式)(Duplicate)第8页/共135页9常用伪指令语句(续)举例:ONE DB 1,2,3,4,5 ;TWO DB A ;THREE DB Welcom you!;FOUR DB?,?;SIX DB 50 DUP(5,6,7);DATA1 DB 10 DUP(?);DATA2 DB 20 DUP(5);DAT
6、A3 DB 100 DUP(STACK);第9页/共135页10常用伪指令语句(续)二、数据定义语句(续)2、定义字语句(DW-Define Word)格式:符号名 DW 表达式 说明:定义字语句,与DB类似,只不过定义一个字(二个字节),其格式与表达式和DB相似。例如 BUF DW 1122,3344,5566 ;定义了3个字(16位)常数 BUF1 DW 128*4 ;定义了一个常数表达式,由汇编来运算。BUF2 DW 100 DUP(?);定义了100个字单元,占用了200个内 存单元,每个单元的内容是不确定的。第10页/共135页11常用伪指令语句(续)3、定义双字(DD),四个字(D
7、Q),10个字节(DT)DD(Define Doubleword);定义双字(4个字节)DQ(Define Quadword);定义4个字(8个字节)DT (Define Tenbyte);定义10个字节 DD,DQ,DT 的格式、表达式及用法与DB,DW语句类似。第11页/共135页12常用伪指令语句(续)三、段定义语句 1、段定义语句 格式:段名 SEGMENT 定位类型 连接方式 类别 段名 ENDS 说明:这两个伪操作总是一起出现。该语句将汇编语言源程序分成段,由该语句规定哪个段是代码段,哪个段是数据段或堆栈段。段名不能省略,由编程者自己指定段名,两处段名必须一致。方括号中的三项是可选
8、项,是赋给段名的属性。各项顺序不能错,且用空格分开。第12页/共135页13常用伪指令语句(续)1、段定义语句(续)定位类型 表示此段的起始边界要求,可以是PAGE,PARA,WORD或BYTE之一。它们表示如下的地址要求:PAGE=0000 0000 B PARA=0000 B (默认值)WORD=0B BYTE=B 它们分别表示以页、节、字、字节为段的地址边界,若此 项省略,则默认值为PARA(paragraph)。第13页/共135页14常用伪指令语句(续)连接方式 用来告诉连接程序(LINK)本段与其他段的关系分别有 六个选项(NONE,PUBLIC,COMMON,AT表达式,STAC
9、K,MEMORY)NONE 本段与其他段逻辑上没有关系,每段都有自己的基地址。(默认值)PUBLIC 把本段与同名同类别的其他段连接成一个段。COMMON 为本段和同名同类型的其他段指定相同的基址。各段会产生覆盖。AT表达式 把本段放在表达式的值所指定的地址上(偏移量按 0 处理),STACK 此段为堆栈段,LINK要求被连接的程序至少有一个STACK段。MEMORY 把本段定位在所有其他段之上。第14页/共135页15常用伪指令语句(续)类别 需用单引号括起来,在几个模块连接时才需要,若不准备和其他程序组合,可以不指定类别。当几个程序模块进行连接时,具有相同类别名的逻辑段装入连续的内存区,类
10、别名相同的逻辑段,按先后出现的顺序排列。没有类别名的逻辑段,与其它无类别的逻辑段一起连续装入内存。类别名可以由用户任意设定,但是一般对于堆栈段为:STACK,代码段为:CODE,数据段为:DATA第15页/共135页16常用伪指令语句(续)2.段寻址语句(ASSUME)格式:ASSUME 段寄存器:段名,说明:由于段名是任意的,汇编程序并不知道哪个段名对应哪个段,所以要用ASSUME伪指令来指明段寄存器与段名之间的关系。该语句必须写在代码段中,一般在段定义语句之后。段名可以是SEGMENT定义的一个段名,或用GROUP定义的一个组名。段寄存器可以是CS,DS,SS,ES 之一。例如 ASSUM
11、E CS:CODE,DS:DATA,SS:STACK,ES:DATA 第16页/共135页17常用伪指令语句(续)设置段地址ASSUME伪指令仅仅指出各逻辑段应该装填的地址,但是并未给相应的段寄存器赋值;在程序代码段开始时应当对DS,ES,SS进行段基址装填,CS则在加载程序后由系统自动装填。SS也可以由系统自动装填,但是在定义堆栈段时,必须把参数写全:STACK SEGMENT PARA STACK STACK第17页/共135页18常用伪指令语句(续)3.定义偏移地址语句(ORG-origin)格式:ORG 表达式 说明:该语句指定了在它之后的程序段或数据块存放的起始地址的偏移量(0000
12、h0FFFFH),语句中表达式的值就是起始地址,从该地址连续存放程序或数据,除非遇到一个新的ORG语句。例如 DATA SEGMENT ORG 1000H BUF DB 10 DUP(20H)DATA ENDS 第18页/共135页19举例DATA SEGMENT ORG 100H X DB 12H Y DW?ORG 200H Z DD 9C56HDATA ENDS 第19页/共135页20常用伪指令语句(续)四、过程定义语句 格式:过程名 PROC(NEAR/FAR);缺省值为NEAR RET 过程名 ENDP 说明:该语句的PROC与ENDP必须成对出现,过程名前后必须一致。该语句实际上是
13、定义了一个子程序,该过程可以被其他程序调用。属性可以是NEAR或FAR,表示该过程可以被段内调用或段间调用。例如 SUBPROG PROC FAR 主程序如下 CODE SEGMENT RET ASSUME CS:CODE,DS:DATA SUBPROG ENDP 以上定义了一个名为 CALL SUBPROG SUBPROG的过程 CODE ENDS 第20页/共135页21常用伪指令语句(续)五、结束语句 格式:END 表达式 说明:该语句表示整个源程序的结束,它告诉汇编程序汇编任务到此结束。表达式必须是源程序的启动地址。如果几个模块连接在一起,则只能指定主模块的启动地址。其他模块不能有启动
14、地址。如果不使用选择项表达式,则没有启动地址传递给 LINK。程序就不知道从何处启动。例如 END START ;START为源程序的启动地址。第21页/共135页22汇编源程序基本结构汇编源程序是一种分段结构。一般都会包括数据段、堆栈段和代码段。DATA SEGMENTDATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENT CODE ENDS END 第22页/共135页23汇编源程序基本结构数据段中定义程序所使用的变量、数组、常数、表格等。也可以保留必要的内存单元。DATA SEGMENTBLOCK DW 28H,139H,0 DW 3010H,1122H
15、COUNT EQU ($-BLOCK)/2SUM DW?TABLE DW 0,1,8,27,64 DW 125,216,343 DW 512,729DATA ENDS第23页/共135页24汇编源程序基本结构堆栈段中定义堆栈的大小。也可以直接定义SP的位置,如右边的示例。但并不需要。STACK SEGMENT PARA STACKAREA DB 64 DUP(?)SPT EQU$-AREASTACK ENDS-r AX=0000 BX=0000 CX=0089 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=14F9 ES=14F9 SS=150A CS=
16、150E IP=0000 NV UP EI PL NZ NA PO NC150E:0000 B364 MOV BL,64第24页/共135页25汇编源程序基本结构代码段中应包括:ASSUME语句;至少一个过程,即PROC;对段地址寄存器(DS、SS、ES)赋值;准备返回DOS系统的指令;实现程序功能的指令。CODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21H RETMAIN ENDPCODE ENDS第25页/共135页26汇编语言源程序结构任何一个汇编语言源程序可以由
17、若干个段组成,至少应该包含一个代码段,堆栈段和数据段视需要而定如果使用堆栈,最好用户自行设置堆栈空间,如果用户不设置,则使用系统堆栈空间。第26页/共135页27EXE程序汇编和连接后生成可执行文件(.exe)EXE文件有两部分组成:程序段前缀(PSP,Program Segment Prefix)和装入模块PSP:由连接程序生成,含有文件的控制信息和重定位信息。偏移地址空间:00HFFH;DOS利用PSP对有关数据进行重新定位。第一个单元存放着DOS返回指令INT 20H装入模块:程序本身;DOS从100H开始装入程序本身。第27页/共135页28EXE程序(续)EXE文件装入内存时,DS、
18、ES指向PSP,而不是程序的数据段和附加段,所以要在程序中根据实际的数据段和附加段改变相应的DS、ES。标准程序前奏:由于装载时将DS、ES指向PSP的起点,因此应当在程序开始时将PSP的起点地址压入堆栈,从而在返回时,返回DOS:PUSH DSSUB AX,AXPUSH AXCS、IP指向代码段程序开始执行的指令,SS,SP指向堆栈段。源程序中如果没有堆栈段,则SS=PSP段地址,SP=100H。第28页/共135页29COM程序COM程序结构程序规模较小,且不用与外部模块装配,可以把各段包括在代码段内,编译为COM程序。COM程序的结构COM程序不允许定义堆栈段。COM程序更紧凑,执行速度
19、快COM程序不超过64KBPSPPSP00DOS暂驻部分00IP=0100HCS,DS,ES,SS64KBSP=0FFFEH用户程序区64KBRAM低端RAM高端256字节第29页/共135页30数据定义常量十六进制第一个字符必须是数字,否则要加数字“0”。常量若是ASCII码字符串,要用或“”括起来。变量代表一个内存单元,编译后就是一个地址内存单元,有段地址和段内偏移量,还有类型即字节数,1(字节变量)2(字变量)4(双字变量)标号代表代码段内某条指令的地址,也有三个属性:段地址、段内偏移量和类型。类型有两种:NEAR标号(-1,只在段内引用)和FAR标号(-2,可在段内、段间引用)。常量、
20、变量、标号不能使用保留字。第30页/共135页31运算符算术运算符 *MOD(模)SHL(左移)SHR (右移)如:PI_REM EQU314156 MOD 100000 MASKB EQU 00110010BMASKB1 EQU MASKB SHL 2MASKB2 =MASKB SHR 2逻辑运算符AND 逻辑与 OR 逻辑或 XOR 逻辑异或 NOT 逻辑非 逻辑运算符在汇编时完成运算,逻辑运算指令在执行时完成。MASKB EQU 00101011BMOV AL,5EHAND AL,MASKB AND 0FH第31页/共135页32运算符关系运算符EQ等于NE不等 LT小于 GT大于 LE
21、小于等于 GE大于等于产生真(0FFFFH)和假(0000H)两种结果如:MOV AX,(CHOICE LT 20)AND 5)OR (CHOICE GE 20)AND 6)第32页/共135页33运算符值返回运算符1、$运算符(返回汇编器当前地址计数器的值)2、SEG和OFFSET运算符 SEG 返回变量或标号的段地址 OFFESET 偏移地址3、TYPE的运算符返回变量或标号的类型。4、LENGTH和SIZE运算符只对DUP定义的变量有意义。LENGTH返回元素的个数,SIZE返回变量的字节数,即LENGTH与TYPE的乘积。5、HIGH(16位的高字节)和LOW(16位的低字节)运算符S
22、EG 返回变量或标号的段地址OFFESET 偏移地址MOV AX,SEG TABLEMOV BX,OFFSET TABLE如:AB DD 1MOV AX,TYPE AB如:TABLE DW 100 DUP(?)MOV CX,LENGTH TABLEMOV CX,SIZE TABLE如:NUM EQU 0CDEFHMOV AH,HIGH NUMMOV AL,LOW NUM第33页/共135页34运算符属性运算符PTR运算符用于暂时改变变量或者标号的原有属性格式:新属性 PTR PTR 表达式如:F1 DW 1234H F2 DB 23H,56H,18H MOV AL,BYTE PTR F1 MO
23、V BX,WORD PRT F2 JMP FAR PTR SUB1MOVBYTE PTR SI,100MOV WORD PTR SI,100第34页/共135页35运算符LABEL运算符 对已定义的内存单元属性重定义,并取新名。本身不分配内存单元。如:CFB LABEL BYTEDFW DW 4567HEFW LABEL WORDFFB DB 89H,40HTHIS运算符 新属性放在右边如:FIRST EQU THIS BYTESECOND DW 5678HMOV BL,FIRSTMILES EQU THIS FARCMP SUM,100(64K)JMP MILES第35页/共135页36运算
24、符属性运算符段超越运算符,强迫当前指令的操作数的寻址按照超越运算符指定的段寻址。如:MOV AX,ES:BXSHORT运算符 通知汇编器,转移目标在-127+128之间(段内相对转移)如:JMPSHORT F1第36页/共135页37基本结构程序设计顺序结构程序设计32位无符号数的乘法8086只能直接进行16位数的乘法。32位数的乘法要通过16位数的乘法来实现。32位数相乘的结果是64位。第37页/共135页38DATASEGMENTNUM1DW8000H,8000HNUM2DW8008H,8000HMUTDW4 DUP(0)DATAENDSSTACKSEGMENTDB100 DUP(s)ST
25、ACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTAPROCFARPUSHDSXOR AX,AXPUSHAX第38页/共135页39MOV AX,DATAMOV DS,AXLEABX,NUM1MOV AX,BXMOV SI,BX+4MOV DI,BX+6MUL SI;低16位乘低16位MOV BX+8,AXMOV BX+10,DXMOV AX,BX+2;乘数的高16位MUL SI;高16位乘低16位ADD BX+10,AXADC BX+12,DX第39页/共135页40MOV AX,BXMUL DI;低16位乘高16位ADD BX+10,AX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
限制150内