5章节 汇编语言与汇编程序_第1页
5章节 汇编语言与汇编程序_第2页
5章节 汇编语言与汇编程序_第3页
5章节 汇编语言与汇编程序_第4页
5章节 汇编语言与汇编程序_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

第5章汇编语言与汇编程序【本章重点】本章重点在于介绍汇编语言的指令格式和伪指令格式、汇编程序的上机调试过程等等,为后面学习微型计算机接口的编程打好基础。【本章难点】本章难点是汇编程序的上机调试过程,它是掌握汇编语言的关键。汇编程序的执行过程§5.1

汇编语言的语句格式一条汇编语言指令中最多包含4个区段,如下所示:[标号]:操作码[目的操作数,源操作数][;注释]其中用方括号括起来的部分,可以有,也可以没有。标号与操作码之间“:”隔开;操作码与操作数之间用“空格”隔开;目的操作数和源操作数之间有“,”分隔;操作数与注释之间用“;”隔开。§5.2汇编语言中的常数与表达式5.2.1常数常数可以分数值常数和字符串常数两类。数值常数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数等几种不同的表示形式,汇编语言中采用不同的后缀加以区分。B:表示二进制数。例如,10100101B。D:表示十进制数。例如,278D或278。Q:表示八进制数。例如,567Q,263Q。H:表示十六进制数。例如,9AH,5678H。字符串常数是由单引号括起来的一串字符。例如:‘THIS

IS

A

STUDENT!’‘12345’要指出的是,此处的’12345’其值并非是十进制数12345,而是代表它们所对应的ASCⅡ码,即31H,32H,33H,34H,35H。5.2.2表达式和运算符在表达式中,运算符充当着重要的角色。8086宏汇编有算术运算符、逻辑运算符、关系运算符、分析运算符和综合运算符共5种。算术运算符

逻辑运算符

关系运算符分析运算符综合运算符+(加法)AND(与)EQ(相等)SEG(求段基值)PTR-(减法)OR(或)NE(不相等)OFFSET(求偏移量)THIS×(乘法)XOR(异或)LT(小于)TYPE(求变量类型)SHORT÷(除法)NOT(非)GT(大于)LENGTH(求变量长度)HIGHMOD(求余)LE(小于或等于)SIZE(求字节数)LOWSHL(左移)GE(大于或等于)SHR(右移)8086汇编语言中的运算符分析运算符共有5个:SEG(求段基值)、OFFSET(求偏移量)、

TYPE(求变量类型)、LENGTH(求字节数)和SIZE(求字节数)。其中LENGTH和SIZE只对数据存储器地址操作数有效。1)SEG运算符:利用运算符SEG可以得到一个标号或变量的段基址使用格式:SEG变量名或标号名例如:已知数据段DATA从存储器实际地址03000H开始,作如下定义后,用SEG运算符求变量所在的段基址。DATASEGMENT;定义数据段VARlVAR2DB

10H,18H,25H,34HDW

2300H,1200H;定义字节数据;定义字数据VAR3DD

11002200H,33004400H:定义双字数据DATAENDS;数据段结束MOVBX,SEG

VARl汇编成:MOV

BX,0300HMOVCX,SEG

VAR2汇编成:MOV

CX,0300HMOVDX,SEG

VAR3汇编成;MOV

DX,0300H2)OFFSET运算符:利用运算符OFFSET可以得到一个标号或变量的偏移量。使用格式:OFFSET变量名或标号名例如:对于上例中所定义的数据段,采用OFFSET运算符求出变量VARl和VAR2的偏移量。则:MOV

BX,OFFSET

VAR1汇编成:MOV

BX,0000HMOV

CX,OFFSET

VAR2汇编成:MOV

CX,0004HMOV

DX,OFFSET

VAR3汇编成:MOV

DX,0008H3)TYPE运算符:TYPE运算符可加在变量、结构或标

号的前面,所求出的是这些存储器操作数的类型部分。运算符TYPE的运算结果是一个数值,这个数值与存储

器操作数类型属性的对应关系存储释操作数类型字节数据BYTE(DB定义)字数据WORD(DW定义)

双字数据DWORD(DD定义)TYPE返回值124DATA;定义数据段DB

10H,18H,25H,34HDW

2300H,1200HDD

11002200H,33004400H;定义字节数据;定义字数据:定义双字数据DATASEGMENTVARlVAR2VAR3ENDS;数据段结束下列指令:MOVBX,TYPEVAR1汇编成:MOVBX,1MOVCX,TYPEVAR2汇编成:MOVCX,2MOVDX,TYPEVAR3汇编成:MOVDX,44)LENGTH运算符:LENGTH运算符放在数组变量

的前面,可以求出该数组中所包含的变量的个数。ARRAY1DB100DUP(?)ARRAY2DW10DUP(?)ARRAY3DD10DUP(?)下列指令:MOVBX,LENGTHARRAY1汇编后:MOVBX,100MOVCX,LENGTHARRAY2汇编后:MOVCX,10MOVDX,LENGTHARRAY3汇编后:MOVDX,105)SIZE运算符:如果一个变量已经用重复操作符

DUP加以说明,则利用SIZE运算符可以得到分配给该变量的字节总数。ARRAY1DB100DUP(?)ARRAY2DW10DUP(?)ARRAY3DD10DUP(?)下列指令:MOVBX,SIZEARRAY1汇编后:MOVBX,100MOVCX,SIZEARRAY2汇编后:MOVCX,20MOVDX,SIZEARRAY3汇编后:MOVDX,40(5)综合运算符综合运算符可以用来建立和临时改变变量或标号的类型以及存储器操作数的存储单元类型,而忽略当前的属性,所以又称为属性修改运算符。有6个综合运算符,即PTR、段属性前缀、SHORT、THIS、HIGH和LOW1)PTR运算符VARlVAR2DB

10H,18H,25H,34HDW

1223H,1200HMOV

AX,WORD

PTR

VARl

执行后:AX=1810HMOV

BL,BYTE

PTR

VAR2

执行后:BL=23H2)SHORT运算符。运算符SHORT用来修饰JMP指令中跳转地址的属性,指出跳转地址是在下一条指令地址的-128~+127个字节范围之内。例如:在JMP指令中使用SHORT运算符来进行短距离跳转。┇NEXTJMP

SHORT┇NEXT:….┇该例中,使用SHORT运算符后,跳转标号NEXT与JMP指令的距离不能大于127个字节。§5.3伪指令5.3.1定义数据伪指令该类伪指令用来定义存贮空间及其所存数据的长度。DB:定义字节,即每个数据是1个字节。DW:定义字,即每个数据占1个字(2个字节)。DD:定义双字,即每个数据占2个字。低字部分在低地址,高字部分在高地址。DQ:定义4字长,即每个数据占4个字。DT:定义10个字节长,用于压缩式十进制数据。例如:DATA1

DB

10H,6,78H,100表示从DATA1单元开始连续存放10H,6,78H,100,共占4个字节地址。41HDATA1DB20HDATA1DATA220H04HDATA7DATA8??DATA2DW0204H,1000H02H?00H?10H?DATA3DB(-1*3),(15/5)DATA3FDHDATA90005H00DATA445H00DATA4DD12345H23H0001H00DATA5DB‘0123’00HDATA10?DATA530H?31H?DATA6DW‘AB’,’C’,’32H?D’33H?DATA7DB?DATA642H?43HDATA8DD?00H44H00HDATA9DB5DUP(00)DATA10DW3DUP(?)5.3.2符号定义伪指令EQUEQU伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替,如:COUNT

EQU100

;COUNT代替常数100SUM

EQU

30*25

;SUM代替数值表达式C

EQU

CX

;C代替寄存器CXM

EQU

MOV

;M代替指令助记符MOV需要注意的是,一个符号一经EQU伪指令赋值后,在整个程序中,不允许再对同一符号重新赋值。5.3.3段定义伪指令段定义伪指令的用途是在汇编语言程序中定义逻辑段,用它来指定段的名称和范围,并指明段的定位类型、组合类型及类别。常用的段定义为指令有SEGMENT、ENDS和ASSUME等。(1)SEGMENT和ENDS伪指令使用格式:段名SEGMENT[定义类型][组合类型][‘类别’]…(段内语句系列)段名ENDSDATA

SEGMENT┇DATA

ENDSSTACK

SEGMENT

STACK┇STACK

ENDSCODE

SEGMENTASSUME

CS:CODE,DS:DATA,SS:STACKMOV

AX,DATAMOV

DS,AXMOV

AX,STACKMOV

SS,AX┇CODE

ENDS5.3.4过程定义伪指令在程序设计中,经常将一些重复出现的语句组定义为子程序。子程序又称为过程,可以用CALL指令来调用。(1)过程定义伪指令PROC和ENDP使用格式:过程名 PROC

[类型]┇

过程体RET过程名ENDPDELAYPROCMOV

BL,10MOV

CX,2801DELY:WAIT:LOOP

WAITDELAYDEC

BLJNZ

DELYRETENDP一个延时100ms子程序,其过程可定义如下5.3.5汇编结束伪指令END该伪指令表示源程序的结束,将汇编程序停止汇编。因此,任何一个完整的源程序均应有END指令,其一般格式为END[表达式]其中表达式表示该汇编程序的启动地址。例如:┇END

START则表明该程序的启动地址为START。§5.4汇编语言程序上机操作过程5.4.1汇编语言程序上机调试步骤1.编写源程序在弄清问题的要求,确定方案后,汇编语言程序设计者便可依据前面的指令系统和汇编语言的规定,逐个模块地编写汇编语言源程序。2.源程序输入微型机在编辑软件EDIT.EXE或其他编辑软件的支持下,将

源程序输入到计算机中。通常,汇编语言源程序的扩展名为ASM。汇编利用汇编程序(或宏汇编程序)(ASM或MASM)对汇编语言源程序进行汇编,产生扩展名为OBJ的可重定位的目的代码。连接利用连接程序(LINK)可将一个或多个扩展名为OBJ文件进行连接,生成扩展名为扩展名为EXE的可执行文件。调试对于稍大一些的程序来说,经过上述步骤所获得的.EXE可执行文件,在运行过程中难免无错。调试汇编程序最常用的工具是动态调试程序DEBUG。汇编语言源程序的上机调试过程5.4.2汇编语言源程序的建立当启动系统后,进入DOS状态,输入EDIT命令,就可以进入EDIT屏幕编辑软件,然后输入汇编语言源程序。C:\>EDIT↙下面是将ASCⅡ码转换成二进制数的程序。设定源程序的文件名为ABC。DATASEGMENTASCDB

’5’,’A’,’6’,’1’DB

2DUP(0)DATASTACKBINENDSSEGMNTSTACK

‘STACK’DB

100DUP(?)STACKCODEENDSSEGMENTASSUMECS:CODE,DS:DATA,AX,DATADS,AXCL,4CH,CLSI,OFFSET

ASCB1:SS:STACKSTART:

MOVMOVMOVMOVMOVCLDXORXORLODSANDCMPAX,AXDX,DX

ASCAL,7FHAL,’0’B2:B3:ERRORAL,’9’B2

AL,30HSHORT

B3AL,’A’ERRORAL,’F’ERRORAL,37HDL,ALDX,CLCHB1WORD

PTR

BIN,DXAH,4CH21HCODEJLCMPJGSUBJMPCMPJLCMPJGSUBORRORDECJNZMOVMOVINTENDSENDSTART键入以下命令:C:\>EDIT

ABC.ASM↙此时屏幕的显示状态如图5-4所示。5.4.3将源程序文件汇编成目标程序文件在对源程序文件进行汇编时,汇编程序将对.ASM文件进行二遍扫描。如果源程序文件中出现语法错误,则汇编结束后将指出源程序中的错误,这时可用编辑程序再次修改源程序中的错误,然后再次汇编,直到最后得到没有错误的目标程序,即扩展名为.OBJ文件。一般情况下,汇编程序的主要功能有以下3点:检查源程序中存在语法错误,并给出错误信息。源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。若程序中使用了宏指令,则汇编程序将展开宏指令。5.4.4用连接程序生成可执行程序文件经汇编以后产生的目标程序文件(OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为EXE)。连接程序LINK并不是专为汇编语言程序设计的,如果一个程序是由若干个模块组成的,也可以通过连接程序把它们连接在一起,这些模块可以是汇编产生的目标文件,也可以是高级语言编译程序产生的目标文件。5.4.5程序的执行当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。如:C:\>ABC↙本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行的结果,我们可以采用调试程序DEBUG来进行检查。5.4.6程序的调试在编写汇编语言程序时产生的错误,除了一般语法错误和格式错误可以用汇编和连接程序发现和指出外,逻辑上的错误都必须用调试程序(DEBUG.COM)来排除。DEBUG.COM文件用于试验和检测用户程序1.DEBUG程序的调用在DOS的提示符下,可以直接键入命令,如图5-7所示

C:\>DEBUG

ABC.EXE↙命令名含义使用格式功能D显示存储单元命令-D[address]按指定地址范围显示存储单元内容E修改存储单元内容命令-E

address

[list]-E

address按指定首地址显示存储单元内容逐个单元修改存储单元内容F填写存储单元内容命令-F

range

list将指定内容填写到存储单元R检查和修改寄存器内容命令-R-R

register

name-RF显示CPU内所有寄存器内容显示和修改某个寄存器内容显示和修改标志位状态G运行命令-G[=address1][address2]按指定地址运行T跟踪命令-T[=address]-T[=address][value]逐条指令跟踪多条指令跟踪A汇编命令-A[address]按指定地址开始汇编U反汇编命令-U[address]-U[range]按指定地址开始反汇编按指定范围的存储单元开始反汇编L装入命令-L

address

drive

sector-L

[address]装入磁盘上指定内容到存储器装入指定文件W写命令-W

address

drive

sector-W

[address]把数据写入磁盘指定的扇区把数据写入指定的文件Q退出命令-Q退出DEBUG§5.5汇编语言程序运行实例本节中通过一个汇编语言源程序的实际例子,来了解汇编语言源程序的建立、汇编、连接、运行的过程。给出的程序是将键盘输入的小写字母转换成大写字母的程序并显示在屏幕上。设定源程序名为WANG.ASM。82

DUP(?)50

DUP(?)LENGTH

STASTART:CS:CODE,DS:DATA,ES:DATA,SS:STACKAX,DATADS,AXES,AX;段寄存器和堆栈初始化AX,STACKSS,AXSP,TOPBX,OFFSET

BUF;BX指向字符行缓冲区首地址KKK:GGG:SI,0000H;偏移指针SI清0AH,01H;接收键入字符;是CTRL-C键则转结束DATA

SEGMENTBUF

DBDATA

ENDSSTACK

SEGMENTSTA

DBTOP

EQUSTACK

ENDSCODE

SEGMENTASSUMEMOVMOVMOVMOVMOVMOVMOVMOVM

温馨提示

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

评论

0/150

提交评论