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

上传人:赵** 文档编号:82668244 上传时间:2023-03-26 格式:PPT 页数:71 大小:322KB
返回 下载 相关 举报
汇编语言语法和DOS功能调用.ppt_第1页
第1页 / 共71页
汇编语言语法和DOS功能调用.ppt_第2页
第2页 / 共71页
点击查看更多>>
资源描述

《汇编语言语法和DOS功能调用.ppt》由会员分享,可在线阅读,更多相关《汇编语言语法和DOS功能调用.ppt(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第4章章 汇编语言语法和汇编语言语法和DOS功能调用功能调用4.14.1汇编语言源程序汇编语言源程序 1.1.机器语言机器语言用二进制数来表示指令和数据用二进制数来表示指令和数据.例如:例如:B0 64B0 64 2.2.汇汇编编语语言言用用助助记记符符,符符号号地地址址以以及及标标号号等等符符号号书书写写的的程序。程序。例如:例如:MOV ALMOV AL,64H64H ;用汇编语言编写的程序叫用汇编语言编写的程序叫源程序源程序。3.3.高高级级语语言言接接近近自自然然语语言言、习习惯惯的的教教学学语语言言来来描描述述具具体的算法。体的算法。三种语言的比较三种语言的比较能否被机能否被机器直

2、接执器直接执行?行?优点优点缺点缺点应用应用备注备注机器语机器语言言能能占用内存占用内存空间少空间少难认、难难认、难记、难编、记、难编、易错易错汇编语汇编语言言否否编译后目编译后目标程序占标程序占用内存空用内存空间少,执间少,执行速度快,行速度快,效率高效率高非通用性非通用性语言,可语言,可读性差,读性差,编程效率编程效率低。低。系统程序系统程序在线实时在线实时控制、控制、图象处理图象处理等等ASM需需64KB内存内存MASM需需96KB内存内存高级语高级语言言否否通用性强,通用性强,功能强,功能强,易学易用易学易用执行效率执行效率低低科学计算、科学计算、离线仿真离线仿真为什么还要学习和使用汇

3、编语言呢?为什么还要学习和使用汇编语言呢?主要有三点原因:主要有三点原因:1)1)程程序序设设计计人人员员能能更更充充分分地地利利用用机机器器硬硬件件的的全全部部功功能能,发发挥机器长处。挥机器长处。2)2)底层的一些功能仍然靠汇编语言程序来实现。底层的一些功能仍然靠汇编语言程序来实现。3)汇汇编编语语言言程程序序比比高高级级语语言言程程序序的的目目标标代代码码短短且且运运行行速速度度快快。在在要要求求节节省省内内存存空空间间和和提提高高程程序序运运行行速速度度的的重重要要场场合(如实时控制等)常用汇编语言来编制。合(如实时控制等)常用汇编语言来编制。用汇编语言编写的程序不用汇编语言编写的程序

4、不能由机器直接执行,而必能由机器直接执行,而必须经汇编程序翻译成机器须经汇编程序翻译成机器语言程序。汇编语言指令语言程序。汇编语言指令与翻译成的机器语言指令与翻译成的机器语言指令之间基本是一一对应的关之间基本是一一对应的关系。系。汇编过程示意:汇编过程示意:汇编语言程序的建立及汇编过程汇编语言程序的建立及汇编过程编辑程序Prog.asm文件汇编程序Prog.obj文件连接程序Prog.exe文件Edit.exeMasm.exeLink.exe汇编示意图汇编示意图调用MASM.EXE.ASM汇编.OBJ.LST.CRF可选4.1 4.1 汇编语言程序格式汇编语言程序格式 示例程序示例程序DATA

5、 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 BX,CL

6、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 ASSUME CS:C

7、ODE,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 1 语句语句

8、k k段名段名n n ENDS ENDS END END 标号标号(2 2)语句的结构)语句的结构 3 3种基本语句类型:种基本语句类型:指令语句指令语句 伪指令语句伪指令语句 宏指令语句宏指令语句指令语句格式指令语句格式 标号:标号:指令助记符指令助记符操作数操作数;注释;注释标号字段标号字段:是一个任选字段,性质为符号便移量,一般用于标记跳转指令的是一个任选字段,性质为符号便移量,一般用于标记跳转指令的目的地址在汇编过程中标号会被替换为一个位的数值偏移量标号必目的地址在汇编过程中标号会被替换为一个位的数值偏移量标号必须位于语句开头,结尾必须使用冒号。须位于语句开头,结尾必须使用冒号。指令助

9、记符和操作数:指令助记符和操作数:这两个字段组成汇编指令本身,指令助记符是必不可这两个字段组成汇编指令本身,指令助记符是必不可少的,操作数则根据指令助记符来确定在汇编过程中,也只有这两个字段少的,操作数则根据指令助记符来确定在汇编过程中,也只有这两个字段会被替换为确定的机器指令代码会被替换为确定的机器指令代码。注释字段:注释字段:是一个任选字段,用于说明程序片段或指令的功能,汇编过程中是一个任选字段,用于说明程序片段或指令的功能,汇编过程中不处理这样的字段,它只是用于提高源程序的可读性注释必须使用分号作不处理这样的字段,它只是用于提高源程序的可读性注释必须使用分号作为开始。为开始。例子:教材1

10、38 例1 伪指令语句格式伪指令语句格式伪伪指指令令语语句句:这这种种语语句句用用于于指指示示汇汇编编程程序序(翻翻译译程程序序)如如何何汇汇编编源源程程序序和和指指令令语语句句不不同同,汇汇编编程程序序处处理理它它时时不不会会产产生生机机器器指指令令代代码码,只只对对伪伪指指令令提提出出的的要要求求进进行行解解释释并并立立即即完完成成要求的操作要求的操作伪伪指指令令的的功功能能大大致致有有分分配配存存储储单单元元、计计算算表表达达式式、定定义义常常量量等等。等等。4.2 4.2 汇编语言中的基本数据汇编语言中的基本数据1 1、标识符、标识符标识符标识符-由程序员自由建立起来的,有特定意义的字

11、符序列。由程序员自由建立起来的,有特定意义的字符序列。标识符的组成规则如下:标识符的组成规则如下:必必须须由由字字母母、数数字字(0 0,9 9)及及特特殊殊符符号号(?,)组成,且必须以字母打头。,)组成,且必须以字母打头。字符总数限制在字符总数限制在3131个以内。个以内。不能使用属于系统专用保留字(保留的字)。不能使用属于系统专用保留字(保留的字)。2 2、常数、常数 常数常数-语句中出现的那些固定值,除了自身的值以外,语句中出现的那些固定值,除了自身的值以外,没有其它任何属性。没有其它任何属性。常数分为两类常数分为两类 (1 1)数值常数)数值常数 (2 2)字符串常数)字符串常数(1

12、 1)数值常数)数值常数(2 2)字符串常数)字符串常数 字字符符串串常常数数是是用用单单引引号号引引起起来来的的一一个个或或多多个个字字符符。字字符符串串常常数数是是以以各各字字符符的的ASCASC码码表表示示的的。如如A A用用41H 41H 表表示示,字符串字符串A1B2A1B2用用41H41H,41H41H,42H42H,42H42H表示。表示。3 3、变量、变量变变 量量-存存 放放 在在 存存 储储 器器 单单 元元 中中 的的 操操 作作 数数,它它 的的 值值 是是 可可 以以 改改 变变 的的,在在程程序序中中出出现现的的是是存存储储器器单单元元地地址址的的符符号号,即即 与

13、某一数据项第一字节相对应的标识符。与某一数据项第一字节相对应的标识符。变量的变量的3 3个属性:个属性:段地址:变量所在段的段地址;段地址:变量所在段的段地址;偏移地址:变量所在段内的偏移地址;偏移地址:变量所在段内的偏移地址;类型:所定义的每个变量所占据的字节数。类型:所定义的每个变量所占据的字节数。4 4、标号、标号标号标号-可执行指令语句可执行指令语句地址的符号表示地址的符号表示,即用标识符来表示地址。,即用标识符来表示地址。标号的标号的3 3个属性:个属性:段地址:与标号对应的指令首字节所在的段地址。段地址:与标号对应的指令首字节所在的段地址。偏移地址:与标号对应的指令首字节所在的偏移

14、地址。偏移地址:与标号对应的指令首字节所在的偏移地址。类型:标号的类型属性有两种:类型:标号的类型属性有两种:NEARNEAR和和FARFAR类型。类型。1 1、数据定义伪指令语句、数据定义伪指令语句共共有有五五条条:DBDB、DWDW、DDDD、DQDQ和和DTDT,分分别别用用来来定定义义字字节节、字字、双字、双字、8 8字节和字节和1010字节。字节。指令格式:指令格式:变量名变量名 助记符助记符 操作数操作数1 1,操作数操作数2 2,操作数操作数n n;注释;注释变变量量名名 助助记记符符 n n DUPDUP(操操作作数数1 1,操操作作数数2 2,操操作作数数n n);注释;注释

15、 注注:操作数可以是常数或表达式操作数可以是常数或表达式,变量名变量名,注释可有可无。注释可有可无。例例4.2 4.2 操操作作数数是是常常数数、表表达达式、字符串数据的定义式、字符串数据的定义 DATA1 DB 10H DATA1 DB 10H,52H52H DATA2 DW 1122H DATA2 DW 1122H,34H34H DATA3 DATA3 DD 5*20HDD 5*20H,0FFEEH0FFEEH DATA4 DB HELLO DATA4 DB HELLO例例4.3 4.3 操作数用操作数用“?”定义不确定值的定义不确定值的变量,用变量,用DUPDUP来定义重复变量,不确定来

16、定义重复变量,不确定值的变量一般用作保留存储空间,以值的变量一般用作保留存储空间,以便存放运算结果。便存放运算结果。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 DB 4 4 DUPDUP(1 1,2 2 DUPDUP(2020)例例4 4.4 .4 BUFFER DW 3,4,$+3BUFFER DW 3,4,$+3设设BUFFERBUFFER的偏移地址为的偏移地址为0088

17、H,0088H,则汇编后如下图所示:则汇编后如下图所示:2 2、标识符赋值与解除伪指令语句、标识符赋值与解除伪指令语句共有共有4 4条:等值伪指令语句条:等值伪指令语句EQUEQU 等号伪指令语句等号伪指令语句“=”“=”解除伪指令语句解除伪指令语句PURGEPURGE 别名定义伪指令语句别名定义伪指令语句LABELLABEL(1 1)等值伪指令)等值伪指令EQUEQU语句语句 指令格式:指令格式:标识符标识符 EQU EQU 操作数操作数 例例4.54.5 DATA EQU 100DATA EQU 100 DATA1 EQU DATADATA1 EQU DATA2 2 CI CI EQU A

18、DD 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一经定义不再重新定义。一经定义不再重新定义。(3 3)解除伪指令语句)解除伪指令语句PURGEPURGE指令格式:

19、指令格式: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 DISF LABEL FAR DISN:MOV AX DISN:MOV AX,SI SI

20、3 3、段定义伪指令语句段定义伪指令语句 因因8086/8088 CPU8086/8088 CPU的存储器是分段的的存储器是分段的,这就需要有段定语这就需要有段定语句。句。与段有关的伪指令有:与段有关的伪指令有:SEGMENTSEGMENT、ENDSENDS和和ASSUMEASSUME,含义分,含义分别是别是段开始段开始、段结束段结束、指定段寄存器指定段寄存器。(1 1)段结构定义伪指令段结构定义伪指令 格式:格式:段名段名 SEGMENTSEGMENT定位类型组合类型定位类型组合类型类别类别 段名段名 ENDS ENDS 从段名代表的段基值开始定义一个段。其中的定位类型、从段名代表的段基值开

21、始定义一个段。其中的定位类型、组合类型和组合类型和类别类别一般都可省略,若不省略时各项的顺一般都可省略,若不省略时各项的顺序不能变。序不能变。定位类型:定位类型:连接时用于指定该段应开始于什么样的物理地址。可选连接时用于指定该段应开始于什么样的物理地址。可选择下列择下列4 4种之一:种之一:BYTE BYTE:从当前可用的字节地址从当前可用的字节地址XXXX XXXX XXXX XXXX XXXX(XXXX XXXX XXXX XXXX XXXX(任一地任一地址址)开始;开始;WORDWORD:从当前可用的字地址从当前可用的字地址XXXX XXXX XXXX XXXX XXX0(XXXX XX

22、XX 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)paragraph)为为1616字节,字节,1 1页为页为1616节即节即256256字节字节。

23、组合类型:组合类型:连接时用于指定同名的各段之间的组合方式。可选连接时用于指定同名的各段之间的组合方式。可选择下列择下列6 6种之一:种之一:PUBLICPUBLIC STACKSTACK COMMONCOMMON MEMORYMEMORY ATAT表达式表达式 NONE(NONE(缺省缺省)若省略组合类型或说明为若省略组合类型或说明为NONENONE类型,则表示各个段不组合,各有类型,则表示各个段不组合,各有自己的段基值。自己的段基值。对堆栈段,必须用对堆栈段,必须用STACKSTACK类型说明,不能省略。类型说明,不能省略。类别类别:是要将组合后的各段按是要将组合后的各段按类别类别分类存放

24、,同类分类存放,同类别的段别的段将被相邻地放在一起。将被相邻地放在一起。类别类别是由用户定义的、用一对引号括起是由用户定义的、用一对引号括起来的来的长度不超过长度不超过4040个字符的名字个字符的名字(标识符标识符)。SEGMENTSEGMENT和和ENDSENDS这两个伪指令总是成对出现,二者前这两个伪指令总是成对出现,二者前面的段名一致。二者之间的删节部分,对数据段、附加段面的段名一致。二者之间的删节部分,对数据段、附加段及堆栈段,一般是符号、变量定义等伪指令。对于代码段及堆栈段,一般是符号、变量定义等伪指令。对于代码段则是指令及伪指令。则是指令及伪指令。此外,还必须明确段和段寄存器的关系

25、,这可由此外,还必须明确段和段寄存器的关系,这可由ASSUMEASSUME语句来实现。语句来实现。(2)(2)段分配伪指令段分配伪指令ASSUMEASSUME 该语句必须出现在有关的变量及标号使用之前,该语句必须出现在有关的变量及标号使用之前,定义当定义当前有效的前有效的4 4个逻辑段个逻辑段,用于指定程序中所定义的段与各段寄存,用于指定程序中所定义的段与各段寄存器之间的对应关系,指示汇编程序在汇编过程中如何确定指令器之间的对应关系,指示汇编程序在汇编过程中如何确定指令隐含使用的段寄存器。指定某段隐含使用的段寄存器。指定某段(用段名标识用段名标识)中的变量、标号中的变量、标号等数据项由哪个段寄

26、存器寻址。等数据项由哪个段寄存器寻址。ASSUMEASSUME语句是伪指令,它不能给段寄存器传送段基值,只语句是伪指令,它不能给段寄存器传送段基值,只能指定段与段寄存器之间的对应关系能指定段与段寄存器之间的对应关系。该伪指令的作用时间也。该伪指令的作用时间也是在汇编阶段,不是在程序的执行阶段。是在汇编阶段,不是在程序的执行阶段。在程序设计中,一般在程序设计中,一般ASSUMEASSUME语句在代码段中位于所有指语句在代码段中位于所有指令语句之前。令语句之前。注意注意:把段基值装入段寄存器这一个过程是在程序执行阶:把段基值装入段寄存器这一个过程是在程序执行阶段完成的。段完成的。即便程序中使用了即

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

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

29、寄存器的初始化指令一般在代码段的最开始始,因为以后的指令可能会频繁的访问数据段或附加段的数,因为以后的指令可能会频繁的访问数据段或附加段的数据,只有先保证段寄存器中的段基值正确,后面的数据操作据,只有先保证段寄存器中的段基值正确,后面的数据操作才是正确的。才是正确的。ASSUMEASSUMEASSUMEASSUME 段寄存器名段寄存器名段寄存器名段寄存器名:段名,段名,段名,段名,段寄存器名段寄存器名段寄存器名段寄存器名:段名段名段名段名.告诉汇编程序用告诉汇编程序用告诉汇编程序用告诉汇编程序用SEGMENTSEGMENTSEGMENTSEGMENT伪操作定义过的伪操作定义过的伪操作定义过的伪

30、操作定义过的段段段段的的的的段地址段地址段地址段地址将将将将要存放在哪个要存放在哪个要存放在哪个要存放在哪个段寄存器段寄存器段寄存器段寄存器中。中。中。中。但真正把段地址装入段寄存器(称为段初始化)的操但真正把段地址装入段寄存器(称为段初始化)的操作需要由程序员自己完成作需要由程序员自己完成 MOVMOVAX,AX,DATADATA MOV MOVDSDS,AX,AX MOVMOVESES,AX,AX这些语句实现了这些语句实现了这些语句实现了这些语句实现了将段基址装入段寄存器将段基址装入段寄存器将段基址装入段寄存器将段基址装入段寄存器。如程序中用到堆栈如程序中用到堆栈如程序中用到堆栈如程序中用

31、到堆栈段,也需装入实际的初值。而段,也需装入实际的初值。而段,也需装入实际的初值。而段,也需装入实际的初值。而代码段代码段代码段代码段不需要用户装不需要用户装不需要用户装不需要用户装,由由由由初始化初始化初始化初始化程序程序程序程序装入装入装入装入。4 4、过程定义伪指令语句过程定义伪指令语句 在在MASMMASM中,过程的含义和子程序是一样的,一个过中,过程的含义和子程序是一样的,一个过程可以被其它程序所调用,这个过程的最后一条指令,程可以被其它程序所调用,这个过程的最后一条指令,一般是返回指令。一般是返回指令。过程定义伪指令的格式为:过程定义伪指令的格式为:过程名过程名 PROCPROC

32、NEARNEAR/FAR/FAR RETRET 过程名过程名 ENDPENDP调用一个过程的格式为:调用一个过程的格式为:CALL CALL 过程名过程名例如,有两个程序段,其结构如下:例如,有两个程序段,其结构如下:CODE1SEGMENTASSUMECS:CODE1FARPROCPROCFARRETFARPROCENDPCODE1ENDSCODE2SEGMENTASSUMECS:CODE2CALLFARPROCCALLNEARPNEARPPROCNEARRETNEARPENDPCODE2ENDS5 5、定位伪指令定位伪指令 伪指令伪指令ORGORG规定了段内的起始地址或偏移地址,其格式为:

33、规定了段内的起始地址或偏移地址,其格式为:ORGORG 表达式的值即为段内的起始地址或偏移地址,从此地址起连续存放程表达式的值即为段内的起始地址或偏移地址,从此地址起连续存放程序或数据。序或数据。例例4.8 4.8 用用ORGORG指定数据段和代码段地址。指定数据段和代码段地址。DATA SEGMENT 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 DAT

34、A 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 CODE ENDS4.4 4.4 汇编语言的表达式汇编语言的表达式 表表达达式式由由运运算算对对象象和和运运算算符符组组成成。在在汇汇编编的的时时候候由由汇汇编编程程序序对对它它进进行行运运算,其运算结果作为语句中的算,其运算结果作为语句中的操作数操作数来使用。来使用。运运算算对对象象可可以以是是常常数数

35、、变变量量和和标标号号,运运算算结结果果可可以以是是常常数数,也也可可以以是是存存储储器器的的地地址址,若若该该地地址址中中存存放放的的是是数数据据则则称称它它为为变变量量,若若该该地地址址中中存放的是指令则称它为标号存放的是指令则称它为标号。下面介绍五种运算符下面介绍五种运算符:算术运算符算术运算符 逻辑运算符逻辑运算符 关系运算符关系运算符 分析运算符分析运算符 修改属性运算符修改属性运算符 、算术运算符、算术运算符算算 术术 运运 算算 符符 有有:加加()、减减()、乘乘(*)、除除()、取取 模运算(模运算(MODMOD)、左移()、左移(SHLSHL)和右移()和右移(SHRSHR

36、)。)。取模运算是取两数相除的取模运算是取两数相除的余数余数,对象必须为对象必须为正整数正整数。例如例如:92 MOD 16 92 MOD 16 结果为结果为1212(相当于取低(相当于取低4 4位的值)位的值)97H MOD 20H 97H MOD 20H 结果为结果为2323(相当于取低(相当于取低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,

37、5,6 TRY TRY DB DB 20 20 DATA ENDS DATA ENDS CODE SEGMENT CODE SEGMENT MOV MOVBX,BX,30*530*5 MOV MOVCX,CX,(TRY-ARRAY)(TRY-ARRAY)CODE ENDS CODE ENDS 例例4.16 4.16 源程序包含除法、减法、模运算和移位运算的表达式源程序包含除法、减法、模运算和移位运算的表达式DATA SEGMENTDATA SEGMENTKA KA EQU EQU800800DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT MOVMOVBX,

38、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、逻辑运算符、逻辑运算符逻逻辑辑运运算算符符有有:与与(ANDAND)、或或(OROR)、非非(NOTNOT)和和异异或或(XORXOR)例例 4.17 AND 4.17 AND、OROR、NOTNOT、XORXOR逻辑运算的表达式逻辑运算的表达式 DATA SEGMENTDATA SEGMENT PORT EQU PORT

39、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 AHMOV 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(大于

40、或等于大于或等于)注注:1 1)关系运算符的两个操作数必须是数字或者是同一段内的两个存储器地)关系运算符的两个操作数必须是数字或者是同一段内的两个存储器地址。址。2 2)关系为真)关系为真,对于字操作数而言,结果为对于字操作数而言,结果为0FFFFH0FFFFH;关系为假关系为假,结果为结果为0 0 例:例:MOV BX,PORT_VAL GE 5 若若 PORT_VAL5,则汇编后为:则汇编后为:MOV BX,0FFFFH 若若 PORT_VAL5,则汇编后为:则汇编后为:MOV BX,0 例例4.18 4.18 用用OFFSETOFFSET返回标号或变量偏移地址值的表达式返回标号或变量偏移

41、地址值的表达式DATA SEGMENTDATA SEGMENT DAT1 DB DAT1 DB 81H 81H DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT MOV SI MOV SI,OFFSET LAB1OFFSET LAB1 LAB1 LAB1:MOV BX MOV BX,OFFSET DAT1OFFSET DAT1 CODE ENDSCODE ENDS 4 4、分析运算符、分析运算符 分析运算符有:分析运算符有:OFFSETOFFSET、SEGSEG、TYPETYPE、LENGTHLENGTH、SIZESIZE (1 1)OFFSETOFFSET

42、 格式:格式:OFFSET OFFSET 变量或标号变量或标号 功能:返回变量或标号的偏移地址部分。功能:返回变量或标号的偏移地址部分。(2 2)SEGSEG 格式:格式:SEG SEG 变量或标号变量或标号 功能:返回变量或标号所在段的段基值功能:返回变量或标号所在段的段基值。(3 3)TYPETYPE 格式:格式:TYPE TYPE 变量或标号变量或标号 功能:功能:返回变量或标号的类型属性值。返回变量或标号的类型属性值。表表4-1 TYPE4-1 TYPE运算符返回值运算符返回值 变变 量量标标 号号类型类型DBDBDWDWDDDDDQDQDTDTNEARNEARFARFAR返回值返回值

43、1 12 24 48 81010-1-1-2-2例例 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 SEGMENTLL1LL1:MOV AH MOV AH,TYPE AA1TYPE AA1 MOV BH MOV BH,TYPE AA2TYPE AA2 ADD AL ADD AL,TYPE AA3TYPE AA

44、3 MOV BL MOV BL,TYPE LL1TYPE LL1CODE ENDS CODE ENDS(4 4)LENGTH LENGTH 格式:格式:LENGTH LENGTH 变量变量 功能:返回变量的长度,即以功能:返回变量的长度,即以DUP形式表示的第一组变量被重复设置的次形式表示的第一组变量被重复设置的次 数。数。例例 4.20 LENGTH 4.20 LENGTH加变量的表达式加变量的表达式 DATA SEGMENTDATA SEGMENT BB1 DW 100 DUP BB1 DW 100 DUP(?)(?)BB2 DW 1BB2 DW 1,2 2,3 3 BB3 DB BB3

45、DB A B C DA 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 格式:格式:SIZE SIZE 变量变量 功能:返回变量的大小,即功能:返回变量的大小,即TYPELENGTH的值。也就是说,的值。也就是说,SIZE=TYPESIZE=TYPELENGTHL

46、ENGTH 把例把例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的含义举例的含义举例对于对于“W1 DW 20 DUP(3,10 DUP(7)W1 DW 20 DUP(3,10 DUP(7)”,则,则TYPE W1=2TYPE W1=2,LENGTH W1=20LENGT

47、H 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 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

48、 DB 8,20 DUP(3,10 DUP(7)”,则,则TYPE B2=TYPE B2=,LENGTH B2=LENGTH B2=,SIZE B2=SIZE B2=。5 5、修改属性运算符、修改属性运算符(综合运算符综合运算符)修改属性运算符有:段操作符、修改属性运算符有:段操作符、PTRPTR、THISTHIS、HIGHHIGH、LOWLOW、SHORT SHORT (1 1)段操作符段操作符 格式:格式:段寄存器名段寄存器名:存储器操作数存储器操作数 功能:功能:临时指定存储器操作数的段归属。临时指定存储器操作数的段归属。例如,例如,“MOV AX,ES:MOV AX,ES:BXBX”表

49、示该存储单元的段基值表示该存储单元的段基值取自取自ESES,而不是隐含的,而不是隐含的DSDS。(2 2)PTR PTR 格式:格式:类型类型 PTR PTR 变量变量 距离距离 PTR PTR 标号标号例例如如,指指令令“MOVMOVBXBX,5 5”的的含含义义是是将将常常数数5 5送送入入存存储储单单元元BXBX中中 。该该存存储储单单元元的的偏偏移移地地址址由由BXBX确确定定,段段基基值值隐隐含含为为DSDS。但但汇汇编编程程序序无无法法确确定定常常数数5 5是是字字节节还还是是字字,也也无无法法确确定定存存储储单单元元BXBX的的内内容容是是字字节节还还是是字字,所所以以无无法法操

50、作。操作。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 SEGMENTCODE SEGMENTLL1LL1:MOV MOV AXAX,WORD PTR CC1WORD PTR CC1 MOV BL MOV BL,BYTE PTR CC2BYTE PTR CC2 MOV BYTE PTR BX

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁