汇编语言的基本语法.ppt

上传人:小飞机 文档编号:4925150 上传时间:2023-05-23 格式:PPT 页数:52 大小:221KB
返回 下载 相关 举报
汇编语言的基本语法.ppt_第1页
第1页 / 共52页
汇编语言的基本语法.ppt_第2页
第2页 / 共52页
汇编语言的基本语法.ppt_第3页
第3页 / 共52页
汇编语言的基本语法.ppt_第4页
第4页 / 共52页
汇编语言的基本语法.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《汇编语言的基本语法.ppt》由会员分享,可在线阅读,更多相关《汇编语言的基本语法.ppt(52页珍藏版)》请在三一办公上搜索。

1、第5章 汇编语言的基本语法,主要内容汇编语言程序的结构汇编语言语句类型和组成汇编语言程序设计,5.1 汇编语言的特点,1、机器指令:计算机能识别的代码,机器指令是由二进制数组成的。例如:PUSH AX 机器指令为:010100002、汇编语言:汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的。3、高级语言:面向过程(如C,FORTRAN)或对象(如C+,Java)的语言,不依赖于机器,因而有很好的通用性和可移植性,汇编语言与高级语言的比较,采用汇编语言进行程序设计的优点:可充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少目标

2、程序所占用的存储空间。常用来编写实时控制程序、实时通信程序,有时也用来编制某些系统软件程序。,文件名.ASM 文件名.OBJ 文件名.EXE,汇编语言源程序,汇编,目标程序,连接,执行/调试程序,编辑程序EDIT.EXE,汇编程序MASM.EXE,连接程序LINK.EXE,汇编语言程序的开发过程,ML 文件名.ASM,DATA SEGMENT;数据段 NOTES DB The result is:,$DATA ENDS,STACK SEGMENT STACK STA DB 50 DUP(?)TOP EQU LENGTH STASTACK ENDS,CODE SEGMENT;代码段 ASSUME

3、 CS:CODE,DS:DATA BEGIN:MOV AX,DATA MOV DS,AX MOV DX,OFFSET NOTES;显示提示信息 MOV AH,9H INT 21H MOV BX,NUM;将数装入BX MOV CH,4;CH作循环计数器,ROTATE:DISPLAY:MOV CL,4;CL中放移位位数 MOV DL,AL;显示16进制数 ROL BX,CL MOV AH,2 MOV AL,BL INT 21H AND AL,0FH;AL中为一位16进制数 DEC CH ADD AL,30H;转换为ASCII码值 JNZ ROTATE CMP AL,9;是09的数码?MOV AX,

4、4C00H;返回DOS JL DISPLAY INT 21H ADD AL,07H;在AF之间 CODE ENDS;代码段结束 END BEGIN;模块结束,2、结构DATA SEGMENT DATA ENDSSTACK SEGMENT STACKSTACK ENDSCODE SEGMENTCODE ENDSENDS,源程序由若干条语句组成程序由最多4个段组成,数据段、堆栈段、代码段、附加段每个段有一名字,并以符合SEGMENT表示段的开始,以END作为段的结束符号,5.2 汇编语言程序结构和基本语法,汇编语言的基本语法:词法和句法一、词法 字符集、标识符、保留字、数的表示、运算符和表达式1、

5、字符集英文字符:A-Z,a-z;数字字符:0-9算术运算符号:+-*/关系运算符号:分隔符:,:;()TAB控制符:CR、LF、FF其他字符:如&_?.$!%,2、标识符 常用作变量名、常量名、记录名、和段名由1-31个字符组成,打头的字符必须是字母、?、或-从第二个字符开始,组成标识符的字符可以是字母、数字、?、或-,不能使用其他符号3、保留字 指令助记符、伪指令、寄存器名、表达式运算符及属性操作符,不能当做标识符使用,4、数的表示 所有常数必须是整数默认十进制;表示非十进制数,要加后缀B、H或Q;十六进制以字母开头必须在前面加数字0,如十六进制数AF应表示为0AFH;5、表达式和运算符表达

6、式由运算符和操作数组成,可分为数值表达式和地址表达式。运算符可分为算术运算符、逻辑运算符、关系运算符、分析运算符、综合运算符、分离运算符等操作数可以是常数、变量名、或标号,算术运算符+-*/MOD SHL SHR对操作数进行算术运算,运算对象和结果都必须为整数MOV AL,00011010B SHL 2 SHL为移位运算符SHL AL,1 SHL为移位指令助记符逻辑运算符 NOT、AND、OR、XOR对操作数按位进行逻辑运算MOV AL,NOT 10100101B 逻辑运算符NOT AL 逻辑运算指令关系运算符 对操作数按位进行关系运算,条件满足结果全为1,否则全为0MOV AX,5 EQ 1

7、01B 等效于 MOV AX,0FFFFHMOV BH,10H GT 16 MOV BH,00HMOV BL,0FFH EQ 255 MOV BL,0FFHMUL AL 64H GE 100 MUL AL,0FFH,分析运算符SEG 返回变量或标号所在段的段基址 MOV AX,SEG VAR1OFFSET 返回变量或标号的段内偏移基址 MOV SI,OFFSET VAR1LENGTH 加在变量之前,返回变量所包含的单元数 MOV BL,LENGTH VAR1 TYPE 返回变量或标号的类型属性 MOV AX,TYPE VAR1SIZE 返回变量所占的总字节数,等于LENGTH和TYPE两个运算

8、符返回值的乘积 MOV CH,SIZE VAR1 CH,LENGTH,求为符号名分配的项数。格式:LENGTH 符号名 这里为符号名定义的数据项必须是用 重复格式DUP()定义的。而对于其他情况则回送1。例:K2 DW 10 DUP(?)则 LENGTH K2=10 TYPE K2=2 SIZE K2=20 例:AARR DW 2,4,6 则 LENGTH AARR=1,TYPE AARR=2 SIZE AARR=2可以看出:SIZE=(LENGTH)*(TYPE 符号名),综合运算符PTR 规定内存单元的类型属性 格式:类型 PTR 符号名 MOV BYTE PTR 1000H,0 MOV

9、WORD PTR 1000H,0THIS 改变存储区的类型属性 格式:符号名 EQU THIS 类型VARB EQU THIS BYTEVARW DW 20H DUP(0),分离运算符 HIGH、LOWMOV AL,HIGH 1234H AL=12MOV AL,LOW 1234H AL=34其他运算符SHORT 短转移说明运算符()运算符 改变运算优先级 运算符 表示间接寻址:段跨越前缀 表示后跟的操作数由指定段寄存器提供段基址,1、语句指令语句 标号:前缀 指令助记符 操作数;注释标号:表示指令的存储器地址,供转移指令、调用指令和循环指令作为操作数使用;MOV CX,2;设置CX计数值 L:

10、DEC CX;计数值减1 JZ L;若计数值不为零则跳转到L执行前缀:与其他指令配合使用,段跨越前缀、重复前缀、总线封锁前缀、操纵尺寸和寻址尺寸等;MOV AX,ES:2000H 段跨越前缀 REP MOVSB 重复前缀操作数:指令要处理的数据,可分为常数、常量、变量和标号;注释:指令的功能说明,以;开始的字符串,不影响程序执行,二、句法(语句和结构),常数:编程时已经确定其值,程序运行期间不会改变其值的数据对象;常量:用符号表示的常数,其值在程序执行过程中保持不变;变量:编程时确定其初始值,程序运行期间可修改其值的数据对象。,伪指令语句名字 伪操作命令 操作数;注释名字:可以是符号名、常量名

11、、变量名、过程名和段名;伪操作命令:主要包括符号定义、变量定义、程序分段定义、过程定义、模块定义、宏定义、段简化定义和内存模式定义等命令;操作数:随伪操作命令的不同而不同。,1、符号定义语句等值语句EQU语句格式:符号 EQU 表达式把EQU右边表达式的值或表达式赋给左边的符号 例:CONT EQU 10 NUM EQU 89*3+5-9等号语句=语句格式:符号=表达式功能同EQU一样,但等号语句可以多次重新定义同一符号 NUM=10H NUM=NUM+20H,取消语句PURGE语句格式:PURGE 符号名1,符号名2,取消被EQU语句定义的符号名。例:CONT EQU 10 PURGE CO

12、NT CONT EQU 12,2、数据定义语句 为数据项分配存储单元格式1:变量名 伪指令名 表达式1,表达式2,这里伪指令可为DB,DW,DD,表达式有以下几种情况:数值表达式 例:DA_BYTE DB 50H,50,0caH DA_WORD DW 0a3f1H,498dH A1 DD 12345H;Memory:45H,23H,01H,00H?表达式,不带引号的?表示可预置任何内容 例:DA_B DB?,?;要求分配两个字节单元 DA_W DW?,?;要求分配两个字单元 字符串表达式 数据项可以写成字符串形式,但只能用DB、DW、DD定义,而且DW、DD语句定义的串只允许包含两个字符。,例

13、:S1 DB ABCDEF S2 DW AB,CD,EF S3 DD AB,CD 这几个变量在存储器中存放情况如下:S1 41H S2 42H S3 42H 42H 41H 41H 43H 44H 00H 44H 43H 00H 45H 46H 44H 46H 45H 43H 00H 00H,注意:定义多于两个以上字符的字符串时,只能使 用DB伪指令,不能使用DW和DD等伪指令。,格式2:变量名 伪指令名表达式DUP(表达式)用于定义重复的数据或分配一数据块空间例:D_B1DB 20H DUP(?);保留20H个字节 D_B2 DB 10H DUP(ABCD);字符串ABCD;重复10H次 D

14、_W1 DW 10H DUP(4);字4重复10H次,3、段定义语句段开始语句SEGMENT和段结束语句ENDS段定义格式:段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS定位类型:用来规定段起始边界的要求,可以为以下四种,缺省为 PARA)PAGE:16位段地址的最低8位必须为0,即从一页的起点开始;PARA:16位段地址的最低4位必须为0,即从一段的起点开始;WORD:16位段地址的最低1位必须为0,即从偶地址开始;BYTE:16位段地址可以为任意值,即段可以从任何字节开始。,组合类型 告诉连接程序本段与其他段的关系 NONE 本段与其他段逻辑上不发生关系,每段有独立段基地址

15、;PUBLIC 将本段与用PUBLIC说明的同名同类别的其他段连接成一个段,所有这些段用同一个段基地址;COMMON 同名同类段相重叠,段的长度为其中最长段的长度 STACK 表示本段是堆栈段,连接方式同PUBLIC MEMORY 该段在连接时被放在所有段的最后 AT 把本段装在表达式的值所指定的段基地址处类别,段分配语句ASSUME,CPU对存储器的访问必须通过一个段寄存器来提供段基址,ASSUME用来建立段与段寄存器之间的联系。格式:ASSUME 段寄存器名:段名,段寄存器名:段名DATA SEGMENT DATA ENDSSTACK SEGMENT STACKSTACK ENDSCODE

16、 SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK CODE ENDSEND,DATA1 SEGMENT VAR1 DB 12HDATA1 ENDSDATA2 SEGMENT VAR2 DB 34HDATA2 ENDSCODE SEGMENT VAR3 DB 56H ASSUME CS:CODE,DS:DATA1 START:INC VAR1 INC VAR2 INC VAR3 CODE ENDS END START,例:,4、过程定义语句 在程序设计中,常将多次重复使用的具有一定功能的程序段组成一个子程序,称为过程,可用CALL调用,RET返回。定义格式:过程名

17、 PROC NEAR/FAR 过程名 ENDP NEAR过程只允许段内调用,FAR允许段间调用,5.宏指令宏定义语句格式:宏指令名 MACRO 形式参数1,形式参数2 ENDM宏调用:宏指令名 实参数,实参数,,SHIFT MACRO X MOV CL,X SAL AL,CL ENDM,SHIFT 6,宏扩展:+MOV CL,6+SAL AL,CL,5.4 汇编语言程序的上机过程,汇编语言程序上机运行的过程有以下几个步骤:(1)用编辑程序建立.ASM源文件;(2)用宏汇编程序MASM等汇编源文件,生成.OBJ目标码文件;(3)用连接程序LINK对目标码文件等模块进行连接,生成.EXE可执行文件

18、;(4)键入可执行文件名执行该文件,分析执行结果;(5)用DEBUG等工具调试.ASM源程序,再汇编、连接、运行,直到得出正确结果。为此,除了DOS系统软件和编辑程序外,还需要备置如下程序:汇编程序 masm.exe或asm.exe或tasm.exe等连接程序 link.exe或tlink.exe等汇编调试程序 等交叉引用程序 cref.exe符号索引文件处理程序等,1、建立源文件可使用任何一种能建立ASCII文本文件的编辑程序来建立汇编源程序文件,扩展名为.ASM。在使用各种文字编辑程序时,被编辑的源文件(.ASM)中不应有排版格式控制符。,2、汇编编辑生成的.ASM源程序文件,须经汇编程序

19、进行汇编,生成二进制代码的目标文件。常见的汇编程序有行汇编和宏汇编两种类型。行汇编常用DEBUG.EXE的A命令,生成的目标代码可作为.COM文件存盘,也可在DEBUG环境下直接运行。行汇编简单直观,生成的目标程序所占用的内存空间最小;但汇编按绝对地址进行,长度限制在64KB范围内,目标程序没有与其它程序模块连接的信息,要由用户或安装程序实现各个目标程序在内存中的地址分配,这样既可能使各程序之间产生太大的空隙(造成浪费)、也可能造成各程序的内存存储冲突。宏汇编MASM对汇编语言源程序*.ASM进行汇编常用方法。,DEBUG的使用方法,1DEBUG的运行2DEBUG的主要命令D,显示内存单元内容

20、;U,反汇编命令;R,显示与修改寄存器内容;E,修改内存单元内容;A,汇编命令;T、P,单步执行指令;G,连续执行指令;N,指定装入文件名或写入文件名;L,装入N指定的文件;W,将指定内容写入N指定的文件;Q,退出DEBUG程序,返回操作系统状态。,5.3 ROM BIOS中断调用和DOS系统功能调用,5.3.1 ROM BIOS中断调用,BIOS(Basic Input Output System)基本输入输出系统,是一组固化到计算机内主板ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,提供最低级、最直接的硬件控制,是硬件与软件之间

21、的接口。,BIOS的功能:系统自检及初始化 对硬件设备进行自检;对外部设备初始化;设置中断向量;引导操作系统等;程序服务处理 为操作系统和应用程序提供与I/O有关的系统服务。BIOS直接与I/O设备打交道,通过端口与I/O设备传送数据,使应用程序脱离具体的硬件操作。硬件中断处理 提供硬件中断服务程序,BIOS的服务功能是通过调用中断服务程序来实现的,中断:CPU执行程序的过程中,由于出现了某个事件,CPU暂停当前程序,转而去执行其他程序,处理完后,返回被暂停的程序继续执行,这个过程称为中断,引起中断的事件称为中断源。处理该事件的程序称中断服务程序。中断号:8086系统允许256种中断,每种中断

22、对应0255之间的一个数,称为中断号。每种中断都对应于一种中断服务,在实模式下,将中断服务程序的入口地址称为中断向量,存放256个中断向量的内存区域称为中断向量表,BIOS中断调用:BIOS由许多功能模块组成,每个功能模块的入口地址都在中断向量表中。通过软件中断指令“INT n”可以直接调用这些模块。CPU响应中断后,把控制权交给指定的BIOS功能模块,由它提供相应的服务。基本方法:将所要调用功能的功能号送入AH寄存器;根据所要调用功能的规定设置入口参数;执行“INT 中断号”指令,进入相应的服务子程序;中断服务子程序执行完毕后,可按规定取得出口参数。,1.INT 10H 显示输出INT 10

23、H包含了与显示器有关的功能,可以用来设置显示方式、光标大小和位置、显示字符等。AH=0AH,显示字符入口参数;AL=预显示字符的ASCII码功能:在当前光标位置显示AL中的字符,光标位置不变AH=0EH,显示字符功能:类似0AH功能,但显示字符后光标随之移动,并可解释回车、换行和退格等控制符,2.INT 16H 键盘输入AH=0,从键盘读一键出口参数:AL=ASCII码,AH=扫描码功能:从键盘读入一个键返回,按键不显示在屏幕上。对于无相应ASCII码的键,如功能键等,AL返回0AH=1,判断是否有键可读出口参数:若ZF=0,则有键可读,AL=ASCII码,AH=扫描码;否则,无键可读;AH=

24、2,返回变换键的当前状态出口参数:AL=变换键状态变换键指Ctrl,Alt,Num lock等;,例:读键盘输入,显示其中的ASCII字符,按回车键退出。CODE SEGMENTSTART:READNEXT:MOV AH,0 INT 16H CMP AL,ODH JE EXIT CMP AL,0 JZ READNEXT EXIT:MOV AH,4CH MOV AH,0EH INT 21H INT 10H CODE ENDS JMP READNEXT END START,5.3.2 DOS功能调用,前面一些程序的运行结果,或是保留在寄存器中,或是保留在存储器中,不能方便直观的看到。要了解运算的结

25、果,应在显示器上输出,方便的方法是调用操作系统中的I/O子程序,操作系统的核心是许多有关I/O驱动,磁盘读写以及文件管理等子程序。这些子程序都编了号,调用时把子程序号(或称系统功能调用号)送到INT 21H。通常按照如下4个步骤进行:在AH寄存器中设置系统功能调用号 在指定寄存器中设置入口参数 执行指令INT 21H 实现中断服务程序的功能调用 根据出口参数分析功能调用执行情况,1、键盘输入字符调用格式:MOV AH,01H INT 21H功能:等待从键盘输入一个字符并将输入字符的ASCII码送入寄存器AL中,同时在显示器上显示该字符。入口参数:无出口参数:AL=输入的ASCII码字符2、控制

26、台输入调用格式:MOV AH,08H INT 21H功能:与1号相似,但只从键盘上输入而不显示字符。入口参数:无出口参数:AL=输入的ASCII码字符,DOS功能调用,3.向显示器输出一个字符(2号功能调用)功能号:AH02H入口参数:DL字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出例:在当前显示器光标位置显示一个问号 mov ah,02h;设置功能号:ah02h mov dl,?;提供入口参数:dl?int 21h;DOS功能调用:显示,DOS功能调用,4.显示字符串(9号功能调用)功能号:AH09H入口参数:

27、DS:DX欲显示字符串在主存中的首地址字符串应以$(24H)结束功能:在显示器输出指定的字符串string db Hello,Everybody!,0dh,0ah,$mov ah,09hmov dx,offset stringint 21h,DOS功能调用,5.从键盘输入一个字符串(10号功能调用)功能号:AH0AH入口参数:DS:DX缓冲区首地址执行该功能调用时,用户按键,最后用回车确认缓冲区的定义:第1字节事先填入最多欲接收的字符个数(包括回车字符,可以是1255)第2字节将存放实际输入的字符个数(不包括回车符)第3字节开始存放将输入的字符串实际输入的字符数多于定义数时,多出的字符丢掉,且

28、响铃,DOS功能调用,例:Buffer db 81;定义缓冲区;第1个字节填入可能输入的最大字符数db 0;存放实际输入的字符数db 81 dup(0);存放输入的字符串.mov dx,seg buffer;伪指令seg取得buffer的段地址mov ds,dx;设置数据段DSmov dx,offset buffermov ah,0ahint 21h,4.文件管理系统调用:AH(功能号)功能 入口参数 出口参数 3C 建立文件 DS:DX=ASCII串地址 成功 AX=文件代号 CX=文件属性 失败 AX=错误码 3D 打开文件 DS:DX=ASCII串地址 成功 AX=文件代号 AL=0读,

29、=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 错误AX=错误码,DOS功能调用,例:写数据文件,步骤:输入文件名,建立文件,写文件,关闭文件。Datasegment;数据段mesgndb16 dup(?);文件名字符

30、区dataregdb2048dup(?);数据区DataendsCodesegment;代码段leasi,mesgn;文件名字符区的偏移地址Rep1:movah,1;键入文件名int21hcmpal,0dh;判断是否是回车键jenext1;是,转next1;否继续输入,DOS功能调用,DOS功能调用,movsi,al;文件名字符送入incsijmprep1Next1:leadx,mesgn;文件名区的偏移地址movcx,0;文件属性为0movah,3ch;建立文件int21hmovbx,ax;文件代号送bxleadx,dataregmovcx,2048;写入的字节数movah,40h;写文件i

31、nt21hmovah,3eh;关闭文件int21hCsegendsend,例:读数据文件 Msegsegment;数据段 mesgn db 16dup(?)errmesg db“File not found$”datareg db 2048dup(?)Csegsegment;代码段 leasi,mesgnbeg:movah,1;键入文件名 int21h cmpal,0dh jenext1 movsi,al incsi jmp begNext1:leadx,mesgn moval,0 movah,3dh;打开文件,int21h cmpal,2;2为文件未找到jneready;不等于2,转 leadx,errmesgmovah,9;显示字符串int21hcrlf;回车换行宏指令jmpbegReady:leadx,dataregmovcx,2048mov bx,ax;ax中为文件代号movah,3fh;读文件int21hmovah,3eh;关闭文件int21h,DOS功能调用,DOS功能调用,4.程序结束,返回DOSMOV AH,4CHINT 21H,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号