汇编语言程序格式_第1页
汇编语言程序格式_第2页
汇编语言程序格式_第3页
汇编语言程序格式_第4页
汇编语言程序格式_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章 汇编语言程序格式汇编语言程序格式1第三章第三章 汇编语言程序格式汇编语言程序格式2 第三章第三章 汇编语言程序格式汇编语言程序格式 概概 述述 3.1 3.1 汇编语言程序的开发汇编语言程序的开发 3.2 3.2 参数、变量和标号参数、变量和标号 3.3 3.3 程序段的定义和属性程序段的定义和属性 3.4 3.4 复杂数据结构复杂数据结构 要点及习题分析要点及习题分析第三章第三章 汇编语言程序格式汇编语言程序格式3 概概 述述 1.“ 1.“汇编汇编”的含义?手工汇编的含义?手工汇编 机器汇编机器汇编 2. 2.什麽是汇编程序?什麽是汇编程序? 3. 3.什麽是伪指令?伪指令的

2、作用;什麽是伪指令?伪指令的作用; 伪指令与机器无关,取决于汇编程序的版本,伪指令与机器无关,取决于汇编程序的版本,版本越高,提供的伪指令数目增加,功能增强;如版本越高,提供的伪指令数目增加,功能增强;如MASM6.0MASM6.0提供了提供了. .IF/.ENDIFIF/.ENDIF等语句,使汇编语言程序设等语句,使汇编语言程序设计类似高级语言的形式。计类似高级语言的形式。 第三章第三章 汇编语言程序格式汇编语言程序格式4 4. 4.教材的教材的“硬指令硬指令”:指的是:指的是CPUCPU指令集中的指令。指令集中的指令。硬指令的条数和功能取决于硬指令的条数和功能取决于CPUCPU,和汇编程序

3、无关;但和汇编程序无关;但是,用汇编指令(符号指令)表示的硬指令,能否被是,用汇编指令(符号指令)表示的硬指令,能否被汇编程序识别并翻译成机器指令,则与汇编程序的版汇编程序识别并翻译成机器指令,则与汇编程序的版本有关,如本有关,如4.04.0以下的版本不支持以下的版本不支持386386的的3232位指令,位指令,5.05.0开始支持开始支持3232位指令位指令,6.11,6.11版支持版支持Pentium(Pentium(但还不支持但还不支持MMXMMX指令指令6.126.12支持支持MMXMMX指令)。指令)。 本章以本章以MASM6.XMASM6.X为蓝本,介绍常用伪指令、操作符,为蓝本,

4、介绍常用伪指令、操作符,汇编、连接、运行程序的过程,以及修改调试方法。汇编、连接、运行程序的过程,以及修改调试方法。回第三章回第三章第三章第三章 汇编语言程序格式汇编语言程序格式5 3.1 3.1汇编语言程序的开发汇编语言程序的开发 3.1.1 3.1.1 汇编语言程序的语句格式汇编语言程序的语句格式 1 1)执行性语句)执行性语句 2 2)说明性语句)说明性语句 3.1.2 3.1.2 汇编语言的程序格式汇编语言的程序格式 1 1)简化段定义格式)简化段定义格式 2 2)完整段定义格式)完整段定义格式 3.1.3 3.1.3 汇编语言程序的开发过程汇编语言程序的开发过程 源程序的编辑、汇编、

5、连接、调试源程序的编辑、汇编、连接、调试返回第三章返回第三章第三章第三章 汇编语言程序格式汇编语言程序格式6 3.1.1 3.1.1 汇编语言程序的语句格式汇编语言程序的语句格式 两类语句:两类语句:1 1)执行性语句)执行性语句 2 2)说明性语句)说明性语句 1 1)执行性语句(硬指令、代码段)执行性语句(硬指令、代码段) v标号(冒号是标号的一部分):代表该指令的逻标号(冒号是标号的一部分):代表该指令的逻辑地址,为分支、循环、调用等指令提供转移的辑地址,为分支、循环、调用等指令提供转移的目的地址。是用户自定义的标识符。定义规则:目的地址。是用户自定义的标识符。定义规则:最多最多3131

6、个字母、数字及特殊符号,不能以数字打个字母、数字及特殊符号,不能以数字打头;默认情况下,不区别大小写;不能使用保留头;默认情况下,不区别大小写;不能使用保留字。标号定义只可能出现在代码段。字。标号定义只可能出现在代码段。 标号:标号: 硬指令助记符硬指令助记符 操作数操作数 ,操作数,操作数 ;注释;注释 第三章第三章 汇编语言程序格式汇编语言程序格式7v硬指令助记符:硬指令助记符: 任何一条处理器指令或宏指令。任何一条处理器指令或宏指令。v操作数:操作数: 立即数、寄存器、存储单元;无操作数、单操立即数、寄存器、存储单元;无操作数、单操作数和双操作数。作数和双操作数。v注释(分号是注释的一部

7、分):注释(分号是注释的一部分): 增加程序的可读性。注释不应是指令功能的重增加程序的可读性。注释不应是指令功能的重复。如对于指令复。如对于指令“mov cxmov cx,25”,25”,“2525送入寄存器送入寄存器CX”CX”毫无意义,可能应该写成毫无意义,可能应该写成“设置循环次数设置循环次数”。 标号:标号: 硬指令助记符硬指令助记符 操作数操作数 ,操作数,操作数 ;注释;注释 第三章第三章 汇编语言程序格式汇编语言程序格式82 2)说明性语句(伪指令、可位于任何段)说明性语句(伪指令、可位于任何段) 名字名字 伪指令助记符伪指令助记符 参数,参数参数,参数;注释;注释v名名 字:字

8、: 可以是变量名、段名、子程序名或宏名,这可以是变量名、段名、子程序名或宏名,这 些名字既反映逻辑地址,又具有自身的各种属性;些名字既反映逻辑地址,又具有自身的各种属性;对不同的说明性语句,其中的名字具有不同的属对不同的说明性语句,其中的名字具有不同的属性,具体内容在介绍伪指令时介绍。名字也可以性,具体内容在介绍伪指令时介绍。名字也可以是一个常数或一个符号的代号,可称其为是一个常数或一个符号的代号,可称其为“符号符号名名”,这种名字仅仅具有标识的作用。,这种名字仅仅具有标识的作用。 名字与标号的区别:无冒号;可以在任何段定名字与标号的区别:无冒号;可以在任何段定义(严格来说是变量名和符号名)。

9、义(严格来说是变量名和符号名)。 名字的定义规则与标号相同。名字的定义规则与标号相同。第三章第三章 汇编语言程序格式汇编语言程序格式9v伪指令助记符:本章主要内容。伪指令助记符:本章主要内容。v参数:伪指令要求的内容,常数、变量、表达参数:伪指令要求的内容,常数、变量、表达式式v注释:增加可读性。注释:增加可读性。 两种语句的四部分要用分割符分开,操作数和参两种语句的四部分要用分割符分开,操作数和参数用逗号,其他用空格或制表符。数用逗号,其他用空格或制表符。返回返回3.13.1名字名字 伪指令助记符伪指令助记符 参数,参数参数,参数;注释;注释第三章第三章 汇编语言程序格式汇编语言程序格式10

10、 3.1.2 3.1.2 汇编语言的程序格式汇编语言的程序格式 使用汇编语言编写程序时必须遵循的语法规则。使用汇编语言编写程序时必须遵循的语法规则。 完整的汇编语言源程序由段组成:若干个代码段、完整的汇编语言源程序由段组成:若干个代码段、数据段、附加段或堆栈段;独立运行的程序必须包含数据段、附加段或堆栈段;独立运行的程序必须包含一个代码段,并指出程序的启动语句;所有的执行语一个代码段,并指出程序的启动语句;所有的执行语句必须位于某一个代码段内,说明性语句可根据需要句必须位于某一个代码段内,说明性语句可根据需要位于任一段内;堆栈段不是必须的,但最好设置堆栈位于任一段内;堆栈段不是必须的,但最好设

11、置堆栈段。段。 编写汇编语言源程序通常应遵循所谓编写汇编语言源程序通常应遵循所谓“标准格标准格式式”,本书介绍标准格式的两种表示形式,一种符合,本书介绍标准格式的两种表示形式,一种符合MASM 5.0MASM 5.0及更新版本的语法规则,称为及更新版本的语法规则,称为“简化段定义简化段定义格式格式”;另一种符合早期版本的语法规则,称为;另一种符合早期版本的语法规则,称为“完完整段定义格式整段定义格式”(5.05.0及以后的版本也支持)。及以后的版本也支持)。第三章第三章 汇编语言程序格式汇编语言程序格式11 例例3.13.1a a 简化段定义格式简化段定义格式;lt301a.lt301a.as

12、masm .model small.model small .stack .stack .data .dataString db hello,everybody!,0dh,0ah,$String db hello,everybody!,0dh,0ah,$.code.code.startup .startup ;说明程序的起点,设置说明程序的起点,设置DSDS、SSSSmov dxmov dx,offset,string,offset,stringmovmov ah,9 ah,9intint 21h 21h.exit 0 .exit 0 ;程序结束,形成返回程序结束,形成返回DOSDOS的指令的

13、指令endendMASM5.0 5.1MASM5.0 5.1不支持不支持MASM5.0 5.1MASM5.0 5.1不支持不支持第三章第三章 汇编语言程序格式汇编语言程序格式12 例例3.13.1b b 完整段定义格式完整段定义格式;lt301b.lt301b.asmasmmov dsmov ds,ax,axStack segment stackStack segment stackmov dxmov dx,offset string,offset string dwdw 512 dup(?) 512 dup(?)movmov ah,9 ah,9Stack endsStack endsinti

14、nt 21h 21hData segmentData segmentmovmov ax,4c00h ax,4c00hString db String db intint 21h 21hData endsData endscode endscode endsCode segment codeCode segment code end start end start assume assume cscs:code,:code,dsds:data,:data, ssss:stack:stackStart:Start:movmov ax,data ax,data返回返回3.13.1第三章第三章 汇编语

15、言程序格式汇编语言程序格式13 3.1.3 3.1.3 汇编语言程序的开发过程汇编语言程序的开发过程 1. 1. 源程序的编辑源程序的编辑 EDITEDIT。扩展名必须是扩展名必须是 . .asmasm。2. 2. 源程序的汇编源程序的汇编MASM 6.xMASM 6.x版本:版本:ml.exe ml.exe 如如 ml /c lt301a.ml /c lt301a.asmasmMASM 5.xMASM 5.x版本:版本:masmmasm.exe .exe 如如 masmmasm lt301a. lt301a.asmasm3. 3. 目标文件的连接目标文件的连接将一个或多个目标文件与库文件合并

16、成一个可执将一个或多个目标文件与库文件合并成一个可执行文件(行文件(. .exeexe,) LINK lt301a.LINK lt301a.objobjLINKLINK的一般格式:的一般格式: LINK /LINK /参数选项参数选项 objobj文件列表文件列表 exeexe文件名,文件名,mapmap 文件名,库文件名文件名,库文件名 第三章第三章 汇编语言程序格式汇编语言程序格式14ML /ML /参数选项参数选项 文件列表文件列表 LINK LINK 连接参数选项连接参数选项 4. 4. ML.EXEML.EXE的用法的用法ML.EXEML.EXE可以自动调用可以自动调用LINKLIN

17、K程序,实现汇编和连接程序,实现汇编和连接自动地依次进行。其一般格式如下:自动地依次进行。其一般格式如下:常用参数选项如下(参数大小写敏感):常用参数选项如下(参数大小写敏感):v/ /c c(小写):只汇编,不连接。小写):只汇编,不连接。v/ /Fl Fl 文件名:创建一个汇编列表文件(文件名:创建一个汇编列表文件(. .lstlst) )。v/Fr /Fr 文件名:创建一个可在文件名:创建一个可在PWBPWB下浏览的下浏览的. .SBRSBR文件。文件。v/ /Fo Fo 文件名:生成指定的文件名:生成指定的. .OBJOBJ文件,不用缺省名。文件,不用缺省名。v/ /Fe Fe 文件名

18、:生成指定的文件名:生成指定的. .EXEEXE文件,不用缺省名。文件,不用缺省名。v/ /Fm Fm 文件名:创建一个连接映象文件(文件名:创建一个连接映象文件(. .MAPMAP)。)。v/ /Sg Sg 在列表文件中在列表文件中, ,列出由汇编程序产生的指令。列出由汇编程序产生的指令。第三章第三章 汇编语言程序格式汇编语言程序格式155. 5. 两个文件的介绍两个文件的介绍(.(.lstlst.map).map)要生成列表文件和连接映象文件,可以输入如下要生成列表文件和连接映象文件,可以输入如下形式的命令:形式的命令:ML /Fl /Fm /ML /Fl /Fm /SgSg lt301a

19、. lt301a.asmasm(p76)p76)注释:注释: 注意大小写;注意大小写; 参数参数/ /SgSg将将. .startup,.exitstartup,.exit等伪指令转换成等伪指令转换成 硬指令硬指令浏览列表文件浏览列表文件浏览映象文件浏览映象文件第三章第三章 汇编语言程序格式汇编语言程序格式166.6.可执行程序的调试可执行程序的调试经汇编、连接生成的可执行程序在经汇编、连接生成的可执行程序在DOSDOS提示符后键提示符后键入文件名即可直接运行。如运行有错误,可使用入文件名即可直接运行。如运行有错误,可使用DEBUGDEBUG程序调试。程序调试。键入命令:键入命令:DEBUG

20、LT301A.EXEDEBUG LT301A.EXE即可将程序调入内存,由即可将程序调入内存,由DEBUGDEBUG控制。用户可使用控制。用户可使用单步执行、断点执行等方法进行调试。单步执行、断点执行等方法进行调试。注意寻找数据段的方法。注意寻找数据段的方法。第三章第三章 汇编语言程序格式汇编语言程序格式177.7.程序在内存中的定位及如何寻找数据段程序在内存中的定位及如何寻找数据段参考:参考:教材教材P76/P76/例题例题3.13.1a:lt301a.a:lt301a.asmasm; 教材教材P80/lt301a.P80/lt301a.asmasm的列表文件;的列表文件; 教材教材P81/

21、lt301a.P81/lt301a.asmasm的影像文件;的影像文件; 教材教材P82/lt301a.exeP82/lt301a.exe由由DEBUGDEBUG装入内存后的反装入内存后的反汇编结果以及使用汇编结果以及使用R R命令显示的寄存器值。命令显示的寄存器值。操作步骤:操作步骤: 按按P82 DEBUGP82 DEBUG装入内存后显示的寄存器值,由装入内存后显示的寄存器值,由DS=ES=14B4HDS=ES=14B4H可知,可知,1414B4B4为最低的可用的段地址,即程为最低的可用的段地址,即程序段前缀(序段前缀(PSPPSP)的起始地址。的起始地址。 CS=14C4HCS=14C4

22、H为代码段的段地址,即为代码段的段地址,即1414C40C40为整个程序为整个程序的起始地址;的起始地址;1414C40C40相当于影像文件的相当于影像文件的0000000000H H。 第三章第三章 汇编语言程序格式汇编语言程序格式18 在反汇编结果中,第一条指令为在反汇编结果中,第一条指令为MOV DXMOV DX,14C6,14C6,在影像文件中已经显示在影像文件中已经显示DGROUPDGROUP的的“Origin”Origin”为为00020002:0 0,所以将所以将1414C6C6(14C4+000214C4+0002)作为作为DSDS的值。的值。 数据段第一个数据的地址:在影像文

23、件中显示:数据段第一个数据的地址:在影像文件中显示:DATADATA段的段的“Start”Start”为为0002400024H H,14C40+00024=14C64,14C40+00024=14C64,这这是数据段第一个数据的物理地址,由于是数据段第一个数据的物理地址,由于DS=14C6DS=14C6,其逻其逻辑地址为辑地址为1414C6C6:00040004,在数据段的偏移地址当然是在数据段的偏移地址当然是00040004。从反汇编结果的第。从反汇编结果的第1313条指令(条指令(MOV DX,0004MOV DX,0004)也也可以看出第一个数据的偏移地址为可以看出第一个数据的偏移地址

24、为0404。 第三章第三章 汇编语言程序格式汇编语言程序格式19 教材教材8282页页SS=14C8SS=14C8: 1414C40C40为整个程序的起始地址,为整个程序的起始地址,8181页的影像文件页的影像文件显示:显示:STACKSTACK段的段的“Start”=00040hStart”=00040h, 14c40h+00040h=14c80h, 14c40h+00040h=14c80h,取高取高4 4位,即位,即SS=14C8HSS=14C8H。这是未调整的堆栈段的段地址。这是未调整的堆栈段的段地址。 8282页显示页显示SP=0400SP=0400:影像文件反映起始地址为影像文件反映

25、起始地址为0004000040H H,末地址为末地址为00430043FHFH,长度为长度为04000400H H(堆栈段默认堆栈段默认长度长度10241024字节,字节,1616进制数为进制数为04000400);堆栈区可表示成);堆栈区可表示成1414C8C8:0 003FF03FF。设置设置SP=0400SP=0400,则入栈时第一个数据则入栈时第一个数据将占用将占用1414C8C8:03FE03FE和和0303FFFF单元,显然,单元,显然,SPSP的值应等于的值应等于堆栈区的长度值。堆栈区的长度值。 SP=0400HSP=0400H是未调整的堆栈指针。是未调整的堆栈指针。返回第三章返

26、回第三章返回返回3.13.1第三章第三章 汇编语言程序格式汇编语言程序格式20 3.2 3.2 参数、变量和标号参数、变量和标号 3.2.1 3.2.1 数值型参数数值型参数 常数、数值表达式、运算符及运算符常数、数值表达式、运算符及运算符 的优先级的优先级 3.2.2 3.2.2 变量定义伪指令变量定义伪指令 3.2.3 3.2.3 变量和标号的属性变量和标号的属性 变量和标号的三种属性、属性操作符变量和标号的三种属性、属性操作符返回第三章返回第三章第三章第三章 汇编语言程序格式汇编语言程序格式21 3.2.1 3.2.1 数值型参数数值型参数 参数可分为两类:数值型参数参数可分为两类:数值

27、型参数 地址型参数地址型参数 对硬指令:指令的操作对象(一般称为操作数),对硬指令:指令的操作对象(一般称为操作数),可以是立即数,寄存器和存储单元,其立即数要用数可以是立即数,寄存器和存储单元,其立即数要用数值型参数表达,地址型参数如标号或变量的名字。值型参数表达,地址型参数如标号或变量的名字。 对伪指令:参数给汇编程序提供必要的信息,对伪指令:参数给汇编程序提供必要的信息,使汇编程序完成汇编。使汇编程序完成汇编。 数值型参数含:常数数值型参数含:常数 数值表达式数值表达式 1. 1.常数:十进制(默认)十六进制常数:十进制(默认)十六进制 二进制二进制 八进制八进制 字符串常数(其数值为字

28、符串常数(其数值为ASCIIASCII码值)码值) 符号常数:表达一个数值的标识符符号常数:表达一个数值的标识符 涉及到的两条伪指令:涉及到的两条伪指令:第三章第三章 汇编语言程序格式汇编语言程序格式22 1 1)基数控制伪指令()基数控制伪指令(RADIXRADIX) RADIX n;n取取216内的任意整数。内的任意整数。 如如“ RADIX 16”,使汇编程序把默认的基数改为使汇编程序把默认的基数改为16,即没有加后缀的数表示十六进制数,非十六进制,即没有加后缀的数表示十六进制数,非十六进制数均应加后缀(含十进制数)。数均应加后缀(含十进制数)。 2 2)符号常数定义伪指令()符号常数定

29、义伪指令(EQUEQU、= =)vEQU 符号名符号名 EQU 数值表达式数值表达式 符号名符号名 EQU ;5.X版用双引号。版用双引号。给符号定义一个数值或把符号定义成另一个字符给符号定义一个数值或把符号定义成另一个字符串;也可以说使也可以说使EQU两边的项等效,可以互相代两边的项等效,可以互相代换。换。第三章第三章 汇编语言程序格式汇编语言程序格式23 例如:例如:Number_1 EQU 2;Number_1 EQU 2; Loop_count EQU 2 Loop_count EQU 2* *5+Number_15+Number_1 CallDos CallDos EQU EQU 注

30、释:注释: 1 1)程序中使用符号常数,而不使用具体数值,可)程序中使用符号常数,而不使用具体数值,可大大提高程序的易读性,而且使程序易于修改。使用大大提高程序的易读性,而且使程序易于修改。使用汇编语言编写程序,通常应遵循这一原则。汇编语言编写程序,通常应遵循这一原则。 2 2)EQUEQU右边的项允许出现符号,但该符号必须是右边的项允许出现符号,但该符号必须是已经定义或即将定义的。已经定义或即将定义的。 3 3)符号定义后即可在程序中使用,如)符号定义后即可在程序中使用,如 MOV CXMOV CX,Loop_countLoop_count CallDosCallDos第三章第三章 汇编语言

31、程序格式汇编语言程序格式24v “=” “=” 号伪指令号伪指令其作用同其作用同EQUEQU,但用但用= =号定义的符号号定义的符号在同一个程序在同一个程序中可以重复定义,中可以重复定义,EQU不可。不可。 如如 X=7 X=7 ;X EQU 7 X EQU 7 正确正确 X=X+3 X=X+3 ;X EQU X+3 X EQU X+3 错误错误第三章第三章 汇编语言程序格式汇编语言程序格式25 2. 2.数值表达式数值表达式 常数、寄存器、变量及标号等用运算符连接起来常数、寄存器、变量及标号等用运算符连接起来即构成表达式,如细分,有算术表达式、逻辑表达式、即构成表达式,如细分,有算术表达式、

32、逻辑表达式、关系表达式、地址表达式等,但是由于前三种表达式关系表达式、地址表达式等,但是由于前三种表达式或由它们构成的综合型表达式其结果都是数值,故一或由它们构成的综合型表达式其结果都是数值,故一律算做数值表达式;如果一个表达式的结果从物理意律算做数值表达式;如果一个表达式的结果从物理意义来说,代表存储器单元的地址,则称其为地址表达义来说,代表存储器单元的地址,则称其为地址表达式。式。 常见运算符分成五类:常见运算符分成五类: 1 1)算术运算符:)算术运算符:+ + 、- - 、* * 、/ / 、MODMOD 2 2)逻辑运算符:逻辑运算符:AND AND 、OR OR 、XOR XOR

33、、NOTNOT 3 3)移位运算符:移位运算符:SHL SHL 、SHRSHR 4 4)关系运算符:关系运算符:EQEQ、NENE、GTGT、LTLT、GEGE、LELE 5 5)高低分离符:高低分离符:HIGHHIGH、LOWLOW、HIGHWORDHIGHWORD、LOWWORDLOWWORD第三章第三章 汇编语言程序格式汇编语言程序格式26 数值表达式作为数值型参数可以出现在硬指令语句和数值表达式作为数值型参数可以出现在硬指令语句和伪指令语句中;数值表达式的结果,由汇编程序负责计伪指令语句中;数值表达式的结果,由汇编程序负责计算,不会影响目标程序的运行速度。例如:算,不会影响目标程序的运

34、行速度。例如:movmov ax,3 ax,3* *4+5 4+5 ;movmov ax,17 ax,17and al,03h and 05h and al,03h and 05h ;and al,01hand al,01hmovmov al,0101b al,0101b shlshl 2 2* *2 2 ;movmov al,01010000b al,01010000b ;移位对象;移位对象 SHL/SHR SHL/SHR 移位次数移位次数mov bxmov bx,(port ,(port ltlt 5)and 20)or(port 5)and 20)or(port gege 5)and 3

35、0) 5)and 30) ;如关系成立,值为如关系成立,值为0 0FFFFHFFFFH;否则为否则为0 0。 ;当当portport5 5时,汇编结果为时,汇编结果为mov bxmov bx,20,20 ;当当port5port5时,汇编结果为时,汇编结果为mov bxmov bx,30,30dddd_value _value equequ 0ffff1234h 0ffff1234h movmov ax, ax,lowword ddlowword dd_value _value ;movmov ax,1234h ax,1234h 关于优先级问题关于优先级问题不同的运算符,有不同的不同的运算符,

36、有不同的优先级,由于运算符多,优先级,由于运算符多,优先级层次多,编程时通优先级层次多,编程时通常用圆括号规定优先级。常用圆括号规定优先级。返回返回 3.2第三章第三章 汇编语言程序格式汇编语言程序格式27 3.2.2 3.2.2 变量定义伪指令变量定义伪指令 为变量申请固定长度的存储空间,并将相应存储单为变量申请固定长度的存储空间,并将相应存储单元初始化。元初始化。 一般格式:一般格式:v变量名为用户自定义的标识符,表示初值表首个变量名为用户自定义的标识符,表示初值表首个数据的偏移地址,称为符号地址。如省略变量名,数据的偏移地址,称为符号地址。如省略变量名,汇编程序只为初值表分配空间,无符号

37、地址。汇编程序只为初值表分配空间,无符号地址。v伪指令助记符伪指令助记符: :指指DBDB、DWDW等。等。v初值表是由逗号分割开的参数,可以是常数、表初值表是由逗号分割开的参数,可以是常数、表达式、问号、达式、问号、DUPDUP等。问号(?)表示初值不确定,等。问号(?)表示初值不确定,即不赋初值;即不赋初值;DUPDUP为重复分配操作符,格式为:为重复分配操作符,格式为: 重复次数重复次数 DUPDUP(被重复数据列表)被重复数据列表)变量名变量名 伪指令助记符伪指令助记符 初值表初值表第三章第三章 汇编语言程序格式汇编语言程序格式28 1. 1.字节定义伪指令字节定义伪指令DBDB 使汇

38、编程序以字节为单位分配一个或多个存储单元,使汇编程序以字节为单位分配一个或多个存储单元,并将它们按初值表规定的数据初始化。初值表中的每个并将它们按初值表规定的数据初始化。初值表中的每个数据只能是字节量或字符串常数。数据只能是字节量或字符串常数。data segmentx db a,-5 db 2 dup(1,2,?)y db ABC,?data ends汇编程序的地址计数器汇编程序的地址计数器:每进入一个新段,地址每进入一个新段,地址计数器清零;每分配一计数器清零;每分配一个单元,地址计数器自个单元,地址计数器自动加动加1,指向下一个待分,指向下一个待分配的单元配的单元;代表当前值。代表当前值

39、。4141h h1 1-2 21 1fbhfbh6161h h0000h0001h0008hxy-5的补码的补码重复重复 变量变量X、Y定义后,即可在指令中使用:定义后,即可在指令中使用:MOV AL,X ;直接寻址(直接寻址(MOV AL,0000H)DEC X+1;直接寻址(直接寻址(DEC BYTE PTR0001H)MOV CH,BX+Y;寄存器相对寻址寄存器相对寻址MOV Y,AL ;直接寻址(直接寻址(MOV 0008H,AL)第三章第三章 汇编语言程序格式汇编语言程序格式29 2. 2.定义字单元伪指令定义字单元伪指令DWDW 功能与功能与DBDB相同,但以字单元(两个字节)为单

40、位分相同,但以字单元(两个字节)为单位分配存储空间;初值表中的每个数据只能是字量,即配存储空间;初值表中的每个数据只能是字量,即1616位位数据。数据。DATA SEGMENTDATA SEGMENTCOUNT DW 8000HCOUNT DW 8000H;8000H8000H可能是一个无符号数或有符号可能是一个无符号数或有符号 ASCII DW AB ASCII DW AB ;不可多于两个字符,区分高低地不可多于两个字符,区分高低地址址NUM_1 DW 25H NUM_1 DW 25H ;DW 0025HDW 0025HMAX EQU 64H MAX EQU 64H ;不占用存储空间不占用存

41、储空间NUM_2 DW MAX,MAX+6,MAXNUM_2 DW MAX,MAX+6,MAX* *2 DUP(?)2 DUP(?)CON_ADDR DW COUNTCON_ADDR DW COUNT;变量中为变量中为COUNTCOUNT的偏移地址的偏移地址 DATA ENDS DATA ENDS第三章第三章 汇编语言程序格式汇编语言程序格式30 指指 令令 举举 例:例: WNUM EQU 5678HWNUM EQU 5678H;WNUMWNUM为符号常数为符号常数 COUNT DW 20H COUNT DW 20H;COUNTCOUNT为变量,设其偏移地址为为变量,设其偏移地址为1010H

42、 HMOV AXMOV AX,BX+SI+WNUMBX+SI+WNUM;同同MOV AXMOV AX,BX+SI+5678HBX+SI+5678HMOV BXMOV BX,COUNT COUNT ;MOV BX,0010H BX=0020HMOV BX,0010H BX=0020HLEA BXLEA BX,COUNT COUNT ;同同LEA BX,0010H BX=0010HLEA BX,0010H BX=0010HMOV BXMOV BX,OFFSET COUNTOFFSET COUNT;同同MOV BXMOV BX,0010H BX=0010H0010H BX=0010HMOV AXMO

43、V AX,SI+COUNT SI+COUNT ;同同MOV AXMOV AX,COUNTSICOUNTSI ;同同MOV AX,SI+0010HMOV AX,SI+0010H偏移量为符号常数偏移量为符号常数偏移量为变量偏移量为变量第三章第三章 汇编语言程序格式汇编语言程序格式31 3. 3.定义双字单元伪指令定义双字单元伪指令DDDD 以双字单元(以双字单元(4 4字节)为单位分配存储空间。初值字节)为单位分配存储空间。初值表中的每个数据是表中的每个数据是3232位数据,可以是位数据,可以是3232位有符号或无符位有符号或无符号数,也可以用来表示一个号数,也可以用来表示一个“远指针远指针”(高

44、位字表示段(高位字表示段地地址,低位字表示偏移地址,可用做段间间接转移)。址,低位字表示偏移地址,可用做段间间接转移)。 vardd ddvardd dd 0,?,12345678h 0,?,12345678h far_point far_point dddd 00400078h 00400078h(LDS SILDS SI,FAR_POINT)FAR_POINT) 4. 4.其他数据定义伪指令其他数据定义伪指令 1 1)DFDF、DQDQ、DT DT 略略 2 2)MASM6.0MASM6.0建议使用:建议使用:BYTE/WORD/DWORDBYTE/WORD/DWORD等等 3 3)SBY

45、TE/SWORD/SDWORDSBYTE/SWORD/SDWORD:有符号数专用。有符号数专用。第三章第三章 汇编语言程序格式汇编语言程序格式32 例例 3.2 3.2 数据定义综合应用数据定义综合应用. .model small CALLDOS model small CALLDOS equ equ .stack .code .stack .code .data .startup.data .startupbvarbvar db 16 db 16 mov blmov bl, ,bvarbvarwvar dwwvar dw 4 4* *3 3 movmov ax,word ax,word pt

46、r dvarptr dvar00dvar dddvar dd 4294967295 4294967295 mov dxmov dx,word ,word ptr dvarptr dvar22qvar dqqvar dq ? ? mov dxmov dx,offset ,offset msqmsqdb 1,2,3,4,5 db 1,2,3,4,5 movmov ah, 9 ah, 9tvar dttvar dt 2345 CALLDOS 2345 CALLDOSabc abc db a,b,c .exit 0 db a,b,c .exit 0 msq msq db hello,13,10,$ e

47、nddb hello,13,10,$ endbbufbbuf db 12 dup(month) db 12 dup(month)dbuf dddbuf dd 25 dup(? 25 dup(?) )改变双字属性改变双字属性第三章第三章 汇编语言程序格式汇编语言程序格式33 5. 5.定位伪指令定位伪指令ORGORG(/EVEN/ALIGN/EVEN/ALIGN) 控制数据或指令的偏移地址。控制数据或指令的偏移地址。1 1)ORG ORG 参数参数 使地址计数器指向参数表达的偏移地址。使地址计数器指向参数表达的偏移地址。ORG 100HORG 100H;从从01000100H H单元开始分配存储

48、器。单元开始分配存储器。ORGORG $+10$+10;$ $表示地址计数器的当前值,表示地址计数器的当前值,$+10$+10;表示由当前地址向前跳过;表示由当前地址向前跳过1010个字节。个字节。2 2)EVENEVEN ;使它后面的数据或指令从偶地址开始。使它后面的数据或指令从偶地址开始。 3 3)ALIGN nALIGN n;使它后面的数据或指令从使它后面的数据或指令从n n的整数倍的整数倍 ;地址开始(可被;地址开始(可被n n整除)。整除)。 n n是是2 2的乘方(的乘方(2 2,4 4,8 8)且小于所在段的定位属)且小于所在段的定位属性值。如性值。如“ALIGN 4”ALIGN

49、 4”,使下一个地址开始于双字边界。使下一个地址开始于双字边界。第三章第三章 汇编语言程序格式汇编语言程序格式34定位伪指令举例:定位伪指令举例:DATA SEGMENTDATA SEGMENTD01 DB 1,2,3 D01 DB 1,2,3 ;D01D01偏移地址为偏移地址为0 0,=0003=0003H HEVENEVEN(ALIGN 2ALIGN 2); $ $为为00040004H HD02 DW 5 D02 DW 5 ;D02D02偏移地址为偏移地址为0404H H, =0006H=0006HALIGN 4 ALIGN 4 ;最接近最接近6 6的、可被的、可被4 4整除的数是整除的

50、数是8 8 ; =0008=0008H HD03 DD 6 D03 DD 6 ;D03D03的偏移地址为的偏移地址为0808H H,=000CH=000CHORG ORG +10H +10H ;000CH+0010H=001CH 000CH+0010H=001CH =001CH=001CHD04 DB D04 DB abcabc ;D04D04的偏移地址为的偏移地址为001001CH CH =001FH=001FHLEN EQU LEN EQU D04D04;LEN=001FLEN=001F001C=3001C=3 ;变量变量D04D04所占的字节数。所占的字节数。返回返回 3.2第三章第三章

51、 汇编语言程序格式汇编语言程序格式35 3.2.3 3.2.3 变量和标号的属性变量和标号的属性 变量和标号有三种属性:变量和标号有三种属性:1)1)段属性(段属性值、段值):所在段的段地址段属性(段属性值、段值):所在段的段地址2)2)偏移属性(偏移值):所在段的段内偏移地址偏移属性(偏移值):所在段的段内偏移地址3)3)类型属性类型属性 对标号和子程序名:对标号和子程序名:NEAR NEAR 或或 FARFAR 对变量:对变量:BYTEBYTE、WORDWORD、DWORDDWORD、FWORDFWORD等等注释:变量的偏移值,有时也称注释:变量的偏移值,有时也称“变量的值变量的值”。但是

52、最好。但是最好将二者加以区别:变量的将二者加以区别:变量的“偏移值偏移值”代表偏移地址;变量的值代表偏移地址;变量的值代表变量中存储的内容。高级语言中出现变量,通常是引用变代表变量中存储的内容。高级语言中出现变量,通常是引用变量中所存放的数据,汇编语言中出现变量,根据指令的不同,量中所存放的数据,汇编语言中出现变量,根据指令的不同,有时引用变量的偏移地址,有时引用变量中存储的数据。对此,有时引用变量的偏移地址,有时引用变量中存储的数据。对此,应特别加以注意。应特别加以注意。第三章第三章 汇编语言程序格式汇编语言程序格式36 DATA SEGMENTDATA SEGMENT D01 DW 250

53、8H D01 DW 2508HD01_ADR DW D01D01_ADR DW D01 DATA ENDS DATA ENDS MOV BX,D01 MOV BX,D01 ;同同MOV BXMOV BX,0000H0000H ;指令执行后,指令执行后,BX=2508HBX=2508H MOV BX MOV BX,D01+2 D01+2 ;同同MOV BXMOV BX,0000+20000+2 MOV BX MOV BX,SI+D01 SI+D01 ;同同MOV BXMOV BX,SI+0 SI+0 MOV BX MOV BX,OFFSET D01OFFSET D01;同同MOV BXMOV B

54、X,0000H 0000H LEA BX LEA BX,D01D01;同同MOV BXMOV BX,0000H0000H;执行后执行后 BX=0BX=0引用引用D01D01的偏移地址的偏移地址引用引用D01D01存放的数据存放的数据D01D01出现在表达式出现在表达式中,引用偏移地址中,引用偏移地址第三章第三章 汇编语言程序格式汇编语言程序格式37地址及类型操作符地址及类型操作符1.1.地址操作符地址操作符vOFFSET OFFSET 变量变量| |标号;返回变量或标号的偏移地址标号;返回变量或标号的偏移地址vSEG SEG 变量变量| |标号;返回变量或标号的段地址标号;返回变量或标号的段地

55、址设设ARRAYARRAY为一变量为一变量MOV AXMOV AX,SEG ARRAYSEG ARRAYMOV DSMOV DS,AXAXMOV BXMOV BX,OFFSET ARRAYOFFSET ARRAY “SEG ARRAY”“SEG ARRAY”和和“OFFSET ARRAY”OFFSET ARRAY”称为地址表达称为地址表达式。前面介绍的算术运算符也可构成地址表达式。式。前面介绍的算术运算符也可构成地址表达式。 如如 “ “ARRAYARRAY2”2”,“ARRAY-2”“ARRAY-2”。第三章第三章 汇编语言程序格式汇编语言程序格式382.2.类型操作符类型操作符 对变量或标

56、号的类型属性进行操作。对变量或标号的类型属性进行操作。 PTR/THIS/LABEL/SHORT/TYPE/SIZEOF/LENGTHOFPTR/THIS/LABEL/SHORT/TYPE/SIZEOF/LENGTHOFPTRPTR类型名类型名 PTRPTR 变量变量| |标号;给变量或标号指定类型属性标号;给变量或标号指定类型属性BYTEBYTE、WORDWORD、DWORDDWORD、;NEARNEAR、FARFAR;STRUCTSTRUCT、RECORDRECORD等定义的类型。等定义的类型。例如例如 MOV ALMOV AL,BYTE PTR W_VARBYTE PTR W_VAR M

57、OV AX MOV AX,WORD PTR B_VARWORD PTR B_VAR JMP FAR PTR N_LABEL JMP FAR PTR N_LABEL JMP NEAR PTR F_LABEL JMP NEAR PTR F_LABEL第三章第三章 汇编语言程序格式汇编语言程序格式39 : :给当前偏移地址指定一种类型属性,同时给当前偏移地址指定一种类型属性,同时定义了一个定义了一个名字名字。名字名字 EQUEQU THIS THIS 类型名类型名d01 d01 dwdw 2055h 2055h ;设设=0008=0008H Hb_b_var equvar equ this byte

58、 this byte ;不占存储空间不占存储空间w_w_var dwvar dw 10 dup(0) 10 dup(0) ;w_w_varvar仍然指向仍然指向00080008H H当前偏移地址为当前偏移地址为00080008H H,“THIS”“THIS”给它指定了一个类给它指定了一个类型属性:型属性:BYTEBYTE,并借助并借助EQUEQU为它定义了名字:为它定义了名字:b_b_varvar。第三条语句使第三条语句使00080008H H单元具有了另一个名字和另一单元具有了另一个名字和另一种属性。对种属性。对00080008H H单元,两个名字、两种属性都可用。单元,两个名字、两种属性都

59、可用。注意:注意: 要借助要借助EQUEQU伪指令。伪指令。 与下一条伪指令合用。与下一条伪指令合用。THISTHIS第三章第三章 汇编语言程序格式汇编语言程序格式40 :同同“EQU THIS”EQU THIS” L1 LABEL FAR L1 LABEL FAR ;不占内存不占内存 L2 L2:MOV AXMOV AX,2055H2055H MOV MOV指令所占单元(即指令所占单元(即MOVMOV指令)具有两个标号、指令)具有两个标号、两种属性。两种属性。 L1 EQU THIS FARL1 EQU THIS FAR L2 L2:MOV AXMOV AX,2055H2055HLABELL

60、ABEL:设定标号为短转移,只用于设定标号为短转移,只用于JMPJMP指令。指令。转移范围为转移范围为-128-128+127+127字节字节( (相对于相对于JMPJMP的下一条指令的下一条指令) ) JMP SHORT L1JMP SHORT L1SHORTSHORT第三章第三章 汇编语言程序格式汇编语言程序格式41TYPE TYPE 变量变量/ /标号标号;返回变量或标号的类型属性值(数字量);返回变量或标号的类型属性值(数字量)变量:变量: BYTE WORD DWORD FWORDBYTE WORD DWORD FWORD 返回值返回值 1 2 4 6 1 2 4 6标号:标号: S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论