资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.3,汇编语言的表达式,汇编语句中的数据(,常数、变量、标号,)都可以用表达式给出;,表达式的运算在汇编阶段由汇编程序进行运算并将结果当作操作数;,MASM允许使用的表达式分为:,数值表达式,:结果是一个数值;,地址表达式,:结果是一个存储器的地址。,MASM表达式由,运算符号,和,运算对象,组成。,运算符号,分六大类:,算术运算符,(,7,个),逻辑运算符,(,4,个),关系运算符,(,6,个),分解运算符,(,5,个),修改属性运算符,其他运算符,参加表达式运算的,运算对象,可以是,常数,,也可以是,变量,或,标号,。,3.3.1,算术运算符,有加(+)、减(-)、乘(*)、除(/)、模除(MOD)、左移(SHL)和右移(SHR)等七种;,运算对象和运算结果都必须是整数;,除法运算的结果只取商,;,模除运算的结果只取余数;,MOV AH,2+6,MOV AH,08H,MOV CL,33/5,MOV CL,06H,MOV DL,23,MOD,5,MOV DL,03H,MOV BL,0000,1010B,SHL,4,MOV BL,1010,0000,B,MOV AH,0110B,SHR,5,MOV AH,0000B,1E,上述表达式运算是否影响FLAGS?,3.3.2,逻辑运算符,包括逻辑非、逻辑与、逻辑或和逻辑异或四种。,逻辑运算符,与指令系统中的,逻辑运算指令,的符号相同,功能,相近。,区别:,表达式中的逻辑运算不影响标志位;,表达式中的逻辑运算由汇编程序在汇编阶段完成;,逻辑运算指令由,CPU,在程序执行阶段完成。,MOV AL,NOT,0011 0011,B,MOV AL,1100 1100B,MOV BL,,1111,0000B AND,1011,1101B,MOV BL,,1011,0000B,MOV AH,1010,0000,B OR 0000,0101,B,MOV AH,10100101B,MOV BH,,1010,1011B XOR,1010,0100B,MOV,BH,00001111B,2E,3.3.3,关系运算符,包括相等,EQ,、不等,NE,、小于,LT,、不大于,LE,、大于,GT,、不小于 GE六种运算;,关系运算符是对两个运算对象进行,比较,操作:,若满足条件,结果为,TRUE,,,输出结果为,全,1,;,若不满足条件,结果为,FALSE,,,输出结果为,全,0,。,例:,MOV AX,5,EQ,101B,MOV AX,0FFFFH,MOV BH,10H,GT,16,MOV BH,00H,L:less G:greater E:equal N:not,3E,3.3.4,分解运算符(,分析运算符),例:,MOV AX,SEG,A ;,将变量A所在段的段地址值送AX,MOV BX,OFFSET,A;,将变量A的偏移地址值送BX,从变量或标号中分解出某些属性值,1.,SEG,运算符,格式:,SEG,变量或标号,功能:,计算变量或标号的,段地址,。,2.,OFFSET,运算符,格式:,OFFSET,变量或标号,功能:,计算变量或标号的,段内偏移地址,。,3.,TYPE,运算符,格式:,TYPE,变量或标号,功能:,计算变量或标号的,类型值,。,类型名称,定义符号,类型值,字节变量,DB,1,字变量,DW,2,双字变量,DD,4,长字变量,DQ,8,10字节变量,DT,10,近,NEAR,-1(FFH),远,FAR,-2(FEH),例,A1DB,21H,,,42H,A2DW,3412H,A3DD,?,ALOP,:,MOVAL,,,TYPE,A1,MOVBL,,,TYPE,A2,MOVAH,,,TYPEA3,MOVDL,,,TYPEALOP,等效于:,ALOP,:,MOVAL,,,1,MOVBL,,,2,MOVAH,,,4,MOVDL,0FFH,例子:,FEES DW 100DUP(0),ARRAY DW 1,2,3,MOV CX,LENGTH FEES,MOV BX,LENGTH ARRAY,等效于:,MOV CX,100,MOV BX,1,4.,LENGTH,运算符,格式:,LENGTH,变量,功能:,对于使用DUP定义的变量,计算分配给该变量的,单 元数,,其他变量的LENGTH值为1。,1 当变量为DUP定义且DUP括号内为,单项数据,时,下列关系成立:,SIZE=LENGTH*TYPE,2,否则size和length的值无意义。,5.,SIZE,运算符,格式:,SIZE,变量,功能:,计算分配给该变量的,字节数,。,例,P1DB10DUP,(,0,),P2DW20DUP,(?),BB,:,MOVAL,,,LENGTHP1,MOVBL,,,LENGTHP2,MOVAH,,,SIZEP1,MOVBH,,,SIZEP2,等效于:,BB,:,MOVAL,,,10,MOVBL,,,20,;只计单元数,MOVAH,,,10,;10=10*1,MOVBH,40;40=20*2,;还要计算类型,4E,例如:,A1DB10DUP(0,1),A2DW20DUP(2 DUP(?),1),Length a1:,Length a2:,Size a1:,Size a2:,10,20,10,40,3.3.5,修改属性运算符,例:,MOVAX,,,ES,:,BX,;,从,ES,段中偏移地址为,BX,;,的地址中取出一个字送,AX,MOVBL,,,DS,:,BP,;,从,DS,段中偏移地址为,BP,的,;,地址中取一个字节送BL,在程序运行过程中,暂时,修改变量或标号的属性,1.,修改段属性,运算符 跨越段前缀,段寄存器(CS,DS,ES和SS)后跟一个冒号,称为修改段属性运算符,表示后跟的操作数由指定的段寄存器提供段地址值。,2.,PTR,运算符,格式:,类型,PTR,变量,/,标号,功能:,将,PTR,左边的,类型,属性,临时,赋给其右边的变量,/,标号,,但保持它们原来的段属性和偏移地址属性不变。,例:,M1DB20H,,,32H,M2DW5682H,ALP1,:,MOV AX,,,WORD PTR M1,ALP2,:,MOV AL,,,BYTE PTR M2,PTR,运算符例子,M1:字节,AX:字,M2:字 ,AL:字节,例:,B EQU THIS BYTE,A DD 44332200H,;,B、A分别为字节变量和双字变量,但具有相同的地址。,3.THIS运算符,格式:,变量,/,标号,EQU THIS,类型,功能:,将变量或标号定义成指定的类型,但,并不分配新的存,储单元,其地址与跟在后面的变量的地址相同,。,5E,
展开阅读全文