广东药学院医药信息工程学院第3章(1)汇编语言程序设计3.3.1.汇编语言概述3.3.2.汇编语言的基本语法----3.3节内容广东药学院医药信息工程学院1AssembleLanguage汇编语言是机器语言的符号化描述。一种面向机器的程序设计语言,通常是为特定计算机或计算机系列专门设计的。利用机器指令的助记符、符号地址和标号来编写程序基本语句是机器指令系统中的指令。广东药学院医药信息工程学院汇编语言程序的汇编过程编辑程序Prog.asm文件汇编程序Prog.obj文件连接程序Prog.exe文件Edit.exeMasm.exeLink.exe广东药学院医药信息工程学院采用汇编语言进行程序设计的优点可充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少目标程序所占用的存储空间。常用来编写实时控制程序、实时通信程序,有时也用来编制某些系统软件程序。广东药学院医药信息工程学院缺点1.可读性比高级语言低(与人们描述计算过程的需要差距大);2.与机器硬件的具体结构联系过于紧密——在一种结构的机器上开发的程序极难移植到另一种不同结构的机器上去。广东药学院医药信息工程学院2汇编语言的基本语法汇编语言源程序的格式常量、标识符和表达式指示性语句名字与变量指令性语句规范程序:ASM的结构分段结构两类语句指令性语句指示性语句DATASEGMENT;数据段开始DAIDB‘INPUTSTRING:$’BUFDMADB80HDUP(?)DATAENDSSTACKSEGMENT;堆栈段开始ME1DB80HDUP(?)STACKENDSCODESEGMENT;代码段开始ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMEIMOVAH,09HINT21HMOVDX,OFFSETBUFDMAMOVAH,0AHINT21HCODEENDSEND广东药学院医药信息工程学院指令性语句格式为:[标号]:操作码[操作数][;注释]带方括号的为任选项;标号是指令的符号地址;操作码和操作数是用汇编语言指令表示的指令部分;注释是对该语句在本程序中的功能的说明。START:MOVAX,DATA;程序的开始广东药学院医药信息工程学院指示性语句(伪指令)格式为:[名字/变量]命令[参数][;注释]命令指示汇编程序进行某种汇编操作;参数是有关的数据;名字是段名、符号名等标识符,变量用变量名表示。DAIDB‘INPUTSTRING:$’;字符串定义广东药学院医药信息工程学院汇编语言中的标记标识符保留字分界符常数注释表3.2Pentium汇编程序中可用的分界符广东药学院医药信息工程学院标识符在编程时建立的有特定意义的字符序列标号常量名程序名段名……名称广东药学院医药信息工程学院组成标识符有如下规定:(1)组成标识符的字符有:英文大写字母:A~Z;英文小写字母:a-z;数字0~9;字符?、@、_、$;(2)字符长度不超过3l个;(3)首字符不能是数字;(4)?不能单独作为一个标识符;(5)不能把保留字用作标识符,保留字包括助记符、寄存器名等。广东药学院医药信息工程学院标号标号(例如START)是一条指令在内存中的符号地址标号有三属性(l)段属性:表示标号所在段的段基值(CS);(2)偏移量属性:表示标号所在位置的偏移地址;(3)类型属性:表示标号所在指令是允许段内跳转(near)还是段间跳转(far)。START:MOVAX,DATA广东药学院医药信息工程学院包括文件名、标题名、段名、过程名、变量名(例如BUFDMA)和符号常量名等,是程序员在编程中按标识符规定命名的,目的是方便编程和读程。名称有三属性:段属性……说明该变量所在段的段基址(CS、DS、ES…);偏移地址属性……说明该变量的段内偏移量;类型属性……说明该变量所在内存数据的类型(字节、字、双字、8字节还是10字节)。名称BUFDMADB80H广东药学院医药信息工程学院常数数值1001B,166D(166),6AH,1037O字符字符:‘A’,字符串:’abcd’,‘INPUTSTRING:$’符号常量COM-REGEQU26H广东药学院医药信息工程学院表达式由运算对象(操作数)和运算符组成的合法式子就是表达式,含操作数和运算符。操作数:常量、变量、标号运算符算术、逻辑、关系:优先级分析运算符:返回变量、标号等的属性offset、seg、type、length、size综合运算符:修改变量、标号的属性段前缀、PTR等广东药学院医药信息工程学院操作数操作数可以用段名、符号常量、变量、属性表达式、过程名和标号等表示。例如:MOVAX,DATA;DATA是段名MOVCX,COUNT;COUNT是符号常量MOVBL,BUFFER;BUFFER是变量MOVSI,OFFSETARRAY;OFFSETARRAY是属性表达式CALLSBRT1;SBRT1是过程名JMPDONE;DONE是标号广东药学院医药信息工程学院表达式中的运算符高优先级低1括号中的项,即(…)和[…]2LENGTH,SIZE,WIDTH,MASK3PTR,OFFSET,SEG,TYPE,THIS4×,/,MOD5+,-6EQ,NE,L,LE,GT,GE7NOT8AND9OR,XOR广东药学院医药信息工程学院表达式的类型数值表达式----运算结果是一个数值;地址表达式----运算结果是一个存储单元的地址。广东药学院医药信息工程学院(1)算术运算符有+(加)、-(减)、*(乘)、/(除)、MOD(取余)。算术运算符可以用于数值表达式和地址表达式中。用于地址表达式中要注意地址表达式的物理意义。广东药学院医药信息工程学院(2)逻辑运算符有AND(与)、OR(或)、XOR(异或)、NOT(非)。逻辑运算符只能用于数值表达式中,不能用于地址表达式中。逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。在汇编阶段,指令ANDAL,78HAND0FH等价于指令ANDAL,08H。广东药学院医药信息工程学院(3)关系运算符有EQ(相等)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)、NE(不等于)关系运算符要有两个运算对象,两个运算对象要么都是数值,要么都是同一个段内的地址。运算结果为真时,表示为0FFFFH;运算结果为假时,表示为0000H。指令MOVBX,32EQ45等价于MOVBX,0;指令MOVBX,56GT30等价于MOVBX,0FFFFH。广东药学院医药信息工程学院指示性语句(伪指令—P127)方式定义语句段定义语句过程定义语句数据定义语句符号定义语句广东药学院医药信息工程学院方式定义语句说明执行指令的cpu和协处理器类型。.8086/.8088.286/.286p.386/.386p.486/.486p.586/.586p.MMX.686/.86p.XMM广东药学院医药信息工程学院段定义语句—P129(1)SEGMENT/ENDS命令----用来定义一个段格式:段名SEGMENT[参数]…….段名ENDS段名由程序员定义,汇编时由系统为该段分配一个段基值,并将该值赋于段名。广东药学院医药信息工程学院(2)ASSUME命令ASSUME命令紧跟在代码段的SEGMENT语句之后,用于指示下述程序中段寄存器同指定段名的对应关系格式:ASSUMECS:段名1,DS:段名2,SS:段名3,ES:段名4注意:ASSUME语句仅指出段寄存器同段名的对应关系,并未对段寄存器赋值,在程序中未用到的段寄存器不必指示。广东药学院医药信息工程学院(3)ORG命令偏移地址定位语句,指定某一语句在段内的偏移地址格式:ORGexpexp为能计算出16位立即数的表达式例:ORG2000HMOVAL,BL则MOVAL,BL所在内存单元在本段内的偏移地址为2000H.广东药学院医药信息工程学院(4)简约段定义伪指令.DATA/.STACK/.CODE代替DATASEGMENT/STACKEGMENT/CODESEGMENT不需要DATAENDS,STACKENDS,CODEENDS要求在程序开头采用.MODELSMALL伪指令定义存储类型广东药学院医药信息工程学院过程定义语句—P130应用PROC/ENDP命令定义过程(procedure),过程即子程序,是程序的一部分,程序中用CALL指令调用过程,过程结束用RET指令返回程序。格式:过程名PROC类型……RET过程名ENDP类型为FAR/[NEAR]广东药学院医药信息工程学院数据定义语句-P128用来为数据分配内存单元。格式:[变量]命令参数1,参数2,……[;注释]变量是内存中一组数的名字,由程序员在编程时用标识符定义,变量可以作为内存操作数来使用。命令可以是:DB定义字节数据(8位)DW定义字数据(16位)DD定义双字数据(32位)DQ定义8字节数据(64位)DT定义10字节数据(80位)参数是相应内存单元中的数据,可以是:数字常量:用各种规定的数制表示;字符常量:用单引号括起来的ASCII字符;符号常量:用EQU语句定义。广东药学院医药信息工程学院?保留一个存储单位,以备程序执行过程中存入结果数据;????保留4个存储单位;ARYDB4DUP(43H)表示定义一个变量ARY,在内存中开辟一个数组,存放4个43H。DUP为复制符格式:复制次数DUP(数据)DATA1SEGMENTAT2000HORG3000HARY1DB12H,34H,56H,78HARY2DW1234H,5678HARY3DB‘A’,’B’,’C’,’D’,;’ABCD’ARY4DW‘AB’ARY5DD‘AB’ARY6DWARY2ARY7DDARY2DATA1ENDS地址内容名称2000:3000H12HARY134H56H78H2000:3004H34HARY212H78H56H2000:3008H'A'ARY3'B''C''D''A''B''C''D'2000:3010H'B'ARY4'A'2000:3012H0ARY50'B''A'2000:3016H04HARY630H2000:3018H04HARY