汇编语言语法和DOS功能调用课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《汇编语言语法和DOS功能调用课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 语法 DOS 功能 调用 课件
- 资源描述:
-
1、第第4章章 汇编语言语法和汇编语言语法和DOS功能调用功能调用4.14.1汇编语言源程序汇编语言源程序 1.1.机器语言机器语言用二进制数来表示指令和数据用二进制数来表示指令和数据.例如:例如:B0 64B0 64 2.2.汇编语言汇编语言用助记符用助记符,符号地址以及标号等符号书写的符号地址以及标号等符号书写的程序。程序。例如:例如:MOV ALMOV AL,64H64H ;用汇编语言编写的程序叫用汇编语言编写的程序叫源程序源程序。3.3.高级语言高级语言接近自然语言、习惯的教学语言来描述具接近自然语言、习惯的教学语言来描述具体的算法。体的算法。三种语言的比较三种语言的比较为什么还要学习和使
2、用汇编语言呢?为什么还要学习和使用汇编语言呢?主要有三点原因:主要有三点原因:1)1)程序设计人员能更充分地利用机器硬件的全部功能,发程序设计人员能更充分地利用机器硬件的全部功能,发挥机器长处。挥机器长处。2)2)底层的一些功能仍然靠汇编语言程序来实现。底层的一些功能仍然靠汇编语言程序来实现。3)汇编语言程序比高级语言程序的目标代码短且运行速度汇编语言程序比高级语言程序的目标代码短且运行速度快。在要求节省内存空间和提高程序运行速度的重要场快。在要求节省内存空间和提高程序运行速度的重要场合(如实时控制等)常用汇编语言来编制。合(如实时控制等)常用汇编语言来编制。用汇编语言编写的程序不用汇编语言编
3、写的程序不能由机器直接执行,而必能由机器直接执行,而必须经汇编程序翻译成机器须经汇编程序翻译成机器语言程序。汇编语言指令语言程序。汇编语言指令与翻译成的机器语言指令与翻译成的机器语言指令之间基本是一一对应的关之间基本是一一对应的关系。系。汇编过程示意:汇编过程示意:汇编语言程序的建立及汇编过程汇编语言程序的建立及汇编过程编辑程序Prog.asm文件汇编程序Prog.obj文件连接程序Prog.exe文件Edit.exeMasm.exeLink.exe汇编示意图汇编示意图调用 MASM.EXE.ASM汇编.OBJ.LST.CRF可选4.1 4.1 汇编语言程序格式汇编语言程序格式 示例程序示例程
4、序DATA SEGMENT ;数据段 NUM DW 0011101000000111B NOTES DB The result is:,$DATA ENDSCODE SEGMENT ;代码段 ASSUME 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
5、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,4C00H;返回DOS JLE DISPLAY INT 21H ADD AL,07H ;在AF之间 CODE ENDS ;代码段结束 END BEGIN ;模块结束堆栈段定义格式堆栈段定义格式STACK SEGMENT STACK STA DB 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENT ASSUM
6、E CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,TOP :CODE ENDS END START 汇编语言程序的格式可以归结为以下几点:汇编语言程序的格式可以归结为以下几点:(1 1)段的结构段的结构 段名段名1 SEGMENT1 SEGMENT 语句语句1 1 语句语句i i 段名段名1 1ENDSENDS 段名段名2 SEGMENT2 SEGMENT 语句语句1 1 语句语句j j 段名段名2 2ENDSENDS 段名段名n SEGMENTn SEGMENT 语句语句1
7、1 语句语句k k段名段名n n ENDS ENDS END END 标号标号(2 2)语句的结构)语句的结构 3 3种基本语句类型:种基本语句类型:指令语句指令语句 伪指令语句伪指令语句 宏指令语句宏指令语句指令语句格式指令语句格式 标号:标号:指令助记符指令助记符操作数操作数;注释;注释标号字段标号字段:是一个任选字段,性质为符号便移量,一般用于标记跳转指令的是一个任选字段,性质为符号便移量,一般用于标记跳转指令的目的地址在汇编过程中标号会被替换为一个位的数值偏移量标号必目的地址在汇编过程中标号会被替换为一个位的数值偏移量标号必须位于语句开头,结尾必须使用冒号。须位于语句开头,结尾必须使用
8、冒号。指令助记符和操作数:指令助记符和操作数:这两个字段组成汇编指令本身,指令助记符是必不可这两个字段组成汇编指令本身,指令助记符是必不可少的,操作数则根据指令助记符来确定在汇编过程中,也只有这两个字段少的,操作数则根据指令助记符来确定在汇编过程中,也只有这两个字段会被替换为确定的机器指令代码会被替换为确定的机器指令代码。注释字段:注释字段:是一个任选字段,用于说明程序片段或指令的功能,汇编过程中是一个任选字段,用于说明程序片段或指令的功能,汇编过程中不处理这样的字段,它只是用于提高源程序的可读性注释必须使用分号作不处理这样的字段,它只是用于提高源程序的可读性注释必须使用分号作为开始。为开始。
9、例子:教材138 例1 伪指令语句格式伪指令语句格式伪指令语句伪指令语句:这种语句用于指示汇编程序(翻译程序)如何:这种语句用于指示汇编程序(翻译程序)如何汇编源程序和指令语句不同,汇编程序处理它时不会产生汇编源程序和指令语句不同,汇编程序处理它时不会产生机器指令代码,只对伪指令提出的要求进行解释并立即完成机器指令代码,只对伪指令提出的要求进行解释并立即完成要求的操作要求的操作伪指令的功能伪指令的功能大致有分配存储单元、计算表达式、定义常量大致有分配存储单元、计算表达式、定义常量等等。等等。4.2 4.2 汇编语言中的基本数据汇编语言中的基本数据1 1、标识符、标识符标识符标识符-由程序员自由
10、建立起来的,有特定意义的字符序列。由程序员自由建立起来的,有特定意义的字符序列。标识符的组成规则如下:标识符的组成规则如下:必须由字母、数字(必须由字母、数字(0 0,9 9)及特殊符号(?,)及特殊符号(?,)组成,且必须以字母打头。,)组成,且必须以字母打头。字符总数限制在字符总数限制在3131个以内。个以内。不能使用属于系统专用保留字(保留的字)。不能使用属于系统专用保留字(保留的字)。2 2、常数、常数 常数常数-语句中出现的那些固定值,除了自身的值以外,语句中出现的那些固定值,除了自身的值以外,没有其它任何属性。没有其它任何属性。常数分为两类常数分为两类 (1 1)数值常数)数值常数
11、 (2 2)字符串常数)字符串常数(1 1)数值常数)数值常数(2 2)字符串常数)字符串常数 字符串常数是用字符串常数是用单引号单引号引起来的一个或多个字符。字符引起来的一个或多个字符。字符串常数是以各字符的串常数是以各字符的ASCASC码表示的。如码表示的。如AA用用41H 41H 表示,表示,字符串字符串A1B2A1B2用用41H41H,41H41H,42H42H,42H42H表示。表示。3 3、变量、变量变量变量-存放在存储器单元中的操作数,它的值是可以改变存放在存储器单元中的操作数,它的值是可以改变 的,在 程 序 中 出 现 的 是的,在 程 序 中 出 现 的 是 存 储 器 单
12、 元 地 址 的 符 号存 储 器 单 元 地 址 的 符 号,即,即 与某一数据项第一字节相对应的标识符。与某一数据项第一字节相对应的标识符。变量的变量的3 3个属性:个属性:段地址:变量所在段的段地址;段地址:变量所在段的段地址;偏移地址:变量所在段内的偏移地址;偏移地址:变量所在段内的偏移地址;类型:所定义的每个变量所占据的字节数。类型:所定义的每个变量所占据的字节数。4 4、标号、标号标号标号-可执行指令语句可执行指令语句地址的符号表示地址的符号表示,即用标识符来表示地址。,即用标识符来表示地址。标号的标号的3 3个属性:个属性:段地址:与标号对应的指令首字节所在的段地址。段地址:与标
13、号对应的指令首字节所在的段地址。偏移地址:与标号对应的指令首字节所在的偏移地址。偏移地址:与标号对应的指令首字节所在的偏移地址。类型:标号的类型属性有两种:类型:标号的类型属性有两种:NEARNEAR和和FARFAR类型。类型。1 1、数据定义伪指令语句、数据定义伪指令语句共有五条:共有五条:DBDB、DWDW、DDDD、DQDQ和和DTDT,分别用来定义字节、字、,分别用来定义字节、字、双字、双字、8 8字节和字节和1010字节。字节。指令格式:指令格式:变量名变量名 助记符助记符 操作数操作数1 1,操作数操作数2 2,操作数操作数n n;注释;注释变量名变量名 助记符助记符 n n DU
14、PDUP(操作数(操作数1 1,操作数,操作数2 2,操作数操作数n n);注释注释 注注:操作数可以是常数或表达式操作数可以是常数或表达式,变量名变量名,注释可有可无。注释可有可无。例例4.2 4.2 操作数是常数、表达操作数是常数、表达式、字符串数据的定义式、字符串数据的定义 DATA1 DB 10H DATA1 DB 10H,52H52H DATA2 DW 1122H DATA2 DW 1122H,34H34H DATA3 DATA3 DD 5DD 5*20H20H,0FFEEH0FFEEH DATA4 DB HELLO DATA4 DB HELLO例例4.3 4.3 操作数用操作数用“
15、?”定义不确定值的定义不确定值的变量,用变量,用DUPDUP来定义重复变量,不确定来定义重复变量,不确定值的变量一般用作保留存储空间,以值的变量一般用作保留存储空间,以便存放运算结果。便存放运算结果。DATA1 DB DATA1 DB?DATA2 DW 0D55H DATA2 DW 0D55H,?DATA3 DATA3 DB 5 DUPDB 5 DUP(0 0)DATA4 DW 10 DUPDATA4 DW 10 DUP(?)(?)DATA5 DATA5 DB 4 DUPDB 4 DUP(1 1,2 DUP2 DUP(2020)例例4 4.4 .4 BUFFER DW 3,4,$+3BUFFE
16、R DW 3,4,$+3设设BUFFERBUFFER的偏移地址为的偏移地址为0088H,0088H,则汇编后如下图所示:则汇编后如下图所示:2 2、标识符赋值与解除伪指令语句、标识符赋值与解除伪指令语句共有共有4 4条:等值伪指令语句条:等值伪指令语句EQUEQU 等号伪指令语句等号伪指令语句“=”“=”解除伪指令语句解除伪指令语句PURGEPURGE 别名定义伪指令语句别名定义伪指令语句LABELLABEL(1 1)等值伪指令)等值伪指令EQUEQU语句语句 指令格式:指令格式:标识符标识符 EQU EQU 操作数操作数 例例4.54.5 DATA EQU 100DATA EQU 100 D
17、ATA1 EQU DATADATA1 EQU DATA2 2 CI CI EQU ADD EQU ADD(2 2)等号伪指令语句)等号伪指令语句“=”“=”指令格式:指令格式:标识符标识符=操作数操作数 例例4.64.6 DATA=100 DATA=100 DATA1=DATA+10 DATA1=DATA+10 SOURCE=BX SOURCE=BXSISI MOV AX MOV AX,SOURCESOURCE SOURCE=BX SOURCE=BX MOV CX MOV CX,SOURCESOURCE 注:注:“”允许重复定义,而允许重复定义,而 EQU EQU一经定义不再重新定义。一经定义
18、不再重新定义。(3 3)解除伪指令语句)解除伪指令语句PURGEPURGE指令格式:指令格式:PURGE PURGE 标识符标识符1 1,标识符,标识符2 2,标识符标识符n n(4 4)别名定义伪指令语句)别名定义伪指令语句 格式:别名格式:别名 LABEL LABEL 类型属性类型属性 LABELLABEL:伪指令助记符,不可缺省。:伪指令助记符,不可缺省。例例4.7 4.7 定义变量的别名定义变量的别名 DATAB LABEL BYTE DATAB LABEL BYTE DATAW DW 1234H DATAW DW 1234H,5678H5678H DISF LABEL FAR DIS
19、F LABEL FAR DISN:MOV AX DISN:MOV AX,SI SI 3 3、段定义伪指令语句段定义伪指令语句 因因8086/8088 CPU8086/8088 CPU的存储器是分段的的存储器是分段的,这就需要有段定语这就需要有段定语句。句。与段有关的伪指令有:与段有关的伪指令有:SEGMENTSEGMENT、ENDSENDS和和ASSUMEASSUME,含义,含义分分别是别是段开始段开始、段结束段结束、指定段寄存器指定段寄存器。(1 1)段结构定义伪指令段结构定义伪指令 格式:格式:段名段名 SEGMENTSEGMENT定位类型组合类型定位类型组合类型类别类别 段名段名 END
20、S ENDS 从段名代表的段基值开始定义一个段。其中的定位类型、从段名代表的段基值开始定义一个段。其中的定位类型、组合类型和组合类型和类别类别一般都可省略,若不省略时各项的一般都可省略,若不省略时各项的顺序不能变。顺序不能变。定位类型:定位类型:连接时用于指定该段应开始于什么样的物理地址。可选连接时用于指定该段应开始于什么样的物理地址。可选择下列择下列4 4种之一:种之一:BYTE BYTE:从当前可用的字节地址从当前可用的字节地址XXXX XXXX XXXX XXXX XXXX(XXXX XXXX XXXX XXXX XXXX(任一地任一地址址)开始;开始;WORDWORD:从当前可用的字地
21、址从当前可用的字地址XXXX XXXX XXXX XXXX XXX0(XXXX XXXX XXXX XXXX XXX0(偶数地址偶数地址)开始;开始;PARAPARA(缺省缺省):从当前可用的节地址从当前可用的节地址XXXX XXXX XXXX XXXX 0000(16XXXX XXXX XXXX XXXX 0000(16的倍数的倍数)开始;开始;PAGEPAGE:从当前可用的页地址从当前可用的页地址XXXX XXXX XXXX 0000 0000(256XXXX XXXX XXXX 0000 0000(256的倍的倍数数)开始。开始。其中,其中,1 1节(节(paragraph)paragr
22、aph)为为1616字节,字节,1 1页为页为1616节即节即256256字节字节。组合类型:组合类型:连接时用于指定同名的各段之间的组合方式。可连接时用于指定同名的各段之间的组合方式。可选择下列选择下列6 6种之一:种之一:PUBLICPUBLIC STACKSTACK COMMONCOMMON MEMORYMEMORY ATAT表达式表达式 NONE(NONE(缺省缺省)若省略组合类型或说明为若省略组合类型或说明为NONENONE类型,则表示各个段不组合,各有类型,则表示各个段不组合,各有自己的段基值。自己的段基值。对堆栈段,必须用对堆栈段,必须用STACKSTACK类型说明,不能省略。类
23、型说明,不能省略。类别类别:是要将组合后的各段按是要将组合后的各段按类别类别分类存放,同分类存放,同类别的段类别的段将被相邻地放在一起。将被相邻地放在一起。类别类别是由用户定义的、用一对引号括起是由用户定义的、用一对引号括起来的来的长度不超过长度不超过4040个字符的名字个字符的名字(标识符标识符)。SEGMENTSEGMENT和和ENDSENDS这两个伪指令总是成对出现,二者前这两个伪指令总是成对出现,二者前面的段名一致。二者之间的删节部分,对数据段、附加段面的段名一致。二者之间的删节部分,对数据段、附加段及堆栈段,一般是符号、变量定义等伪指令。对于代码段及堆栈段,一般是符号、变量定义等伪指
24、令。对于代码段则是指令及伪指令。则是指令及伪指令。此外,还必须明确段和段寄存器的关系,这可由此外,还必须明确段和段寄存器的关系,这可由ASSUMEASSUME语句来实现。语句来实现。(2)(2)段分配伪指令段分配伪指令ASSUMEASSUME 该语句必须出现在有关的变量及标号使用之前,该语句必须出现在有关的变量及标号使用之前,定义当定义当前有效的前有效的4 4个逻辑段个逻辑段,用于指定程序中所定义的段与各段寄存,用于指定程序中所定义的段与各段寄存器之间的对应关系,指示汇编程序在汇编过程中如何确定指器之间的对应关系,指示汇编程序在汇编过程中如何确定指令隐含使用的段寄存器。指定某段令隐含使用的段寄
25、存器。指定某段(用段名标识用段名标识)中的变量、中的变量、标号等数据项由哪个段寄存器寻址。标号等数据项由哪个段寄存器寻址。ASSUMEASSUME语句是伪指令,它不能给段寄存器传送段基值,只语句是伪指令,它不能给段寄存器传送段基值,只能指定段与段寄存器之间的对应关系能指定段与段寄存器之间的对应关系。该伪指令的作用时间。该伪指令的作用时间也是在汇编阶段,不是在程序的执行阶段。也是在汇编阶段,不是在程序的执行阶段。在程序设计中,一般在程序设计中,一般ASSUMEASSUME语句在代码段中位于所有指语句在代码段中位于所有指令语句之前。令语句之前。注意注意:把段基值装入段寄存器这一个过程是在程序执行阶
展开阅读全文