汇编语言的基本语法_第1页
汇编语言的基本语法_第2页
汇编语言的基本语法_第3页
汇编语言的基本语法_第4页
汇编语言的基本语法_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言的基本语法第1页,课件共52页,创作于2023年2月5.1汇编语言的特点1、机器指令:计算机能识别的代码,机器指令是由二进制数组成的。例如: PUSHAX

机器指令为: 010100002、汇编语言:汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的。3、高级语言:面向过程(如C,FORTRAN)或对象(如C++,Java)的语言,不依赖于机器,因而有很好的通用性和可移植性.第2页,课件共52页,创作于2023年2月

汇编语言与高级语言的比较特征汇编语言高级语言目标程序运行时间短长程序运行时占用的存储空间小大直接访问硬件的能力强弱程序可读性和可维护性差强程序开发的复杂程序高低程序的可移植性差强对硬件环境和软件的兼容性差强第3页,课件共52页,创作于2023年2月采用汇编语言进行程序设计的优点:可充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少目标程序所占用的存储空间。常用来编写实时控制程序、实时通信程序,有时也用来编制某些系统软件程序。第4页,课件共52页,创作于2023年2月

文件名.ASM文件名.OBJ文件名.EXE汇编语言源程序

汇编目标程序连接执行/调试程序编辑程序EDIT.EXE汇编程序MASM.EXE连接程序LINK.EXE汇编语言程序的开发过程ML文件名.ASM

第5页,课件共52页,创作于2023年2月

DATA

SEGMENT

;数据段

NUMDW0011101000000111BNOTESDB‘Theresultis:’,’$’DATA

ENDSSTACKSEGMENTSTACKSTADB50DUP(?)TOPEQULENGTHSTASTACKENDS第6页,课件共52页,创作于2023年2月CODE

SEGMENT

;代码段

ASSUMECS:CODE,DS:DATA

BEGIN:MOVAX,DATAMOVDS,AXMOVDX,OFFSETNOTES;显示提示信息

MOVAH,9HINT21HMOVBX,NUM;将数装入BXMOVCH,4;CH作循环计数器ROTATE:DISPLAY:

MOVCL,4

;CL中放移位位数

MOVDL,AL;显示16进制数

ROLBX,CLMOVAH,2MOVAL,BLINT21HANDAL,0FH;AL中为一位16进制数

DECCHADDAL,30H;转换为ASCII码值

JNZROTATECMPAL,’9’

;是0~9的数码?

MOVAX,4C00H;返回DOSJLDISPLAYINT21HADDAL,07H;在A~F之间

CODE

ENDS

;代码段结束

ENDBEGIN;模块结束第7页,课件共52页,创作于2023年2月2、结构DATASEGMENT

<数据定义伪指令序列>DATAENDSSTACKSEGMENTSTACK<数据定义伪指令序列>STACKENDSCODESEGMENT<程序段>CODEENDSENDS源程序由若干条语句组成程序由最多4个段组成,数据段、堆栈段、代码段、附加段每个段有一名字,并以符合SEGMENT表示段的开始,以END作为段的结束符号第8页,课件共52页,创作于2023年2月5.2汇编语言程序结构和基本语法汇编语言的基本语法:词法和句法一、词法

字符集、标识符、保留字、数的表示、运算符和表达式1、字符集英文字符:A-Z,a-z;数字字符:0-9算术运算符号:+-*/关系运算符号:<=>分隔符:,:;()[]‘TAB控制符:CR、LF、FF其他字符:如&_?.$@!%第9页,课件共52页,创作于2023年2月2、标识符

常用作变量名、常量名、记录名、和段名由1-31个字符组成,打头的字符必须是字母、?、@或-从第二个字符开始,组成标识符的字符可以是字母、数字、?、@或-,不能使用其他符号3、保留字指令助记符、伪指令、寄存器名、表达式运算符及属性操作符,不能当做标识符使用第10页,课件共52页,创作于2023年2月4、数的表示

所有常数必须是整数默认十进制;表示非十进制数,要加后缀B、H或Q;十六进制以字母开头必须在前面加数字0,如十六进制数AF应表示为0AFH;5、表达式和运算符表达式由运算符和操作数组成,可分为数值表达式和地址表达式。运算符可分为算术运算符、逻辑运算符、关系运算符、分析运算符、综合运算符、分离运算符等操作数可以是常数、变量名、或标号第11页,课件共52页,创作于2023年2月①算术运算符

+-*/MODSHLSHR对操作数进行算术运算,运算对象和结果都必须为整数MOVAL,00011010BSHL2SHL为移位运算符SHLAL,1SHL为移位指令助记符②逻辑运算符NOT、AND、OR、XOR对操作数按位进行逻辑运算MOVAL,NOT10100101B逻辑运算符NOTAL逻辑运算指令③关系运算符对操作数按位进行关系运算,条件满足结果全为1,否则全为0MOVAX,5EQ101B等效于MOVAX,0FFFFHMOVBH,10HGT16MOVBH,00HMOVBL,0FFHEQ255MOVBL,0FFHMULAL64HGE100MULAL,0FFH第12页,课件共52页,创作于2023年2月④分析运算符SEG

返回变量或标号所在段的段基址

MOVAX,SEGVAR1OFFSET

返回变量或标号的段内偏移基址

MOVSI,OFFSETVAR1LENGTH

加在变量之前,返回变量所包含的单元数

MOVBL,LENGTHVAR1TYPE

返回变量或标号的类型属性

MOVAX,TYPEVAR1SIZE

返回变量所占的总字节数,等于LENGTH和TYPE两个运算符返回值的乘积

MOVCH,SIZEVAR1CH第13页,课件共52页,创作于2023年2月LENGTH,求为符号名分配的项数。

格式:LENGTH﹤符号名﹥ 这里为符号名定义的数据项必须是用重复格式DUP() 定义的。而对于其他情况则回送1。例:K2DW10DUP(?)则LENGTHK2=10 TYPEK2=2 SIZEK2=20

例:AARRDW2,4,6

则LENGTHAARR=1,TYPEAARR=2SIZEAARR=2可以看出:

SIZE<符号名>=(LENGTH<符号名>)*(TYPE﹤符号名﹥)第14页,课件共52页,创作于2023年2月⑤综合运算符PTR规定内存单元的类型属性

格式:类型PTR符号名

MOVBYTEPTR[1000H],0MOVWORDPTR[1000H],0THIS改变存储区的类型属性

格式:符号名EQUTHIS类型VARBEQUTHISBYTEVARWDW20HDUP(0)第15页,课件共52页,创作于2023年2月⑥分离运算符HIGH、LOWMOVAL,HIGH1234HAL=12MOVAL,LOW1234HAL=34⑦其他运算符SHORT短转移说明运算符

()运算符改变运算优先级[]运算符表示间接寻址:段跨越前缀表示后跟的操作数由指定段寄存器提供段基址第16页,课件共52页,创作于2023年2月1、语句①指令语句

[标号:][前缀]指令助记符

[操作数][;注释]标号:表示指令的存储器地址,供转移指令、调用指令和循环指令作为操作数使用;

MOVCX,2

;设置CX计数值

L:DECCX

;计数值减1

JZL

;若计数值不为零则跳转到L执行前缀:与其他指令配合使用,段跨越前缀、重复前缀、总线封锁前缀、操纵尺寸和寻址尺寸等;

MOVAX,ES:[2000H]

段跨越前缀

REP

MOVSB

重复前缀操作数:指令要处理的数据,可分为常数、常量、变量和标号;注释:指令的功能说明,以;开始的字符串,不影响程序执行二、句法(语句和结构)第17页,课件共52页,创作于2023年2月常数:编程时已经确定其值,程序运行期间不会改变其值的数据对象;常量:用符号表示的常数,其值在程序执行过程中保持不变;变量:编程时确定其初始值,程序运行期间可修改其值的数据对象。第18页,课件共52页,创作于2023年2月②伪指令语句[名字]伪操作命令[操作数][;注释]名字:可以是符号名、常量名、变量名、过程名和段名;伪操作命令:主要包括符号定义、变量定义、程序分段定义、过程定义、模块定义、宏定义、段简化定义和内存模式定义等命令;操作数:随伪操作命令的不同而不同。第19页,课件共52页,创作于2023年2月1、符号定义语句①等值语句EQU语句格式:符号EQU

表达式把EQU右边表达式的值或表达式赋给左边的符号

例:CONTEQU10NUMEQU89*3+5-9②等号语句=语句格式:符号=

表达式功能同EQU一样,但等号语句可以多次重新定义同一符号

NUM=10HNUM=NUM+20H第20页,课件共52页,创作于2023年2月③取消语句PURGE语句格式:

PURGE

符号名1[,符号名2[,…]]取消被EQU语句定义的符号名。

例:

CONTEQU10PURGECONTCONTEQU12第21页,课件共52页,创作于2023年2月2、数据定义语句为数据项分配存储单元格式1:

[变量名]伪指令名表达式1,表达式2,‥‥

这里伪指令可为DB,DW,DD,表达式有以下几种情况:①数值表达式例:DA_BYTEDB50H,50,0caHDA_WORDDW0a3f1H,498dH A1DD12345H;Memory:45H,23H,01H,00H

②?表达式,不带引号的?表示可预置任何内容例:DA_BDB?,?;要求分配两个字节单元

DA_WDW?,?;要求分配两个字单元

③字符串表达式数据项可以写成字符串形式,但只能用DB、DW、DD定 义,而且DW、DD语句定义的串只允许包含两个字符。第22页,课件共52页,创作于2023年2月

例:S1 DB‘ABCDEF’S2 DW‘AB’,‘CD’,‘EF’S3 DD‘AB’,‘CD’

这几个变量在存储器中存放情况如下:

S141HS242HS342H42H41H41H43H44H00H44H43H00H45H46H44H46H45H43H00H00H

注意:定义多于两个以上字符的字符串时,只能使用DB伪指令,不能使用DW和DD等伪指令。第23页,课件共52页,创作于2023年2月格式2:

[变量名]伪指令名表达式1DUP(表达式2)用于定义重复的数据或分配一数据块空间. 例:

D_B1

DB20HDUP(?);保留20H个字节

D_B2DB10HDUP(‘ABCD’);字符串‘ABCD’;重复10H次

D_W1DW10HDUP(4);字4重复10H次

第24页,课件共52页,创作于2023年2月3、段定义语句①段开始语句SEGMENT和段结束语句ENDS段定义格式:

段名SEGMENT[定位类型][组合类型]’类别’

段名ENDS定位类型:用来规定段起始边界的要求,可以为以下四种,缺省为PARA)PAGE:16位段地址的最低8位必须为0,即从一页的起点开始;PARA:16位段地址的最低4位必须为0,即从一段的起点开始;WORD:16位段地址的最低1位必须为0,即从偶地址开始;BYTE:16位段地址可以为任意值,即段可以从任何字节开始。第25页,课件共52页,创作于2023年2月组合类型告诉连接程序本段与其他段的关系

NONE

本段与其他段逻辑上不发生关系,每段有独立段基地址;

PUBLIC

将本段与用PUBLIC说明的同名同类别的其他段连接成一个段,所有这些段用同一个段基地址;

COMMON同名同类段相重叠,段的长度为其中最长段的长度

STACK表示本段是堆栈段,连接方式同PUBLICMEMORY该段在连接时被放在所有段的最后

AT把本段装在表达式的值所指定的段基地址处类别

第26页,课件共52页,创作于2023年2月②段分配语句ASSUMECPU对存储器的访问必须通过一个段寄存器来提供段基址,ASSUME用来建立段与段寄存器之间的联系。格式:ASSUME段寄存器名:段名[,段寄存器名:段名]DATASEGMENT

<数据定义伪指令序列>DATAENDSSTACKSEGMENTSTACK<数据定义伪指令序列>STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK…CODEENDSEND第27页,课件共52页,创作于2023年2月DATA1SEGMENTVAR1DB12HDATA1ENDSDATA2SEGMENTVAR2DB34HDATA2ENDSCODESEGMENTVAR3DB56HASSUMECS:CODE,DS:DATA1START:…INCVAR1INCVAR2INCVAR3…CODEENDSENDSTART例:第28页,课件共52页,创作于2023年2月4、过程定义语句在程序设计中,常将多次重复使用的具有一定功能的程序段组成一个子程序,称为过程,可用CALL调用,RET返回。定义格式:

过程名PROC[NEAR/FAR]…

过程名ENDP

NEAR过程只允许段内调用,FAR允许段间调用第29页,课件共52页,创作于2023年2月5.宏指令宏定义语句格式:

宏指令名MACRO[形式参数1,形式参数2…]

…ENDM宏调用:宏指令名[实参数,实参数,…]SHIFT

MACROXMOVCL,XSALAL,CLENDMSHIFT6宏扩展:

+MOVCL,6+SALAL,CL第30页,课件共52页,创作于2023年2月5.4汇编语言程序的上机过程汇编语言程序上机运行的过程有以下几个步骤:(1)用编辑程序建立.ASM源文件;(2)用宏汇编程序MASM等汇编源文件,生成.OBJ目标码文件;(3)用连接程序LINK对目标码文件等模块进行连接,生成.EXE可执行文件;(4)

键入可执行文件名执行该文件,分析执行结果;(5)用DEBUG等工具调试.ASM源程序,再汇编、连接、运行,直到得出正确结果。 为此,除了DOS系统软件和编辑程序外,还需要备置如下程序:汇编程序

masm.exe或asm.exe或tasm.exe等连接程序

link.exe或tlink.exe等汇编调试程序

等交叉引用程序

cref.exe符号索引文件处理程序等第31页,课件共52页,创作于2023年2月1、建立源文件可使用任何一种能建立ASCII文本文件的编辑程序来建立汇编源程序文件,扩展名为.ASM。在使用各种文字编辑程序时,被编辑的源文件(.ASM)中不应有排版格式控制符。第32页,课件共52页,创作于2023年2月2、汇编编辑生成的.ASM源程序文件,须经汇编程序进行汇编,生成二进制代码的目标文件。常见的汇编程序有行汇编和宏汇编两种类型。

行汇编——常用DEBUG.EXE的A命令,生成的目标代码可作为.COM文件存盘,也可在DEBUG环境下直接运行。

行汇编简单直观,生成的目标程序所占用的内存空间最小;但汇编按绝对地址进行,长度限制在64KB范围内,目标程序没有与其它程序模块连接的信息,要由用户或安装程序实现各个目标程序在内存中的地址分配,这样既可能使各程序之间产生太大的空隙(造成浪费)、也可能造成各程序的内存存储冲突。

宏汇编MASM——对汇编语言源程序*.ASM进行汇编常用方法。第33页,课件共52页,创作于2023年2月DEBUG的使用方法1.DEBUG的运行2.DEBUG的主要命令D,显示内存单元内容;U,反汇编命令;R,显示与修改寄存器内容;E,修改内存单元内容;A,汇编命令;T、P,单步执行指令;G,连续执行指令;N,指定装入文件名或写入文件名;L,装入N指定的文件;W,将指定内容写入N指定的文件;Q,退出DEBUG程序,返回操作系统状态。第34页,课件共52页,创作于2023年2月5.3ROMBIOS中断调用

和DOS系统功能调用5.3.1ROMBIOS中断调用BIOS(BasicInputOutputSystem)基本输入输出系统

是一组固化到计算机内主板ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,提供最低级、最直接的硬件控制,是硬件与软件之间的接口。

第35页,课件共52页,创作于2023年2月BIOS的功能:系统自检及初始化

对硬件设备进行自检;对外部设备初始化;设置中断向量;引导操作系统等;程序服务处理

为操作系统和应用程序提供与I/O有关的系统服务。BIOS直接与I/O设备打交道,通过端口与I/O设备传送数据,使应用程序脱离具体的硬件操作。硬件中断处理

提供硬件中断服务程序BIOS的服务功能是通过调用中断服务程序来实现的

第36页,课件共52页,创作于2023年2月中断:CPU执行程序的过程中,由于出现了某个事件,CPU暂停当前程序,转而去执行其他程序,处理完后,返回被暂停的程序继续执行,这个过程称为中断,引起中断的事件称为中断源。处理该事件的程序称中断服务程序。中断号:8086系统允许256种中断,每种中断对应0~255之间的一个数,称为中断号。每种中断都对应于一种中断服务,在实模式下,将中断服务程序的入口地址称为中断向量,存放256个中断向量的内存区域称为中断向量表第37页,课件共52页,创作于2023年2月BIOS中断调用:

BIOS由许多功能模块组成,每个功能模块的入口地址都在中断向量表中。通过软件中断指令“INTn”可以直接调用这些模块。CPU响应中断后,把控制权交给指定的BIOS功能模块,由它提供相应的服务。基本方法:①将所要调用功能的功能号送入AH寄存器;②根据所要调用功能的规定设置入口参数;③执行“INT中断号”指令,进入相应的服务子程序;④中断服务子程序执行完毕后,可按规定取得出口参数。第38页,课件共52页,创作于2023年2月1.INT10H显示输出INT10H包含了与显示器有关的功能,可以用来设置显示方式、光标大小和位置、显示字符等。①AH=0AH,显示字符入口参数;AL=预显示字符的ASCII码功能:在当前光标位置显示AL中的字符,光标位置不变②AH=0EH,显示字符功能:类似0AH功能,但显示字符后光标随之移动,并可解释回车、换行和退格等控制符第39页,课件共52页,创作于2023年2月2.INT16H键盘输入①AH=0,从键盘读一键出口参数:AL=ASCII码,AH=扫描码功能:从键盘读入一个键返回,按键不显示在屏幕上。对于无相应ASCII码的键,如功能键等,AL返回0②AH=1,判断是否有键可读出口参数:若ZF=0,则有键可读,AL=ASCII码,AH=扫描码;否则,无键可读;②AH=2,返回变换键的当前状态出口参数:AL=变换键状态变换键指Ctrl,Alt,Numlock等;第40页,课件共52页,创作于2023年2月例:读键盘输入,显示其中的ASCII字符,按回车键退出。CODESEGMENTSTART:READNEXT:MOVAH,0INT16HCMPAL,ODHJEEXITCMPAL,0JZREADNEXTEXIT:MOVAH,4CHMOVAH,0EHINT21HINT10HCODEENDSJMPREADNEXTENDSTART第41页,课件共52页,创作于2023年2月5.3.2DOS功能调用前面一些程序的运行结果,或是保留在寄存器中,或是保留在存储器中,不能方便直观的看到。要了解运算的结果,应在显示器上输出,方便的方法是调用操作系统中的I/O子程序,操作系统的核心是许多有关I/O驱动,磁盘读写以及文件管理等子程序。这些子程序都编了号,调用时把子程序号(或称系统功能调用号)送到INT21H。通常按照如下4个步骤进行:⑴在AH寄存器中设置系统功能调用号⑵在指定寄存器中设置入口参数⑶执行指令INT21H实现中断服务程序的功能调用⑷根据出口参数分析功能调用执行情况第42页,课件共52页,创作于2023年2月1、键盘输入字符调用格式:MOVAH,01HINT21H功能:等待从键盘输入一个字符并将输入字符的ASCII码送入寄存器AL中,同时在显示器上显示该字符。入口参数:无出口参数:AL=输入的ASCII码字符2、控制台输入调用格式:MOVAH,08HINT21H功能:与1号相似,但只从键盘上输入而不显示字符。入口参数:无出口参数:AL=输入的ASCII码字符第43页,课件共52页,创作于2023年2月DOS功能调用3.向显示器输出一个字符(2号功能调用) 功能号:AH=02H入口参数:DL=字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出例:在当前显示器光标位置显示一个问号

movah,02h

;设置功能号:ah←02h

movdl,'?'

;提供入口参数:dl←'?'

int21h

;DOS功能调用:显示第44页,课件共52页,创作于2023年2月DOS功能调用4.显示字符串(9号功能调用) 功能号:AH=09H入口参数:

DS:DX=欲显示字符串在主存中的首地址 字符串应以$(24H)结束功能:在显示器输出指定的字符串

stringdb'Hello,Everybody!',0dh,0ah,'$‘

… movah,09h movdx,offsetstring int21h第45页,课件共52页,创作于2023年2月DOS功能调用5.从键盘输入一个字符串(10号功能调用)功能号:AH=0AH入口参数:DS:DX=缓冲区首地址执行该功能调用时,用户按键,最后用回车确认缓冲区的定义:第1字节事先填入最多欲接收的字符个数(包括回车字符,可以是1~255)第2字节将存放实际输入的字符个数(不包括回车符)第3字节开始存放将输入的字符串实际输入的字符数多于定义数时,多出的字符丢掉,且响铃第46页,课件共52页,创作于2023年2月DOS功能调用例:Bufferdb81;定义缓冲区

;第1个字节填入可能输入的最大字符数db0 ;存放实际输入的字符数db81dup(0);存放输入的字符串

...movdx,segbuffer;伪指令seg取得buffer的段地址movds,dx ;设置数据段DSmovdx,offsetbuffermovah,0ahint21h第47页,课件共52页,创作于2023年2月

4.文件管理系统调用:AH(功能号)功能入口参数出口参数

3C建立文件DS:DX=ASCII串地址成功AX=文件代号

CX=文件属性失败AX=错误码

3D 打开文件DS:DX=ASCII串地址成功AX=文件代号

AL=0读,=1写,=2读写失败AX=错误码

3E关闭文件BX=文件代号失败AX=错误码

3F读文件或设备DS:DX=数据缓冲区地址成功AX=实际读入字数

BX=文件代号AX=0已到文件尾

CX=读取字节数读错误:AX=错误码

40写文件或设备DS:DX=数据缓冲区地址成功AX=实际写入字数

BX=文件代号

CX=写入字节数写错误:AX=错误码

41删除文件DS:DX=ASCII串地址成功AX=00

温馨提示

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

评论

0/150

提交评论