版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机硬件汇编程序设计1第第4 4章:程序设计语言概述章:程序设计语言概述3. 3. 汇编语言汇编语言面向机器面向机器1是一种以处理器指令系统为基础的是一种以处理器指令系统为基础的低级程序设计语言低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令它采用助记符表达指令操作码,采用标识符号表示指令操作数操作数1一个助记符表示一条机器指令,与计算机硬件密切关一个助记符表示一条机器指令,与计算机硬件密切关联。所以熟悉计算机硬件是汇编语言程序员必须具备的联。所以熟悉计算机硬件是汇编语言程序员必须具备的条件。条件。一条指令一条指令 汇编汇编 机器码(机器码(1n1n字节)字节)第第4 4章
2、:汇编语言的特点章:汇编语言的特点优点:优点: 效率高可以直接、有效地控制计算机硬件,效率高可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序因而容易创建代码序列短小、运行快速的可执行程序 占用内存少占用内存少应用:应用:在有些应用领域,汇编语言的作用是不容置疑和无在有些应用领域,汇编语言的作用是不容置疑和无可替代的可替代的 与硬件关系紧密的程序与硬件关系紧密的程序 实时性要求很高的程序实时性要求很高的程序缺点:缺点: 不直观,开发时间长不直观,开发时间长 容易出错容易出错 汇编语言程序不能直接运行,必须要翻译成目标代码程序。这个汇编语言程序不能直接运行,必须要翻译
3、成目标代码程序。这个翻译的过程叫翻译的过程叫汇编汇编。完成汇编任务的程序叫。完成汇编任务的程序叫汇编程序汇编程序。汇编程序的汇编程序的功能功能: 将汇编语言源程序翻译成机器语言程序。将汇编语言源程序翻译成机器语言程序。 根据用户要求自动分配存储区域。根据用户要求自动分配存储区域。 自动把各种进位制数自动把各种进位制数二进制数。二进制数。 字符字符ASCASC码。码。 自动对源程序进行检查,给出错误信息。自动对源程序进行检查,给出错误信息。 在在IBM PCIBM PC微机中,有两个汇编程序:微机中,有两个汇编程序: 基本汇编基本汇编ASMASM;宏汇编;宏汇编MASMMASM第第4 4章:汇编
4、语言程序章:汇编语言程序第第4 4章:重点内容章:重点内容1汇编语言源程序格式与开发汇编语言源程序格式与开发1常量、变量和标号常量、变量和标号1汇编语言程序设计方法汇编语言程序设计方法2 顺序程序设计顺序程序设计2 分支程序设计分支程序设计2 循环程序设计循环程序设计2 子程序设计子程序设计4.1 4.1 汇编语言程序的基本语法汇编语言程序的基本语法;Example1.asmStacksegmentdb 100 dup (?)StackendsSeg1segmentStringdb Hello, Assembly !,0dh,0ah,$Seg1endSeg2segmentassume cs:s
5、eg2,ds:seg1,ss:stackStart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hSeg2endsend start4.1.1 4.1.1 汇编语言源程序的分段结构汇编语言源程序的分段结构一一. . 源程序的结构特点源程序的结构特点1. 1. 分段结构分段结构 程序由若干逻辑段组成,各逻辑段都有一个段名,由段程序由若干逻辑段组成,各逻辑段都有一个段名,由段定义语句(伪指令语句)定义和说明。定义语句(伪指令语句)定义和说明。 包括:包括: 代码段代码段CSCS必不可少必不可少 数
6、据段数据段DSDS建立工作区,存放常量、变量、中间结果等。建立工作区,存放常量、变量、中间结果等。 堆栈段堆栈段SSSS建立堆栈区,用于中断、过程调用、参数传递。建立堆栈区,用于中断、过程调用、参数传递。 附加段附加段ESES建立工作区。建立工作区。 4.1.14.1.1汇编语言源程序的分段结构汇编语言源程序的分段结构通常,通常,数据段放在代码段前面数据段放在代码段前面。 好处:好处: 事先定义程序中使用的变量事先定义程序中使用的变量 汇编过程中知道变量属性汇编过程中知道变量属性2. 2. 代码段起始处,用代码段起始处,用ASSUMEASSUME命令(伪指令)说明各个段命令(伪指令)说明各个段
7、寄存器与逻辑段的关系。寄存器与逻辑段的关系。各段各段REG (REG (除除CS)CS)的初值由用户的初值由用户设置。各段相对位置任意,以设置。各段相对位置任意,以END(END(* * *) )结尾。结尾。3. 3. 语句行:语句行:语句是汇编语言程序的基本组成单位。每个语句是汇编语言程序的基本组成单位。每个逻辑段由若干行汇编语句组成,逻辑段由若干行汇编语句组成,每行一个语句每行一个语句,且,且128VAR2VAR1VAR2,则汇编成:,则汇编成: MOV AXMOV AX,0FFFFH0FFFFH 如如VAR1VAR2VAR1VAR2,则汇编成:,则汇编成: MOV AXMOV AX,00
8、00H0000H例例2 2:要实现要实现 AX= 5 AX= 5 如果如果CHOICE20CHOICE=20CHOICE=20MOV AXMOV AX,(CHOICE LT 20)AND 5)OR(CHOICE GE 20)AND 6)(CHOICE LT 20)AND 5)OR(CHOICE GE 20)AND 6)(3 3)运算符和操作符的优先权等级)运算符和操作符的优先权等级 见见P158 P158 表表4.24.2 关系运算符关系运算符4.2 4.2 汇编语言的伪指令语句汇编语言的伪指令语句帮助汇编,只在源程序中,目标程序中是其汇帮助汇编,只在源程序中,目标程序中是其汇编结果。编结果。
9、分类:分类:u段定义语句(程序分段)段定义语句(程序分段)u符号定义语句符号定义语句u数据定义语句数据定义语句u过程定义语句过程定义语句u程序结束语句程序结束语句4.2.2 4.2.2 段定义段定义程序分段程序分段18086/80888086/8088的存贮器是分段的,所以必须按段的存贮器是分段的,所以必须按段来组织和利用存贮器。来组织和利用存贮器。1主要命令有:主要命令有:2 SEGMENT ENDS PUBLICSEGMENT ENDS PUBLIC2 ASSUME ORG STACKASSUME ORG STACK2 EXTRN PAGA TITLE COMMONEXTRN PAGA T
10、ITLE COMMON1. 1. 段定义段定义格式:格式: 段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型类别名类别名 . . . . (段体)(段体) . . 段名段名 ENDSENDS功能:功能:将源程序分为若干逻辑段,分别装入相应的将源程序分为若干逻辑段,分别装入相应的存储器段中。指出段名、属性、开始存储器段中。指出段名、属性、开始/ /结束位置。结束位置。1. 1. 段定义段定义1段名段名2该段的名字,可以是任何合法的标识符该段的名字,可以是任何合法的标识符2该段分配的存储器起始地址该段分配的存储器起始地址2不可省略不可省略1段体段体2段内的语句序列,包括
11、指令语句和伪指令语句段内的语句序列,包括指令语句和伪指令语句1SEGMENT/ENDSSEGMENT/ENDS必须成对出现,段名必必须成对出现,段名必须一致须一致1. 1. 段定义段定义1定位类型定位类型指定该段段基址的边界条件。指定该段段基址的边界条件。2PAGE(PAGE(页页) ) 段起始地址为段起始地址为256256的倍数。的倍数。一页一页256256个字节个字节地址表示为地址表示为 XXX00H XXX00H 如如 02400H02400H,07A00H07A00H2PARA(PARA(节节) ) 段起始地址为段起始地址为1616的倍数。的倍数。一节一节1616个字节个字节表示为表示
12、为XXXX0H XXXX0H 如如 024D0H024D0H,07A20H07A20H通常系统通常系统默认默认的定位类型为的定位类型为PARAPARA 。2WORD(WORD(字字) )段起始地址为偶数。段起始地址为偶数。如如 02152H, 0A156H02152H, 0A156H适合于数据项类型为字的数据段适合于数据项类型为字的数据段2BYTE(BYTE(字节字节) )段起始地址任意。段起始地址任意。1. 1. 段定义段定义1组合类型:组合类型:用来在多模块链接时告诉链接程序,本段用来在多模块链接时告诉链接程序,本段与其它段的组合关系。与其它段的组合关系。2NONENONE:默认:默认2P
13、UBLICPUBLIC:本段与具有相同段名的其他段连接在一起,:本段与具有相同段名的其他段连接在一起,形成一个逻辑段,公用一个段地址。形成一个逻辑段,公用一个段地址。2STACKSTACK:为堆栈段,链接时,自动初始化:为堆栈段,链接时,自动初始化SSSS和和SPSP。SSSS:首地址:首地址SPSP:堆栈底部:堆栈底部+1+1的单元的单元例:堆栈段的总空间为例:堆栈段的总空间为40H40H,则栈底为,则栈底为3FH3FH,SP=40HSP=40H。2注意:注意:用户程序中至少有个段用用户程序中至少有个段用STACKSTACK说明,否则说明,否则连接时警告,用户必须在程序中对连接时警告,用户必
14、须在程序中对SSSS和和SPSP初始化。初始化。1. 1. 段定义段定义1类别名类别名2必须用单引号括起来。必须用单引号括起来。2LINKLINK程序把类别名相同的所有段存放在连续的存储程序把类别名相同的所有段存放在连续的存储区内,但仍为不同段(区内,但仍为不同段(PUBLIC COMMON PUBLIC COMMON 除外)。除外)。2典型的类别名如:典型的类别名如:DATADATA、STACKSTACK、CODECODE1. 1. 段定义段定义例:例:STACKSTACKSEGMENT PARA STACK STACKSEGMENT PARA STACK STACK; 堆栈名堆栈名 定位定
15、位 组合方式组合方式 类别类别DBDB100 DUP(?)100 DUP(?) STACK STACKENDSENDS或或DB 100 DUP(STACK)DB 100 DUP(STACK)2. ASSUME2. ASSUME:段寻址:段寻址( (段寄存器说明段寄存器说明) )1说明段寄存器和段名之间的对应关系说明段寄存器和段名之间的对应关系1格式:格式: ASSUME ASSUME 段寄存器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名,2 段寄存器:段寄存器:CS,DS,SS,ESCS,DS,SS,ES中的一个中的一个2 段名:段名:SEGMENT/ENDSSEGMENT/ENDS
16、中定义的名字。中定义的名字。2 两者间必须用两者间必须用“:”分隔分隔1功能功能:通知汇编程序,段名所指定的段是由哪:通知汇编程序,段名所指定的段是由哪个段寄存器寻址,即为个段寄存器寻址,即为“段段”指定约定的段寄存指定约定的段寄存器。器。2. ASSUME2. ASSUME:段寻址:段寻址( (段寄存器说明段寄存器说明) )1例:例:ASSUME CS:CSEG,DS:DSEG,SS:SSEG,ES:ESEG1注意:注意:2在一个代码段中,若没有另外的在一个代码段中,若没有另外的ASSUMEASSUME重新设置,重新设置,原有的原有的ASSUMEASSUME设置一直有效。设置一直有效。例:例
17、:ASSUMEES:NOTHING;删除;删除ES的设置的设置ASSUMENOTHING;删除全部设置;删除全部设置2不一定要设置全部的段寄存器不一定要设置全部的段寄存器2必须写在代码段中,放在代码段定义语句之后必须写在代码段中,放在代码段定义语句之后2 并没有真正给段寄存器赋值并没有真正给段寄存器赋值2. ASSUME2. ASSUME:段寻址:段寻址( (段寄存器说明段寄存器说明) )1段寄存器段寄存器(CS(CS除外除外) )的装入是采用程序方法:的装入是采用程序方法:2DSDS和和ESES的装入:的装入:可通过给寄存器赋初值方式可通过给寄存器赋初值方式例:例:MOVMOV AXAX,D
18、ATADATAMOVMOV DSDS,AXAX 2SSSS、SPSP的装入:有两种方法的装入:有两种方法a. a. 在在SEGMENTSEGMENT语句中,选用组合类型语句中,选用组合类型STACKSTACK,并在,并在ASSUMEASSUME语语句中,用句中,用SSSS:STACKSTACK。 例:例: SSEG SEGMENT PARA SSEG SEGMENT PARA STACKSTACK DB 40HDUP DB 40HDUP(?)(?) SSEG ENDSSSEG ENDS CSEG SEGMENT CSEG SEGMENT ASSUME CS ASSUME CS:CSEGCSEG
19、,SSSS:SSEGSSEGb. b. 在在SEGMENT SEGMENT 语句中,组合类型未选用语句中,组合类型未选用STACKSTACK参数,可采用参数,可采用类似于类似于DSDS和和ESES的装入方法的装入方法。 2. ASSUME2. ASSUME:段寻址:段寻址( (段寄存器说明段寄存器说明) )2CSCS和和IPIP的装入:的装入:通常是按照结束伪指令指定的地址通常是按照结束伪指令指定的地址来完成。来完成。 程序结束伪指令的格式:程序结束伪指令的格式: END END 标号标号 例:例:END STARTEND START 标号:标号:程序运行的起始语句的指令标号,程序运行的起始语
20、句的指令标号,有且一般要有,有且一般要有,汇编连接时,该标号代表的地址(段地址,偏移量)被汇编连接时,该标号代表的地址(段地址,偏移量)被装入装入CS:IPCS:IP。 若无,则若无,则CSCS:IPIP指向指向.EXE.EXE文件的第一个字节。文件的第一个字节。 3. ORG 3. ORG 变量的定位变量的定位( (指定地址指定地址) )1汇编程序按照指令的先后顺序一个接着一个分汇编程序按照指令的先后顺序一个接着一个分配存储空间,按照段定义伪指令规定的边界定位配存储空间,按照段定义伪指令规定的边界定位属性确定每个逻辑段的起始位置(包括偏移地址)属性确定每个逻辑段的起始位置(包括偏移地址)1定
21、位伪指令定位伪指令ORGORG控制数据或代码所在的偏移地控制数据或代码所在的偏移地址址ORG ORG 参数参数1强行指定地址计数器的当前值,以改变段内在强行指定地址计数器的当前值,以改变段内在它以后的代码或数据块存放的偏移地址。它以后的代码或数据块存放的偏移地址。1汇编程序为该段配备一个初值为汇编程序为该段配备一个初值为0 0的位置计数器。的位置计数器。3. ORG 3. ORG 变量的定位变量的定位( (指定地址指定地址) )1格式:格式:ORG ORG 表达式表达式或或ORG $+ORG $+表达式表达式 1功能:功能:以表达式的值作为起始地址以表达式的值作为起始地址 $当前位置计数器的值
22、当前位置计数器的值 其中:表达式可计算得出其中:表达式可计算得出1616位地址位地址ORG 100hORG 100h;从从100H100H处安排数据或程序处安排数据或程序ORG $+10ORG $+10;偏移地址加偏移地址加1010,即跳过,即跳过1010个字节空间个字节空间3. ORG 3. ORG 变量的定位变量的定位( (指定地址指定地址) )例例1 1:ORGORG 1000H1000HMOVMOV ALAL,BLBL例例2 2:CSEGCSEGSEGMENTSEGMENTORGORG 2 2;目标代码从;目标代码从2 2开始产生开始产生ORGORG $ $3 3;跳过三个字节后生成目
23、标代码;跳过三个字节后生成目标代码CSEGCSEGENDSENDS说明:说明:程序中可含有若干程序中可含有若干ORGORG伪指令。伪指令。4. 4. 汇编结束伪指令汇编结束伪指令1END END 标号标号4.2.3 4.2.3 符号定义符号定义( (赋值赋值) )1. 1. 等值等值 EQUEQU 格式:格式:符号名符号名 EQU EQU 表达式表达式 表达式表达式可以是:数值,地址,新的类型属性,可以是:数值,地址,新的类型属性,其它符号名。其它符号名。 例:例:PORT1PORT1EQUEQU312312PORT2PORT2EQUEQUPORT1+1PORT1+14.2.3 4.2.3 符
24、号定义符号定义( (赋值赋值) )注意:注意:EQUEQU语句不能重复定义语句不能重复定义 X EQU 7 EQU 7 X EQU X+5 EQU X+5 是错误的是错误的 使用使用EQUEQU伪指令时,必须先赋值,后使用伪指令时,必须先赋值,后使用 例:例:LPN EQU LP1LPN EQU LP112H12H ; LP1 LP1 应该在此句前加以定义。应该在此句前加以定义。只作为符号定义用,不产生任何目标代码只作为符号定义用,不产生任何目标代码 , ,不占用存储不占用存储单元。单元。4.2.3 4.2.3 符号定义符号定义( (赋值赋值) )2. 2. 符号符号 格式:格式:符号名表达式
25、符号名表达式; ;功能和功能和EQUEQU类似类似 X = 7X = 7;等效于:;等效于:X equ 7X equ 7 X = X+5 X = X+5;“X EQU X+5”X EQU X+5”是错误的是错误的区别:区别:定义的符号可以重新定义。定义的符号可以重新定义。注意:注意:EQUEQU:不能重新定义:不能重新定义 :可以重新定义:可以重新定义4.2.3 4.2.3 数据定义数据定义变量定义变量定义功能:功能: 指定变量的类型和名称,并为变量分配存储单元。指定变量的类型和名称,并为变量分配存储单元。 存储单元初始化。存储单元初始化。 内存单元:内存单元: 分配分配 初始化初始化1. 1
26、. 数据定义语句的格式数据定义语句的格式 变量名变量名 DB/DW/DDDB/DW/DD 操作数操作数, ,操作数操作数 , ,操作数操作数 变量的定义变量的定义 1变量名变量名为用户自定义标识符,表示表首元素的逻辑地为用户自定义标识符,表示表首元素的逻辑地址,常称为符号地址。变量名也可以没有址,常称为符号地址。变量名也可以没有1含义:含义:由此由此“符号地址符号地址”单元起,以字节(或字,双单元起,以字节(或字,双字)的形式依次存放操作数。字)的形式依次存放操作数。 DBDB字节,占一个字节单元字节,占一个字节单元 DWDW字,字, 占一个字单元,即两个字节单元,占一个字单元,即两个字节单元
27、, 低位在低地址,高位在高地址低位在低地址,高位在高地址 DDDD双字,占两个字单元,即四个字节单元,双字,占两个字单元,即四个字节单元, 低位字在低地址,高位字在高地址低位字在低地址,高位字在高地址2. 2. 数据定义语句的具体形式和功能数据定义语句的具体形式和功能(1)1)为单元定义初值为单元定义初值( (数值表达式数值表达式) ) 变量名作为该存储单元的名称。变量名作为该存储单元的名称。 例:例: TAB1TAB1DBDB01H, -101H, -1 TAB2 TAB2DWDW3456H, 78H3456H, 78H TAB3 TAB3DDDD0F9FAFBFCH, 90F9FAFBFC
28、H, 9注意:注意: 操作数顺序操作数顺序 高低字节位置高低字节位置(2)(2)预留单元,其内容不初始化预留单元,其内容不初始化( (?表达式?表达式) )形式:形式:符号名符号名DB ?DB ? ( (变量变量) )DWDWDDDD 功能:功能:汇编程序仍然分配存储单元,但不预留确定的值。汇编程序仍然分配存储单元,但不预留确定的值。常用来存放程序的中间结果和最终结果。常用来存放程序的中间结果和最终结果。 例:例: TEMPTEMPDB DB ? ?; ;分配一个字节单元分配一个字节单元RESULTRESULTDWDW?, ?, ?; ;分配两个字单元分配两个字单元形式:形式:符号名符号名DB
29、/DW/DDDB/DW/DDn nDUP DUP (变量)(变量)n n:重复次数重复次数 DUPDUP:重复数据定义操作符重复数据定义操作符 :重复内容重复内容 注意:注意:DUPDUP操作符可重叠使用操作符可重叠使用 例:例:X1X1DBDB5 DUP(0) 5 DUP(0) X1 DB 0,0,0,0,0 X1 DB 0,0,0,0,0TAB1TAB1DBDB10H DUP(?)10H DUP(?); ;预留预留10H10H个字节单元个字节单元TAB2TAB2DBDB2 DUP(2 DUP(3)2 DUP(2 DUP(3) TAB2 DB 3,3,3,3(3)“(3)“操作数操作数”为重
30、复项时为重复项时( (带带DUPDUP的表达式的表达式) )功能:功能:为串中的每个字符分配一个字节存储单元。为串中的每个字符分配一个字节存储单元。故字符串的定义必须用故字符串的定义必须用DBDB命令。命令。 说明:说明: 字符串用单引号括起来,字符串用单引号括起来, 256256个字符个字符 在内存中,字符以在内存中,字符以ASCIIASCII码表示码表示 存放顺序:存放顺序:自左向右按地址递增顺序存放自左向右按地址递增顺序存放 仅仅DBDB可定义可定义ASCIIASCII串串 (4)“(4)“操作数操作数”为为ASCIIASCII码时码时( (字符串字符串) )(4) “(4) “操作数操
31、作数”为为ASCIIASCII码时码时( (字符串字符串) )DW:可以给两个字符组成的字符串分配两个字节存储单元,前一个字符为高字节,存放在高地址,后一个字符为低字节,存放在低地址。例如:ST1DB12 ST2DW12ST131H32HST232H31H(4) “(4) “操作数操作数”为为ASCIIASCII码时码时( (字符串字符串) )1注意:注意:2除用除用DW定义的字符串,单引号中定义的字符串,单引号中ASCII字符的个数字符的个数不能超过不能超过2个,若只有个,若只有1个,如:个,如: DW C DW 0043H 功能:功能:存放标号或变量的段内偏移量或全地址。存放标号或变量的段
32、内偏移量或全地址。 当使用当使用DW定义对象的偏移地址定义对象的偏移地址 当使用当使用DD定义对象的偏址与段址定义对象的偏址与段址例如:例如: X1 DW CYCLE ;CYCLE偏址偏址X1 X2 DD CYCLE ;CYCLE偏址偏址X2 ;CYCLE偏址偏址X2+2CYCLE: MOV AX, 3(5)(5)操作数为标号或符号地址时操作数为标号或符号地址时例:例:SUMSUMDBDB1,2,31,2,3 MOVMOVAL, SUM AL, SUM MOVMOVAX, SUM AX, SUM MOVMOVSUMSUM5, 35, 3(7)(7)连续存放(定义一个表)连续存放(定义一个表)
33、例:例:POWER_2 DB 1,2,4,8,16POWER_2 DB 1,2,4,8,16(6)(6)明确了用该变量表示的单元的类型明确了用该变量表示的单元的类型数据定义与符号定义数据定义与符号定义区别: EQU定义立即数,不分配内存 DB/DW/DD等定义内存操作数,分配内存例: X1DB3X2EQU 5X3DB7,8MOVAL, X1MOVBL, Y1MOVAL, X1BXMOVBL, Y1BXX103HX207H08H3. 3. 分析符和合成符分析符和合成符1(1)(1)分析符分析符2数值返回操作符数值返回操作符2把把变量变量/ /标号标号分解成它们的各个组成部分或取其某一分解成它们的
34、各个组成部分或取其某一项属性值项属性值2变量的属性:段址变量的属性:段址/ /偏址偏址/ /类型类型2标号的属性:段址标号的属性:段址/ /偏址偏址/ /类型类型1说明说明2分析符只能对分析符只能对变量变量/ /标号标号进行运算。进行运算。2分析运算符总是加在运算对象之前,分析运算符总是加在运算对象之前,返回返回结果是一结果是一个个数值数值。(1)(1)分析符分析符1语法格式语法格式分析符分析符变量变量;返回一个数值;返回一个数值分析符分析符标号标号;返回一个数值;返回一个数值1几个重要的分析符几个重要的分析符2SEG;取对象段址;取对象段址2OFFSET;取对象偏址;取对象偏址2TYPE;对
35、象类型,以数值表示;对象类型,以数值表示2LENGTH;DUP定义的数据的个数定义的数据的个数2SIZE;DUP定义的数据的字节数定义的数据的字节数 SEG SEG取段址取段址 例:例:MOV AX , SEG OPERMOV AX , SEG OPER OFFSET OFFSET 取偏移地址取偏移地址 例:例:MOV BX, OFFSET OPERMOV BX, OFFSET OPER = LEA BX , OPER = LEA BX , OPER (1) (1) 分析符分析符(1) (1) 分析符分析符1TYPE返回类型值返回类型值2当对象是变量时,返回表示当对象是变量时,返回表示B/W/
36、D类型的数值类型的数值字节字节(BYTE):1字字 (WORD):2双字双字(DWORD):42当对象是变量时,返回表示当对象是变量时,返回表示FAR/NEAR类型的数值类型的数值远属性远属性(FAR):2近属性近属性(NEAR):11例如:若例如:若AB是是DB定义的变量,执行定义的变量,执行MOV AX ,TYPE AB;则则(AX)=0001H1字节、字和双字的类型值,分别是所占有的字节数,字节、字和双字的类型值,分别是所占有的字节数,而标号的类型值,没有实际的物理意义。而标号的类型值,没有实际的物理意义。(1)(1)分析符分析符1LENGTH 取数据个数取数据个数1SIZE取字节数取字
37、节数1一般:一般: SIZE X = (LENGTH X) *(TYPE X)1仅对仅对DUP定义的内存操作数有效,并返回相应定义的内存操作数有效,并返回相应的数据的个数或者数据所占存储单元的字节数。的数据的个数或者数据所占存储单元的字节数。1如果数据不是由如果数据不是由DUP定义,定义,LENGTH/SIZE操操作符返回值总是作符返回值总是1。例:例: BUF1DB100 DUP(0) BUF2DW 200 DUP(0) LENGTH BUF1 = 100 LENGTH BUF2 = 200 SIZE BUF1 = 100 SIZE BUF2 = 200*2 = 400 例:例:strdba
38、bcdefg(1) (1) 分析符分析符size str = 1(1) (1) 分析符分析符1问题:如何确定不用问题:如何确定不用DUPDUP定义的数据的个数?定义的数据的个数?1数据区末地址数据区末地址/ /首地址的差值包含了数据个数的首地址的差值包含了数据个数的信息信息2 首地址?首地址?2 末地址?末地址?1解决方法:解决方法:2 $-$-首地址首地址1例如:例如:BUFBUF DBDB3,5,73,5,7L1L1EQUEQU$ -BUF$ -BUF;L1=3L1=3例例1 1:ARRAYARRAYDBDB10H,24H,5AH,0C7H,98H,ABCDE 10H,24H,5AH,0C
39、7H,98H,ABCDE COUNTCOUNT EQUEQU $ $ARRAYARRAYMAXMAXDBDB? ?$ $ARRAY=000AHARRAY=000AH0000H=000AH=10 0000H=000AH=10 即即 COUNT = 10COUNT = 10例例2 2:STAKSTAKDBDB100 DUP(?)100 DUP(?); ;预留预留100100个内存单元个内存单元TOPTOPEQUEQU $-STAK$-STAK; ;给给TOPTOP赋值为赋值为100100(1) (1) 分析符分析符例例3 3:COUNTCOUNTEQUEQU 2020BLOCKBLOCKDBDBR
40、ead after me! Read after me! NUMNUMEQUEQU $ $BLOCKBLOCK$ $字符串最后一个字符字符串最后一个字符!所在单元的下一个所在单元的下一个字节地址的偏移量字节地址的偏移量 例例4: 4: 已知已知VAR DW 1, 2, $+2, 5, 6VAR DW 1, 2, $+2, 5, 6 若汇编时若汇编时VARVAR分配的偏移地址是分配的偏移地址是0010H,0010H,则汇编后则汇编后0014H0014H单元的内容是:单元的内容是: A) 6H B) 14H C) 5H D) 16HA) 6H B) 14H C) 5H D) 16H(1) (1)
41、分析符分析符强制修改强制修改 变量变量 类型,而不改变其它属性类型,而不改变其它属性 标号标号 PTR 操作符操作符 格式:格式:类型类型 PTR 变量变量 标号标号 强制的新类型强制的新类型类型:类型:BYTE/WORD/DWORDNEAR/FAR功能:功能:使使PTR右边的操作对象具有右边的操作对象具有PTR左边的类型。左边的类型。(2) (2) 合成符合成符 例例1 1:BUF1 DB 1, 2BUF1 DB 1, 2 BUF2 EQU BUF2 EQU WORD PTRWORD PTR BUF1 BUF1 MOV AL, BUF1 ;AL=01H MOV AL, BUF1 ;AL=01
42、H MOV AX, WORD PTR BUF1 ;AX=0201H MOV AX, WORD PTR BUF1 ;AX=0201H MOV AX, BUF2 ;AX=0201H MOV AX, BUF2 ;AX=0201H(2) (2) 合成符合成符 例例2 2:F1 DW 1234HF1 DW 1234H F2 DB 23H, 56H, 18H F2 DB 23H, 56H, 18H MOV AL , MOV AL , BYTE PTRBYTE PTR F1 ;AL=34H F1 ;AL=34H MOV AX , MOV AX , WORD PTRWORD PTR F2 ;AX=5623H
43、F2 ;AX=5623H 当传送指令的操作数位数不一致时,可以用当传送指令的操作数位数不一致时,可以用PTRPTR运算符运算符改变变量属性,使两个操作数一致。改变变量属性,使两个操作数一致。(2) (2) 合成符合成符 操作符操作符PTRPTR的应用的应用: 1 1)重新定义变量类型)重新定义变量类型 如:例如:例1 1、例、例2 2 2 2)指定内存操作数的类型)指定内存操作数的类型 例:例:INC BX INC BX 非法!非法! 合法:合法:INC BYTE PTR BXINC BYTE PTR BX INC WORD PTR BX INC WORD PTR BX(2) (2) 合成符合
44、成符 3) 3) 用用EQUEQU和和PTRPTR定义一个新变量定义一个新变量 BUF1 DW 1234H, 5678HBUF1 DW 1234H, 5678H BUF2 EQU BYTE PTR BUF1 BUF2 EQU BYTE PTR BUF1 4 4)可确定指令是段内转移还是段间转移)可确定指令是段内转移还是段间转移 JMP NEAR PTRJMP NEAR PTR JMP FAR PTR JMP FAR PTR (2) (2) 合成符合成符 补:补: SHORT SHORT 操作符操作符 通知汇编器,转移目标在通知汇编器,转移目标在( (128128127)127)之间。之间。 例
45、:例: JMP SHORT F1JMP SHORT F1 JMPJMP指令原为三字节指令,加指令原为三字节指令,加SHORTSHORT后,汇编成后,汇编成两字节指令。两字节指令。(2) (2) 合成符合成符(2) (2) 合成符合成符1(3)LABEL(3)LABEL操作符操作符2为当前即将定义的存储单元定义一个指定类型的标号为当前即将定义的存储单元定义一个指定类型的标号或变量或变量2与变量连用:新的变量名、新的变量属性与变量连用:新的变量名、新的变量属性例:例:P168P1682与标号连用:新的标号、新的范围与标号连用:新的标号、新的范围1THISTHIS操作符操作符2与与LABELLABE
46、L类似类似FIRSTFIRSTEQUEQUTHISTHIS BYTEBYTE;SECONDSECOND DWDW5678H5678H;FIRSTFIRST与与SECONDSECOND具有具有;相同的地址,属性不同;相同的地址,属性不同地址操作符地址操作符1地址操作符取得名字或标号的段地址和偏移地址 将括起的表达式作为存储器地址指针将括起的表达式作为存储器地址指针 $当前偏移地址当前偏移地址 :段前缀,采用指定的段地址寄存器段前缀,采用指定的段地址寄存器OFFSET 名字名字/标号标号 返回名字或标号的偏移地址返回名字或标号的偏移地址SEG 名字名字/标号标号返回名字或标号的段地址返回名字或标号
47、的段地址4. 4. 变量的应用变量的应用1变量变量具有存储单元的逻辑地址具有存储单元的逻辑地址1程序代码中程序代码中2通过变量名引用其指向的首个数据通过变量名引用其指向的首个数据2通过变量名加减位移量存取以首个数据为基地址的前通过变量名加减位移量存取以首个数据为基地址的前后数据后数据 例题例题4.2 4.2 变量的定义变量的定义;数据段;数据段bvar1bvar1dbdb0110 0100b,64h,d0110 0100b,64h,d;字节变量:不同进制表达同一个数值,内存中有;字节变量:不同进制表达同一个数值,内存中有4 4个个64H64Hminint = 5minint = 5;符号常量:
48、;符号常量:minintminint数值为数值为5 5,不占内存空间,不占内存空间bvar2bvar2db -1,minint,minint+5db -1,minint,minint+5;内存中数值依次为;内存中数值依次为FFH,5,0AHFFH,5,0AHdb ?,2 dup(20h)db ?,2 dup(20h);预留一个字节空间,重复定义了;预留一个字节空间,重复定义了2 2个数值个数值20H20Hwvar1wvar1dw 2010h,4dw 2010h,4* *4 4;字变量:两个数据是;字变量:两个数据是2010H2010H、0010H0010H,共占,共占4 4个字节个字节wvar
49、2wvar2dw ?dw ?;wvar2wvar2是没有初值的字变量是没有初值的字变量例题例题4.2 4.2 变量的定义变量的定义dvardvar dd 12347777h,87651111h,?dd 12347777h,87651111h,?;双字变量:;双字变量:2 2个双字数据,一个双字空间个双字数据,一个双字空间abcabcdb a,b,c,?db a,b,c,?;定义字符,实际是字节变量;定义字符,实际是字节变量maxintmaxintequ 0ahequ 0ah;符号常量:;符号常量:maxintmaxint1010stringstringdb ABCDEFGHIJdb ABCDE
50、FGHIJ;定义字符串:使用字节定义;定义字符串:使用字节定义DBDB伪指令伪指令crlfscrlfs db 13,10,$db 13,10,$;回车符;回车符0DH0DH、换行符、换行符0AH0AH和字符和字符$24H24Harray1array1dw maxint dup(0)dw maxint dup(0);1010个初值为个初值为0 0的字量,可以认为是数组的字量,可以认为是数组arrayarraydb 2 dup(2,3,2 dup(4)db 2 dup(2,3,2 dup(4);6 6个字节内容依次为:个字节内容依次为:02 03 04 04 02 03 04 0402 03 04
51、 04 02 03 04 04例题例题4.2 4.2 变量的应用变量的应用;代码段;代码段mov dl,bvar1mov dl,bvar1;DLDL100100dec bvar2+1dec bvar2+1;bvar2+1bvar2+14 4mov abc3,dlmov abc3,dl;abcabcabcdabcdmov ax,word ptr dvar0mov ax,word ptr dvar0;取双字到;取双字到DX.AXDX.AXmov dx,word ptr dvar2mov dx,word ptr dvar2add ax,word ptr dvar4add ax,word ptr dv
52、ar4;加双字到;加双字到DX.AXDX.AXadc dx,word ptr dvar6adc dx,word ptr dvar6mov word ptr dvar8,axmov word ptr dvar8,ax;保存双字的求和结果;保存双字的求和结果mov word ptr dvar10,dxmov word ptr dvar10,dx例题例题4.2 4.2 变量的应用变量的应用mov cx,maxintmov cx,maxint;CXCX1010mov bx,0mov bx,0;BXBX0 0again:again:add stringbx,3add stringbx,3;strings
53、tring每个数值加每个数值加3 3inc bxinc bxloop againloop again;循环;循环lea dx,abclea dx,abc;从;从abcabc开始开始mov ah,9mov ah,9;09H09H号号DOSDOS功能调用功能调用int 21hint 21h;显示结果:;显示结果:abcdDEFGHIJKLMabcdDEFGHIJKLM4.2.4 4.2.4 过程定义过程定义1过程是程序的一部分,它们可以被程序调用。过程是程序的一部分,它们可以被程序调用。1格式:格式:过程名过程名PROC NEAR/FAR RET 过程体过程体 RET过程名过程名ENDP过程定义过
54、程定义1说明说明: : 2 PROC PROC与与ENDPENDP必须成对出现。必须成对出现。2 过程名是该过程的名字,被过程名是该过程的名字,被CALLCALL调用时作调用时作为标号使用,代表该过程存放的起始地址。为标号使用,代表该过程存放的起始地址。2 过程属性:过程属性:NEAR NEAR 或或FARFAR,默认,默认 NEARNEAR。过程定义过程定义1说明说明: :2 过程中必须包含过程中必须包含RETRET;可以多于一条可以多于一条。2 类型属性:类型属性:NEARNEAR:段内,段内, 三字节三字节FARFAR:段间,段间, 五字节五字节返回的目标代码均为一字节,但操作码不同。返
55、回的目标代码均为一字节,但操作码不同。2 过程可以嵌套定义,嵌套调用。过程可以嵌套定义,嵌套调用。2 主程序和子程序都可以作为一个过程。主程序和子程序都可以作为一个过程。4.2.4 宏宏(Macro)汇编汇编1宏是具有宏名的一段汇编语句序列宏是具有宏名的一段汇编语句序列1宏需要先定义,然后在程序中进行宏调用宏需要先定义,然后在程序中进行宏调用1由于形式上类似其他指令,所以常称其为宏指由于形式上类似其他指令,所以常称其为宏指令令1宏指令实际上是一段代码序列的缩写;在汇编宏指令实际上是一段代码序列的缩写;在汇编时,汇编程序用对应的代码序列替代宏指令时,汇编程序用对应的代码序列替代宏指令1因为是在汇
56、编过程中实现的宏展开,所以常称因为是在汇编过程中实现的宏展开,所以常称为宏汇编为宏汇编1. 1. 宏定义宏定义1宏定义宏定义由一对宏汇编伪指令由一对宏汇编伪指令MACROMACRO和和ENDMENDM来来完成,格式如下:完成,格式如下:宏名宏名MACRO MACRO 形参表形参表 ;宏定义体;宏定义体ENDMENDM2其中宏名是符合语法的标识符,同一源程序中该名字其中宏名是符合语法的标识符,同一源程序中该名字定义唯一。定义唯一。宏定义体宏定义体中不仅可以是硬指令序列,还可中不仅可以是硬指令序列,还可以是伪指令语句序列。以是伪指令语句序列。2可选的形参表给出了宏定义中用到的形式参数,每个可选的形
57、参表给出了宏定义中用到的形式参数,每个形式参数之间用逗号分隔。形式参数之间用逗号分隔。2. 2. 宏调用宏调用1宏定义之后就可以使用它,即宏定义之后就可以使用它,即宏调用宏调用:宏名宏名 实参表实参表 1宏调用的格式同一般指令一样:在使用宏调用的格式同一般指令一样:在使用宏指令宏指令的位置的位置写下宏名,后跟实体参数;如果有多个参数,应按形参写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔顺序填入实参,也用逗号分隔1在汇编时,宏指令被汇编程序用对应的代码序列替代,在汇编时,宏指令被汇编程序用对应的代码序列替代,这就是这就是宏展开宏展开1宏展开宏展开的具体过程是:当汇编
58、程序扫描源程序遇到已的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程有定义的宏调用时,即用相应的宏定义体完全替代源程序的宏指令,同时用位置匹配的实参对形参进行取代序的宏指令,同时用位置匹配的实参对形参进行取代4.2.5 结构定义伪指令结构定义伪指令1将不同类型的数据组合成一个有机整体,构成将不同类型的数据组合成一个有机整体,构成特定结构的数据形式特定结构的数据形式结构结构 1结构定义的格式:结构定义的格式:结构名结构名STRUCSTRUC ;结构体,由数据定义语句构成;结构体,由数据定义语句构成结构名结构名ENDSENDS 1定义结构变量定义结构变量1结
59、构的引用结构的引用2结构变量名结构变量名. .域名域名2 基址或变址寄存器基址或变址寄存器. .域名域名 4.2.7 4.2.7 模块定义与通信模块定义与通信1. 1. 模块定义模块定义 NAME/ENDNAME/END1格式:格式:NAME NAME 模块名模块名;为模块命名,可以省略;为模块命名,可以省略;语句;语句END END 标号标号 ;结束模块;结束模块1说明:说明:2 模块命名规则:模块命名规则: TITLETITLE语句的前语句的前6 6个字符个字符源程序文件名源程序文件名2 主模块,主模块,ENDEND后必须跟标号或主过程名后必须跟标号或主过程名启动地址。启动地址。4.2.7
60、 4.2.7 模块定义与通信模块定义与通信2. 2. 模块间通信模块间通信1格式:格式:PUBLICPUBLIC名字名字 ,名字,名字 ;全局符号定义;全局符号定义EXTRNEXTRN名字:类型名字:类型 ,名字:类型,名字:类型 ;外部符号应用;外部符号应用1说明:说明:2 PUBICPUBIC定义的名字必须是本模块中已定义的符号。定义的名字必须是本模块中已定义的符号。2 EXTRNEXTRN中的名字,表示本模块中引用,但在其它模块中用中的名字,表示本模块中引用,但在其它模块中用PUBLICPUBLIC定义。定义。2 通常要配对使用。通常要配对使用。1注意:注意:几个模块调用的过程一般都是属
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职工业机器人技术(工业机器人操作)试题及答案
- 2025年大学第四学年(欧洲文学选读)文学思潮综合测试试题及答案
- 2025年高职(中药学)中药鉴定阶段测试题及答案
- 2025年中职第二学年(物流信息技术)物流信息采集实操测试卷
- 2025年中职机电一体化技术(液压传动)试题及答案
- 2025年大学环境设计(环境艺术创作)试题及答案
- 2025年大学能源运营管理应用(应用技术)试题及答案
- 2025年高职化工单元操作(化工设备操作)试题及答案
- 2026年河北劳动关系职业学院单招职业技能考试参考题库带答案解析
- 2026年河北化工医药职业技术学院单招综合素质笔试参考题库带答案解析
- 2025至2030中国细胞存储行业调研及市场前景预测评估报告
- 《中华人民共和国危险化学品安全法》解读
- 水暖施工员考试及答案
- 2025年省级行业企业职业技能竞赛(老人能力评估师)历年参考题库含答案
- 培养员工的协议书
- 1.1《子路、曾皙、冉有、公西华侍坐》教学课件2025-2026学年统编版高中语文必修下册
- 2025天津中煤进出口有限公司面向中国中煤内部及社会招聘第五批电力人才52人(公共基础知识)测试题附答案解析
- 2025至2030氢过氧化叔丁基(TBHP)行业运营态势与投资前景调查研究报告
- 2026年哈尔滨职业技术学院单招职业适应性考试必刷测试卷附答案
- 通信行业项目经理服务水平绩效考核表
- 副高医院药学考试试题题库及答案
评论
0/150
提交评论