汇编语言语法和DOS功能调用课件.ppt

上传人(卖家):晟晟文业 文档编号:4068726 上传时间:2022-11-08 格式:PPT 页数:71 大小:275.21KB
下载 相关 举报
汇编语言语法和DOS功能调用课件.ppt_第1页
第1页 / 共71页
汇编语言语法和DOS功能调用课件.ppt_第2页
第2页 / 共71页
汇编语言语法和DOS功能调用课件.ppt_第3页
第3页 / 共71页
汇编语言语法和DOS功能调用课件.ppt_第4页
第4页 / 共71页
汇编语言语法和DOS功能调用课件.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

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语句在代码段中位于所有指语句在代码段中位于所有指令语句之前。令语句之前。注意注意:把段基值装入段寄存器这一个过程是在程序执行阶

26、:把段基值装入段寄存器这一个过程是在程序执行阶段完成的。段完成的。即便程序中使用了即便程序中使用了ASSUMEASSUME语句,如果在程序执语句,如果在程序执行阶段各段寄存器没有装入正确的段基值,那么仍然不能行阶段各段寄存器没有装入正确的段基值,那么仍然不能正确的访问内存中的数据。正确的访问内存中的数据。段寄存器的装入段寄存器的装入 (1 1)CSCS段寄存器的装入段寄存器的装入 CSCS段寄存器和段寄存器和IPIP指令指针的初始化是由操作系统来完成指令指针的初始化是由操作系统来完成的。当用户向操作系统提交一个程序时,操作系统会自动把的。当用户向操作系统提交一个程序时,操作系统会自动把程序中第

27、一条指令的逻辑地址装入到程序中第一条指令的逻辑地址装入到CSCS和和IPIP中。在这之后,中。在这之后,CPUCPU就会从这条指令开始执行,并且不断修改就会从这条指令开始执行,并且不断修改IPIP中的内容使中的内容使它指向下一条指令。它指向下一条指令。(2 2)DSDS、ES ES、SSSS段寄存器的装入段寄存器的装入 和和CSCS段寄存器的装入方式不同,段寄存器的装入方式不同,DSDS、ESES的段基值装入必的段基值装入必须由程序员使用须由程序员使用MOVMOV指令在自己的程序中来完成。指令在自己的程序中来完成。例子见教材例子见教材P138P138,注意例子,注意例子4 41 1中的中的AS

28、SUMEASSUME语句。语句。对对DSDS、ESES段寄存器的初始化指令一般在代码段的最开段寄存器的初始化指令一般在代码段的最开始始,因为以后的指令可能会频繁的访问数据段或附加段的数,因为以后的指令可能会频繁的访问数据段或附加段的数据,只有先保证段寄存器中的段基值正确,后面的数据操作据,只有先保证段寄存器中的段基值正确,后面的数据操作才是正确的。才是正确的。但真正把段地址装入段寄存器(称为段初始化)的操但真正把段地址装入段寄存器(称为段初始化)的操作需要由程序员自己完成作需要由程序员自己完成4 4、过程定义伪指令语句过程定义伪指令语句 在在MASMMASM中,过程的含义和子程序是一样的,一个

29、过中,过程的含义和子程序是一样的,一个过程可以被其它程序所调用,这个过程的最后一条指令,程可以被其它程序所调用,这个过程的最后一条指令,一般是返回指令。一般是返回指令。过程定义伪指令的格式为:过程定义伪指令的格式为:过程名过程名 PROCPROC NEARNEAR/FAR/FAR RETRET 过程名过程名 ENDPENDP调用一个过程的格式为:调用一个过程的格式为:CALL CALL 过程名过程名例如,有两个程序段,其结构如下:例如,有两个程序段,其结构如下:CODE1 SEGMENT ASSUME CS:CODE1 FARPROC PROC FAR RET FARPROC ENDP COD

30、E1 ENDS CODE2 SEGMENT ASSUMECS:CODE2 CALL FARPROC CALL NEARP NEARP PROC NEAR RET NEARP ENDP CODE2 ENDS 5 5、定位伪指令定位伪指令 伪指令伪指令ORGORG规定了段内的起始地址或偏移地址,其格式为:规定了段内的起始地址或偏移地址,其格式为:ORGORG 表达式的值即为段内的起始地址或偏移地址,从此地址起连续存放程表达式的值即为段内的起始地址或偏移地址,从此地址起连续存放程序或数据。序或数据。例例4.8 4.8 用用ORGORG指定数据段和代码段地址。指定数据段和代码段地址。DATA SEGM

31、ENT DATA SEGMENT X1 DW 20H X1 DW 20H,60H60H,ORG 100HORG 100H X2 DB 10H X2 DB 10H,20H20H,30H30H ORG 200HORG 200H X3 DW 1234H X3 DW 1234H,4321H 4321H DATA ENDS DATA ENDSCODE SEGMENTCODE SEGMENT ORG 100H ORG 100H ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATA START START:MOV AX MOV AX,DATADATA CODE ENDS CO

32、DE ENDS4.4 4.4 汇编语言的表达式汇编语言的表达式 表达式由运算对象和运算符组成。在汇编的时候由汇编程序对它进表达式由运算对象和运算符组成。在汇编的时候由汇编程序对它进行运算,其运算结果作为语句中的行运算,其运算结果作为语句中的操作数操作数来使用。来使用。运运算算对象可以是常数、变量和标号,运算结果可以是常数,也可以对象可以是常数、变量和标号,运算结果可以是常数,也可以是存储器的地址,若该地址中存放的是数据则称它为变量,若该地址中是存储器的地址,若该地址中存放的是数据则称它为变量,若该地址中存放的是指令则称它为标号存放的是指令则称它为标号。下面介绍五种运算符下面介绍五种运算符:算术

33、运算符算术运算符 逻辑运算符逻辑运算符 关系运算符关系运算符 分析运算符分析运算符 修改属性运算符修改属性运算符 、算术运算符、算术运算符算术运算符有:加()、减()、乘(算术运算符有:加()、减()、乘(*)、除()、)、除()、取模运算(取模运算(MODMOD)、左移()、左移(SHLSHL)和右移)和右移(SHRSHR)。)。取模运算是取两数相除的取模运算是取两数相除的余数余数,对象必须为对象必须为正整数正整数。例如例如:92 MOD 16 92 MOD 16 结果为结果为1212(相当于取低(相当于取低4 4位的值)位的值)97H MOD 20H 97H MOD 20H 结果为结果为2

34、323(相当于取低(相当于取低5 5位的值)位的值)33H MOD 7 33H MOD 7 结果为结果为2 2例例4.15 4.15 包含乘法和减法算术运算符的表达式包含乘法和减法算术运算符的表达式 DATA SEGMENT DATA SEGMENT ARRAY ARRAY DB 1,2,3,4,5,6DB 1,2,3,4,5,6 TRY TRY DB DB 20 20 DATA ENDS DATA ENDS CODE SEGMENT CODE SEGMENT MOV MOVBX,BX,3030*5 5 MOV MOVCX,CX,(TRY-ARRAY)(TRY-ARRAY)CODE ENDS

35、CODE ENDS 例例4.16 4.16 源程序包含除法、减法、模运算和移位运算的表达式源程序包含除法、减法、模运算和移位运算的表达式DATA SEGMENTDATA SEGMENTKA KA EQU EQU800800DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT MOVMOVBX,BX,KA-80KA-80 MOVMOVAX,AX,KA MOD 100KA MOD 100 MOVMOVCX,CX,KA/100KA/100 MOVMOVDH,DH,01100100B SHR 201100100B SHR 2 CODE ENDSCODE ENDS2 2、

36、逻辑运算符、逻辑运算符逻辑运算符有:与(逻辑运算符有:与(ANDAND)、或()、或(OROR)、非()、非(NOTNOT)和异或)和异或(XORXOR)例例 4.17 AND 4.17 AND、OROR、NOTNOT、XORXOR逻辑运算的表达式逻辑运算的表达式 DATA SEGMENTDATA SEGMENT PORT EQU PORT EQU 81H81H DATA ENDSDATA ENDS CODE SEGMENTCODE SEGMENT MOV AL MOV AL,NOT 0FFHNOT 0FFH MOV BL MOV BL,8CH AND 73H8CH AND 73H MOV A

37、HMOV AH,8CH OR 73H8CH OR 73H MOV CH MOV CH,8CH XOR 73H8CH XOR 73H CODE ENDSCODE ENDS3 3、关系运算符、关系运算符 共有共有6个个,它们为:它们为:EQ(相等相等),NE(不等不等),LT(小于小于),GT(大于大于),LE(小于或等于小于或等于),GE(大于或等于大于或等于)注注:1 1)关系运算符的两个操作数必须是数字或者是同一段内的两个存储器地)关系运算符的两个操作数必须是数字或者是同一段内的两个存储器地址。址。2 2)关系为真)关系为真,对于字操作数而言,结果为对于字操作数而言,结果为0FFFFH0FF

38、FFH;关系为假关系为假,结果为结果为0 0 例:例:MOV BX,PORT_VAL GE 5 若若 PORT_VAL5,则汇编后为:则汇编后为:MOV BX,0FFFFH 若若 PORT_VAL5,则汇编后为:则汇编后为:MOV BX,0 例例4.18 4.18 用用OFFSETOFFSET返回标号或变量偏移地址值的表达式返回标号或变量偏移地址值的表达式DATA SEGMENTDATA SEGMENT DAT1 DB DAT1 DB 81H 81H DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT MOV SI MOV SI,OFFSET LAB1OFFS

39、ET LAB1 LAB1 LAB1:MOV BX MOV BX,OFFSET DAT1OFFSET DAT1 CODE ENDSCODE ENDS 4 4、分析运算符、分析运算符 分析运算符有:分析运算符有:OFFSETOFFSET、SEGSEG、TYPETYPE、LENGTHLENGTH、SIZESIZE (1 1)OFFSETOFFSET 格式:格式:OFFSET OFFSET 变量或标号变量或标号 功能:返回变量或标号的偏移地址部分。功能:返回变量或标号的偏移地址部分。(2 2)SEGSEG 格式:格式:SEG SEG 变量或标号变量或标号 功能:返回变量或标号所在段的段基值功能:返回变

40、量或标号所在段的段基值。(3 3)TYPETYPE 格式:格式:TYPE TYPE 变量或标号变量或标号 功能:功能:返回变量或标号的类型属性值。返回变量或标号的类型属性值。表表4-1 TYPE4-1 TYPE运算符返回值运算符返回值 例例 4.19 TYPE 4.19 TYPE加在变量和标号前的表达式加在变量和标号前的表达式DATA SEGMENTDATA SEGMENTAA1 DB 20HAA1 DB 20H,30H 30HAA2 DW 0438HAA2 DW 0438HAA3 DD AA3 DD?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTLL1L

41、L1:MOV AH MOV AH,TYPE AA1TYPE AA1 MOV BH MOV BH,TYPE AA2TYPE AA2 ADD AL ADD AL,TYPE AA3TYPE AA3 MOV BL MOV BL,TYPE LL1TYPE LL1CODE ENDS CODE ENDS(4 4)LENGTH LENGTH 格式:格式:LENGTH LENGTH 变量变量 功能:返回变量的长度,即以功能:返回变量的长度,即以DUP形式表示的第一组变量被重复设置的次形式表示的第一组变量被重复设置的次 数。数。例例 4.20 LENGTH 4.20 LENGTH加变量的表达式加变量的表达式 DA

42、TA SEGMENTDATA SEGMENT BB1 DW 100 DUP BB1 DW 100 DUP(?)(?)BB2 DW 1BB2 DW 1,2 2,3 3 BB3 DB A B C DBB3 DB A B C D DATA ENDSDATA ENDS CODE SEGMENTCODE SEGMENT MOV CX MOV CX,LENGTH BB1 LENGTH BB1 MOV BL MOV BL,LENGTH BB2 LENGTH BB2 MOV AL MOV AL,LENGTH BB3 LENGTH BB3 。CODE ENDSCODE ENDS(5)SIZE(5)SIZE 格式

43、:格式:SIZE SIZE 变量变量 功能:返回变量的大小,即功能:返回变量的大小,即TYPELENGTH的值。也就是说,的值。也就是说,SIZE=TYPESIZE=TYPELENGTHLENGTH 把例把例4.204.20中含有中含有LENGTHLENGTH表达式改为表达式改为SIZESIZE表达式,即:表达式,即:MOV CX MOV CX,SIZE BB1 SIZE BB1 MOV BL MOV BL,SIZE BB2 SIZE BB2 MOV AL MOV AL,SIZE BB3 SIZE BB3关于关于TYPETYPE、LENGTHLENGTH和和SIZESIZE的含义举例的含义举例

44、 对于对于“W1 DW 20 DUP(3,10 DUP(7)”“W1 DW 20 DUP(3,10 DUP(7)”,则,则TYPE W1=2TYPE W1=2,LENGTH W1=20LENGTH W1=20,SIZE W1=40SIZE W1=40;对于对于“W2 DW 8,20 DUP(3,10 DUP(7)”“W2 DW 8,20 DUP(3,10 DUP(7)”,则,则TYPE TYPE W2=2W2=2,LENGTH W2=1LENGTH W2=1,SIZE W2=2SIZE W2=2;对于对于“B1 DB 20 DUP(3,10 DUP(7)”“B1 DB 20 DUP(3,10

45、DUP(7)”,则,则TYPE B1=1TYPE B1=1,LENGTH B1=LENGTH B1=,SIZE B1=SIZE B1=;对于对于“B2 DB 8,20 DUP(3,10 DUP(7)”“B2 DB 8,20 DUP(3,10 DUP(7)”,则,则TYPE TYPE B2=B2=,LENGTH B2=LENGTH B2=,SIZE B2=SIZE B2=。5 5、修改属性运算符、修改属性运算符(综合运算符综合运算符)修改属性运算符有:段操作符、修改属性运算符有:段操作符、PTRPTR、THISTHIS、HIGHHIGH、LOWLOW、SHORT SHORT (1 1)段操作符段

46、操作符 格式:格式:段寄存器名段寄存器名:存储器操作数存储器操作数 功能:功能:临时指定存储器操作数的段归属。临时指定存储器操作数的段归属。例如,例如,“MOV AX,ES:“MOV AX,ES:BXBX”表示该存储单元的段基值表示该存储单元的段基值取自取自ESES,而不是隐含的,而不是隐含的DSDS。(2 2)PTR PTR 格式:格式:类型类型 PTR PTR 变量变量 距离距离 PTR PTR 标号标号 例如,指令例如,指令“MOV“MOVBXBX,5”,5”的含义是将常数的含义是将常数5 5送入存送入存储单元储单元BXBX中中 。该存储单元的偏移地址由。该存储单元的偏移地址由BXBX确

47、定,段基确定,段基值隐含为值隐含为DSDS。但汇编程序无法确定常数。但汇编程序无法确定常数5 5是字节还是字,也是字节还是字,也无法确定存储单元无法确定存储单元BXBX的内容是字节还是字,所以无法的内容是字节还是字,所以无法操作。操作。MOV BYTE PTR BX,5 MOV BYTE PTR BX,5例例 4.21 4.21 带带PTRPTR表达式的变量表达式的变量DATA SEGMENTDATA SEGMENTCC1 DB 16HCC1 DB 16H,36H36HCC2 DW 1122HCC2 DW 1122H,3344H3344HDATA ENDSDATA ENDSCODE SEGME

48、NTCODE SEGMENTLL1LL1:MOV MOV AXAX,WORD PTR CC1WORD PTR CC1 MOV BL MOV BL,BYTE PTR CC2BYTE PTR CC2 MOV BYTE PTR BX MOV BYTE PTR BX,10H 10H MOV WORD PTR BX MOV WORD PTR BX,10H 10H JMP JMP FAR PTR LL1 FAR PTR LL1 CODE ENDSCODE ENDS (3 3)THIS THIS 功能:功能:临时临时指定指定当前地址处变量或标号的类型。当前地址处变量或标号的类型。格式:格式:变量变量 EQU

49、 THIS EQU THIS 类型类型 标号标号 EQU THIS EQU THIS 距离距离 例如:例如:DATA1 EQU THIS BYTE DATA1 EQU THIS BYTE TABLE DW 200 DUP TABLE DW 200 DUP(?)(?)又如:又如:LL1 EQU THIS FARLL1 EQU THIS FAR MOV AX MOV AX,100100(4 4)SHORT SHORT 用来指出转移类指令中目的地址的属性,并规定要转的目的地址与本指令用来指出转移类指令中目的地址的属性,并规定要转的目的地址与本指令之间距离在之间距离在128128127127之间。之间

50、。格式:格式:SHORT SHORT 标号标号(5 5)HIGH HIGH和和 LOW LOW 它们称为字节分离运算符它们称为字节分离运算符 格式:格式:HIGH HIGH 变量或标号变量或标号 LOW LOW 变量或标号变量或标号例如,HIGH 1234H的操作结果为12H。LOW 1234H的操作结果为34H。例例4.22 4.22 带带HIGHHIGH和和 LOW LOW表达式的变量表达式的变量DATA SEGMENTDATA SEGMENTBB1 EQU 1234HBB1 EQU 1234HBB2 EQU 0A0B0HBB2 EQU 0A0B0HDATA ENDSDATA ENDSCO

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(汇编语言语法和DOS功能调用课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|