《汇编语言3伪指令.ppt》由会员分享,可在线阅读,更多相关《汇编语言3伪指令.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3 3章汇编语言程序结构章汇编语言程序结构一、汇编语言源程序的基本结构一、汇编语言源程序的基本结构一、汇编语言源程序的基本结构一、汇编语言源程序的基本结构二、汇编语言源程序中的语句二、汇编语言源程序中的语句二、汇编语言源程序中的语句二、汇编语言源程序中的语句三、常量、变量、标号与表达式三、常量、变量、标号与表达式三、常量、变量、标号与表达式三、常量、变量、标号与表达式四、伪指令四、伪指令四、伪指令四、伪指令五、操作符五、操作符五、操作符五、操作符六、汇编语言上机过程六、汇编语言上机过程六、汇编语言上机过程六、汇编语言上机过程教学重点:教学重点:指令语句格式和伪指令语句格式;指令语句格式和伪
2、指令语句格式;汇编语言程序格式;汇编语言程序格式;汇编语言的上机过程汇编语言的上机过程 教学难点:教学难点:伪指令的应用;伪指令的应用;运算符、操作符的应用;运算符、操作符的应用;伪指令存储器伪指令存储器分配技术分配技术 1DATA SEGMENTDATA SEGMENTDATA SEGMENTDATA SEGMENTSTR DB 0DH,0AH,How are you!$STR DB 0DH,0AH,How are you!$STR DB 0DH,0AH,How are you!$STR DB 0DH,0AH,How are you!$DATA ENDSDATA ENDSDATA ENDSD
3、ATA ENDSSTACK SEGMENT STACKSTACK SEGMENT STACKSTACK SEGMENT STACKSTACK SEGMENT STACK DB 100 DUP(0)DB 100 DUP(0)DB 100 DUP(0)DB 100 DUP(0)STACK ENDSSTACK ENDSSTACK ENDSSTACK ENDSCODE SEGMENTCODE SEGMENTCODE SEGMENTCODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK ASSUME DS:DATA,CS:CODE,SS:STACK ASSUME DS:
4、DATA,CS:CODE,SS:STACK ASSUME DS:DATA,CS:CODE,SS:STACKBEGINBEGINBEGINBEGIN:MOV AX,DATA:MOV AX,DATA:MOV AX,DATA:MOV AX,DATA MOV DS,AX MOV DS,AX MOV DS,AX MOV DS,AX LEA DX,STR LEA DX,STR LEA DX,STR LEA DX,STR MOV AH,9 MOV AH,9 MOV AH,9 MOV AH,9 INT 21H INT 21H INT 21H INT 21H MOV AH,4CH MOV AH,4CH MOV
5、AH,4CH MOV AH,4CH INT 21H INT 21H INT 21H INT 21HCODE ENDSCODE ENDSCODE ENDSCODE ENDS END END END END BEGINBEGINBEGINBEGIN汇编语言的汇编语言的一个实例一个实例P81P812一、汇编语言源程序的基本结构一、汇编语言源程序的基本结构完整的汇编语言源程序由完整的汇编语言源程序由完整的汇编语言源程序由完整的汇编语言源程序由段(代码段、数据段、附段(代码段、数据段、附段(代码段、数据段、附段(代码段、数据段、附加段或堆栈段)加段或堆栈段)加段或堆栈段)加段或堆栈段)组成;一个汇编语言
6、源程序组成;一个汇编语言源程序组成;一个汇编语言源程序组成;一个汇编语言源程序必须包必须包必须包必须包含一个代码段含一个代码段含一个代码段含一个代码段,并指示程序执行的,并指示程序执行的,并指示程序执行的,并指示程序执行的起始点起始点起始点起始点,一个程,一个程,一个程,一个程序只有序只有序只有序只有一个起始点。一个起始点。一个起始点。一个起始点。数据段、堆栈段数据段、堆栈段数据段、堆栈段数据段、堆栈段和和和和附加段附加段附加段附加段视情视情视情视情况而定。况而定。况而定。况而定。每个段由若干每个段由若干每个段由若干每个段由若干语句行语句行语句行语句行组成。语句行是汇编的编程基组成。语句行是汇
7、编的编程基组成。语句行是汇编的编程基组成。语句行是汇编的编程基础。础。础。础。所有的指令所有的指令所有的指令所有的指令必须位于某一个代码段内必须位于某一个代码段内必须位于某一个代码段内必须位于某一个代码段内,伪指令,伪指令,伪指令,伪指令可根据需要位于可根据需要位于可根据需要位于可根据需要位于任一段内任一段内任一段内任一段内。段以段以段以段以“SEGMENTSEGMENTSEGMENTSEGMENT”开始,以开始,以开始,以开始,以“ENDSENDSENDSENDS”结束。段由用结束。段由用结束。段由用结束。段由用户定义。户定义。户定义。户定义。3二、汇编语言源程序中的语句汇编语言源程序中的语
8、句1 1、语句的分类、语句的分类2 2、语句的格式、语句的格式41 1、汇编源程序中语句的分类、汇编源程序中语句的分类uu指令性语句指令性语句(指令指令/硬指令)硬指令)uu指示性语句指示性语句(伪指令伪指令)uu宏指令宏指令(第章第章)使使CPUCPU产产生生动动作作、并并在在程程序序执执行行时时才才处处理理的的语语句句,就就是第是第3 3章学习的处理器指令。章学习的处理器指令。不不使使CPUCPU产产生生动动作作、在在程程序序执执行行前前由由汇汇编编程程序序处处理理的说明性语句,例如,数据说明、变量定义等等。的说明性语句,例如,数据说明、变量定义等等。52 2、汇编源程序中语句的格式、汇编
9、源程序中语句的格式n n 指令的格式:指令的格式:指令的格式:指令的格式:标号标号标号标号:操作码操作码操作码操作码 操作数操作数操作数操作数 ;注释注释注释注释 n n 伪指令的格式:伪指令的格式:伪指令的格式:伪指令的格式:名字名字名字名字 伪指令伪指令伪指令伪指令操作数操作数操作数操作数 ;注释注释注释注释 共同点共同点共同点共同点:每一语句行都由每一语句行都由每一语句行都由每一语句行都由4 4 4 4部分组成,各部分之部分组成,各部分之部分组成,各部分之部分组成,各部分之间至少要用间至少要用间至少要用间至少要用一个空格一个空格一个空格一个空格作为间隔。作为间隔。作为间隔。作为间隔。不同
10、点:不同点:不同点:不同点:在形式上:带不带在形式上:带不带在形式上:带不带在形式上:带不带冒号冒号冒号冒号,是否可转向它。是否可转向它。是否可转向它。是否可转向它。在本质上:汇编时能否形成在本质上:汇编时能否形成在本质上:汇编时能否形成在本质上:汇编时能否形成对应的机器码。对应的机器码。对应的机器码。对应的机器码。61 1 1 1、常量、常量、常量、常量1 1 1 1)数值常量)数值常量)数值常量)数值常量2 2 2 2)字符常量字符常量字符常量字符常量)符号常量)符号常量)符号常量)符号常量三、常量、变量、标号与表达式(续)三、常量、变量、标号与表达式(续)数值常量数值常量7字字字字符符符
11、符串串串串常常常常量量量量是是是是用用用用单单单单引引引引号号号号或或或或双双双双引引引引号号号号引引引引起起起起来来来来的的的的一一一一个个个个或或或或多多多多个个个个字字字字符符符符。字字字字符符符符串串串串常常常常量量量量是是是是以以以以各各各各字字字字符符符符的的的的ASCASCASCASC码码码码表表表表示示示示的的的的。如如如如AAAA用用用用41H 41H 41H 41H 表示,字符串表示,字符串表示,字符串表示,字符串A1B2A1B2A1B2A1B2用用用用41H41H41H41H,31H31H31H31H,42H42H42H42H,32H32H32H32H表示。表示。表示。表
12、示。字符串形式的常量字符串形式的常量对经常使用的数值常量可以先为它定义一个名字,然后在语对经常使用的数值常量可以先为它定义一个名字,然后在语对经常使用的数值常量可以先为它定义一个名字,然后在语对经常使用的数值常量可以先为它定义一个名字,然后在语句中用名字来表示该常量。句中用名字来表示该常量。句中用名字来表示该常量。句中用名字来表示该常量。符号常量需要用等价伪指令符号常量需要用等价伪指令符号常量需要用等价伪指令符号常量需要用等价伪指令EQUEQUEQUEQU和等号伪指令和等号伪指令和等号伪指令和等号伪指令“=”=”=”=”来定义。来定义。来定义。来定义。符号常量符号常量三、常量、变量、标号与表达
13、式(续)三、常量、变量、标号与表达式(续)8l l 变量变量变量变量:变量是一个存放数据的存储单元的名字,用变量是一个存放数据的存储单元的名字,用变量是一个存放数据的存储单元的名字,用变量是一个存放数据的存储单元的名字,用变量名来变量名来变量名来变量名来表示,变量名由用户自定义表示,变量名由用户自定义表示,变量名由用户自定义表示,变量名由用户自定义。变量实际上。变量实际上。变量实际上。变量实际上表示数据初值表首元表示数据初值表首元表示数据初值表首元表示数据初值表首元素的地址;用这个变量名表示,常称为符号地址素的地址;用这个变量名表示,常称为符号地址素的地址;用这个变量名表示,常称为符号地址素的
14、地址;用这个变量名表示,常称为符号地址,在程序中作在程序中作在程序中作在程序中作为为为为存储器操作数存储器操作数存储器操作数存储器操作数来使用。如例子中来使用。如例子中来使用。如例子中来使用。如例子中BLOCKBLOCKBLOCKBLOCK、BUFFBUFFBUFFBUFF。一般在数据一般在数据一般在数据一般在数据段中定义。段中定义。段中定义。段中定义。由于汇编语言中存储单元是分段使用的,所以变量具有三种属由于汇编语言中存储单元是分段使用的,所以变量具有三种属由于汇编语言中存储单元是分段使用的,所以变量具有三种属由于汇编语言中存储单元是分段使用的,所以变量具有三种属性:性:性:性:段段段段 值
15、值值值(SEGMENT)(SEGMENT)(SEGMENT)(SEGMENT)变量定义所在段的段地址。变量定义所在段的段地址。变量定义所在段的段地址。变量定义所在段的段地址。偏移量偏移量偏移量偏移量(OFFSET)(OFFSET)(OFFSET)(OFFSET)变量所指的单元地址与段起始地址之变量所指的单元地址与段起始地址之变量所指的单元地址与段起始地址之变量所指的单元地址与段起始地址之 间的位移量。间的位移量。间的位移量。间的位移量。类类类类 型型型型(TYPE)(TYPE)(TYPE)(TYPE)有有有有字字字字节节节节(bytebytebytebyte)、字字字字(word)(word)
16、(word)(word)和和和和双双双双字字字字(double(double(double(double word)word)word)word)等。等。等。等。三、常量、变量、标号与表达式(续)三、常量、变量、标号与表达式(续)提示:每一个变量定义后都具有此三种属性,设置变量名提示:每一个变量定义后都具有此三种属性,设置变量名提示:每一个变量定义后都具有此三种属性,设置变量名提示:每一个变量定义后都具有此三种属性,设置变量名是为了方便存取它指示的存储单元。是为了方便存取它指示的存储单元。是为了方便存取它指示的存储单元。是为了方便存取它指示的存储单元。9l l标号是一条指令语句的符号地址。在汇
17、编源程序中,标号是一条指令语句的符号地址。在汇编源程序中,标号是一条指令语句的符号地址。在汇编源程序中,标号是一条指令语句的符号地址。在汇编源程序中,只有只有只有只有在需要转向一条指令语句时,才为该指令语句设置标号在需要转向一条指令语句时,才为该指令语句设置标号在需要转向一条指令语句时,才为该指令语句设置标号在需要转向一条指令语句时,才为该指令语句设置标号,以便,以便,以便,以便在转移类指令(含子程序调用指令)中直接引用这个标号。因在转移类指令(含子程序调用指令)中直接引用这个标号。因在转移类指令(含子程序调用指令)中直接引用这个标号。因在转移类指令(含子程序调用指令)中直接引用这个标号。因此
18、,标号可作为转移类指令的操作数,即转移地址。此,标号可作为转移类指令的操作数,即转移地址。此,标号可作为转移类指令的操作数,即转移地址。此,标号可作为转移类指令的操作数,即转移地址。标号也有三种属性:标号也有三种属性:标号也有三种属性:标号也有三种属性:段值段值段值段值:所在段的段地址所在段的段地址所在段的段地址所在段的段地址,总是在总是在总是在总是在CSCSCSCS段寄存器中段寄存器中段寄存器中段寄存器中;偏移量偏移量偏移量偏移量:与变量相同与变量相同与变量相同与变量相同,所在段的段内偏移地址;所在段的段内偏移地址;所在段的段内偏移地址;所在段的段内偏移地址;类型:类型:类型:类型:分分分分
19、NEARNEARNEARNEAR和和和和FARFARFARFAR两种。两种。两种。两种。其中其中其中其中:NEARNEARNEARNEAR表示标号所在语句与转移指令或调用指令在表示标号所在语句与转移指令或调用指令在表示标号所在语句与转移指令或调用指令在表示标号所在语句与转移指令或调用指令在同一码段内同一码段内同一码段内同一码段内,只需改变只需改变只需改变只需改变IPIPIPIP即可。即可。即可。即可。FARFARFARFAR标号所在语句与转移指令或调用指令标号所在语句与转移指令或调用指令标号所在语句与转移指令或调用指令标号所在语句与转移指令或调用指令不在同一码段内不在同一码段内不在同一码段内不
20、在同一码段内。若没有对类型进行说明若没有对类型进行说明若没有对类型进行说明若没有对类型进行说明,默认为默认为默认为默认为NEARNEARNEARNEAR。三、常量、变量、标号与表达式(续)三、常量、变量、标号与表达式(续)10例:测试为例:测试为例:测试为例:测试为0 0 0 0或或或或1 1 1 1若要检测若要检测若要检测若要检测ALALALAL中的最低位是否为中的最低位是否为中的最低位是否为中的最低位是否为1 1 1 1,若为,若为,若为,若为1 1 1 1则转移。则转移。则转移。则转移。test al,01htest al,01htest al,01htest al,01h;测试;测试;
21、测试;测试ALALALAL的最低位的最低位的最低位的最低位D0D0D0D0jnz jnz jnz jnz theretheretherethere;标志;标志;标志;标志ZF=0ZF=0ZF=0ZF=0,即,即,即,即D0=1D0=1D0=1D0=1;则程序转移到;则程序转移到;则程序转移到;则程序转移到theretheretherethere.;否则;否则;否则;否则ZF=1ZF=1ZF=1ZF=1,即,即,即,即D0=0D0=0D0=0D0=0,顺序执行,顺序执行,顺序执行,顺序执行theretheretherethere:.:.:.:.TESTTEST11表达式表达式表达式表达式是由是由
22、是由是由运算符(操作符)运算符(操作符)运算符(操作符)运算符(操作符)将将将将常数常数常数常数、寄存器、标号、寄存器、标号、寄存器、标号、寄存器、标号、变量变量变量变量组合起来的式子组合起来的式子组合起来的式子组合起来的式子,分分分分数值表达式数值表达式数值表达式数值表达式和和和和地址表达式地址表达式地址表达式地址表达式两种。汇编两种。汇编两种。汇编两种。汇编时按一定的时按一定的时按一定的时按一定的优先规则优先规则优先规则优先规则对表达式进行计算。对表达式进行计算。对表达式进行计算。对表达式进行计算。表达式(1)(1)(1)(1)算术运算符算术运算符算术运算符算术运算符(2)(2)(2)(2
23、)逻辑运算符逻辑运算符逻辑运算符逻辑运算符(3)(3)(3)(3)关系运算符关系运算符关系运算符关系运算符三、常量、变量、标号与表达式(续)三、常量、变量、标号与表达式(续)下面介绍三种运算符下面介绍三种运算符:数值表达式数值表达式算术表达式(利用算术运算符)算术表达式(利用算术运算符)逻辑表达式(利用逻辑运算符)逻辑表达式(利用逻辑运算符)关系表达式(利用关系运算符)关系表达式(利用关系运算符)12 有有有有+、-、*、/以及以及以及以及MOD(MOD(MOD(MOD(取余取余取余取余),其中其中其中其中MODMODMODMOD表示除法运算后得到表示除法运算后得到表示除法运算后得到表示除法运
24、算后得到的余数。的余数。的余数。的余数。例:例:例:例:19/719/719/719/7的商是的商是的商是的商是2 2 2 2,19 19 19 19 MOD 7MOD 7MOD 7MOD 7则为则为则为则为5(5(5(5(余数余数余数余数)算术运算符可以用于算术运算符可以用于算术运算符可以用于算术运算符可以用于数值表达式数值表达式数值表达式数值表达式,例:例:例:例:MOVMOVMOVMOV AL,2*7 AL,2*7 AL,2*7 AL,2*7 (1)(1)(1)(1)算术运算符算术运算符算术运算符算术运算符13 逻辑运算符有逻辑运算符有逻辑运算符有逻辑运算符有ANDANDANDAND、O
25、ROROROR、XORXORXORXOR和和和和NOTNOTNOTNOT,它们只能用于它们只能用于它们只能用于它们只能用于数数数数值表达式值表达式值表达式值表达式中中中中。例:例:例:例:MOVMOVMOVMOV CL,36H AND 0FHCL,36H AND 0FHCL,36H AND 0FHCL,36H AND 0FH 经汇编后经汇编后经汇编后经汇编后:MOV CL,06HMOV CL,06HMOV CL,06HMOV CL,06H 这些这些这些这些逻辑运算符逻辑运算符逻辑运算符逻辑运算符也是也是也是也是8086808680868086的的的的指令指令指令指令助记符助记符助记符助记符,会
26、不会造成会不会造成会不会造成会不会造成混乱呢混乱呢混乱呢混乱呢?不会的不会的不会的不会的,逻辑运算符逻辑运算符逻辑运算符逻辑运算符在在在在汇编时汇编时汇编时汇编时进行进行进行进行,而而而而指令助记指令助记指令助记指令助记符符符符在在在在指令执行时指令执行时指令执行时指令执行时进行。进行。进行。进行。例:例:例:例:ANDANDANDAND DH,PORTDH,PORTDH,PORTDH,PORT ANDANDANDAND 0FEH0FEH0FEH0FEH 后后后后一一一一个个个个逻逻逻逻辑辑辑辑运运运运算算算算符符符符ANDANDANDAND在在在在汇汇汇汇编编编编时时时时进进进进行行行行,若
27、若若若PORTPORTPORTPORT为为为为81818181H,H,H,H,则则则则汇汇汇汇编编编编后后后后表表表表达达达达式式式式算算算算出出出出为为为为80808080H H H H。执执执执行行行行前前前前一一一一个个个个指指指指令令令令助助助助记记记记符符符符ANDANDANDAND时时时时,将将将将DHDHDHDH与与与与80808080H H H H相与相与相与相与,结果在结果在结果在结果在DHDHDHDH中。中。中。中。(2)(2)逻辑运算符逻辑运算符ANDAND DH,PORTDH,PORT ANDAND 0FEH0FEH14【例例例例】用逻辑运算符进行运算。用逻辑运算符进行
28、运算。用逻辑运算符进行运算。用逻辑运算符进行运算。MOVMOVMOVMOVALALALAL,34H AND 0FH34H AND 0FH34H AND 0FH34H AND 0FH ;04HAL04HAL04HAL04HALMOVMOVMOVMOVBLBLBLBL,05H OR 30H05H OR 30H05H OR 30H05H OR 30H ;35HBL35HBL35HBL35HBLMOVMOVMOVMOVCXCXCXCX,NOT 00FFHNOT 00FFHNOT 00FFHNOT 00FFH ;0FF00HCX0FF00HCX0FF00HCX0FF00HCXMOVMOVMOVMOVDX
29、DXDXDX,789AH XOR 000FH789AH XOR 000FH789AH XOR 000FH789AH XOR 000FH ;7895HDX7895HDX7895HDX7895HDXMOVMOVMOVMOVALALALAL,0FH SHL 4 0FH SHL 4 0FH SHL 4 0FH SHL 4 ;AL=11110000BAL=11110000BAL=11110000BAL=11110000BMOVMOVMOVMOVBLBLBLBL,0FH SHR 4 0FH SHR 4 0FH SHR 4 0FH SHR 4 ;BL=00000000BBL=00000000BBL=0000
30、0000BBL=00000000B15 共有共有共有共有6 6 6 6个个个个,分别是:分别是:分别是:分别是:EQEQEQEQ(相等相等相等相等),),),),NENENENE(不等不等不等不等),),),),LTLTLTLT(小于小于小于小于),),),),GTGTGTGT(大于大于大于大于),),),),LELELELE(小于或等于小于或等于小于或等于小于或等于),),),),GEGEGEGE(大于或等于大于或等于大于或等于大于或等于)关系运算符关系运算符关系运算符关系运算符的两个操作数必须都是的两个操作数必须都是的两个操作数必须都是的两个操作数必须都是数字数字数字数字或者是同一段内的或
31、者是同一段内的或者是同一段内的或者是同一段内的两个存储器地址两个存储器地址两个存储器地址两个存储器地址。结果始终是一个数字值。若:。结果始终是一个数字值。若:。结果始终是一个数字值。若:。结果始终是一个数字值。若:关系为关系为关系为关系为真真真真,结果为结果为结果为结果为0 0 0 0FFFFHFFFFHFFFFHFFFFH 关系为关系为关系为关系为假假假假,结果为结果为结果为结果为0 0 0 0例:例:例:例:MOV BX,PORTMOV BX,PORTMOV BX,PORTMOV BX,PORTGE 5GE 5GE 5GE 5若若若若PORTPORTPORTPORT的值大于等于的值大于等于
32、的值大于等于的值大于等于5,5,5,5,则汇编后为:则汇编后为:则汇编后为:则汇编后为:MOVMOVMOVMOVBX,0FFFFHBX,0FFFFHBX,0FFFFHBX,0FFFFH若若若若PORTPORTPORTPORT的值小于的值小于的值小于的值小于5,5,5,5,则汇编后为:则汇编后为:则汇编后为:则汇编后为:MOVMOVMOVMOVBX,0BX,0BX,0BX,0(3)(3)(3)(3)关系运算符关系运算符关系运算符关系运算符提示:不单独使用关系运算提示:不单独使用关系运算提示:不单独使用关系运算提示:不单独使用关系运算符,通常将关系运算符与逻符,通常将关系运算符与逻符,通常将关系运
33、算符与逻符,通常将关系运算符与逻辑运算符组合起来使用。辑运算符组合起来使用。辑运算符组合起来使用。辑运算符组合起来使用。16运算符的优先级1 1 1 1()()()()LENGTHOF SIZEOF WIDTH MASK LENGTHOF SIZEOF WIDTH MASK LENGTHOF SIZEOF WIDTH MASK LENGTHOF SIZEOF WIDTH MASK2 2 2 2PTR OFFSET SEG TPYE THIS :PTR OFFSET SEG TPYE THIS :PTR OFFSET SEG TPYE THIS :PTR OFFSET SEG TPYE THIS
34、 :3 3 3 3HIGE LOWHIGE LOWHIGE LOWHIGE LOW4 4 4 4*/MOD SHL SHR*/MOD SHL SHR*/MOD SHL SHR*/MOD SHL SHR5 5 5 5+-+-+-+-6 6 6 6EQ NE GT LT GE LEEQ NE GT LT GE LEEQ NE GT LT GE LEEQ NE GT LT GE LE7 7 7 7NOTNOTNOTNOT8 8 8 8ANDANDANDAND9 9 9 9OR XOROR XOROR XOROR XOR10101010SHORTSHORTSHORTSHORT17地址表达式在后面变量中
35、讲地址表达式在后面变量中讲18四、伪指令四、伪指令bb段定义伪指令SEGMENT/ENDSbb符号定义伪指令bb变量定义伪指令bbLABEL类型定义伪指令bb假定伪指令ASSUMEbb置汇编地址计数器伪指令ORGbb源程序结束伪指令19 段定义伪指令 因因因因8086/8088 8086/8088 8086/8088 8086/8088 CPUCPUCPUCPU的存储器是分段的的存储器是分段的的存储器是分段的的存储器是分段的,这就需要有段定义语句。这就需要有段定义语句。这就需要有段定义语句。这就需要有段定义语句。1 1 1 1、段定义伪指令的格式如下:、段定义伪指令的格式如下:、段定义伪指令的
36、格式如下:、段定义伪指令的格式如下:段名段名段名段名 SEGMENT SEGMENT SEGMENT SEGMENT 定位类型定位类型定位类型定位类型 组合类型组合类型组合类型组合类型 类别类别类别类别 段名段名段名段名 ENDSENDSENDSENDS解释:解释:解释:解释:SEGMENTSEGMENTSEGMENTSEGMENT和和和和ENDSENDSENDSENDS这两个伪指令总是成对出现,二者前面的段名一这两个伪指令总是成对出现,二者前面的段名一这两个伪指令总是成对出现,二者前面的段名一这两个伪指令总是成对出现,二者前面的段名一致致致致,由用户起。二者之间的删节部分,一般是符号、变量定
37、义等由用户起。二者之间的删节部分,一般是符号、变量定义等由用户起。二者之间的删节部分,一般是符号、变量定义等由用户起。二者之间的删节部分,一般是符号、变量定义等伪指令。对于数据段、附加段及堆栈段同数据段,对于代码段伪指令。对于数据段、附加段及堆栈段同数据段,对于代码段伪指令。对于数据段、附加段及堆栈段同数据段,对于代码段伪指令。对于数据段、附加段及堆栈段同数据段,对于代码段一般则是指令。一般则是指令。一般则是指令。一般则是指令。20、符号定义伪指令、符号定义伪指令l l 等值伪指令等值伪指令等值伪指令等值伪指令EQUEQUEQUEQU格式:格式:格式:格式:符号名符号名符号名符号名 EQUEQ
38、UEQUEQU 表达式表达式表达式表达式 例:例:例:例:A A A AEQUEQUEQUEQU100100100100B B B BEQUEQUEQUEQUA A A A说明:说明:说明:说明:EQUEQUEQUEQU伪指令在伪指令在伪指令在伪指令在未解除前未解除前未解除前未解除前,不能重新定义不能重新定义不能重新定义不能重新定义。l l等号等号等号等号(=)(=)(=)(=)伪指令伪指令伪指令伪指令与与与与EQUEQUEQUEQU类似类似类似类似,但但但但允许重新定义允许重新定义允许重新定义允许重新定义例:例:例:例:EMP=7EMP=7EMP=7EMP=7;值为值为值为值为7 7 7 7
39、EMP=EMP=EMP=EMP=;值为值为值为值为8 8 8 8已用已用EQUEQU定义的符号定义的符号,可可用用PURGEPURGE解除解除,再重新再重新定义。定义。格式:格式:PURGEPURGE符号符号1 1,符号符号2 2,.,符号,符号n n例例:A AEQUEQU100100 PURGE PURGEA A A AEQUEQU20020021、变量定义伪指令、变量定义伪指令变量是内存中数据区的首地址名字,故定义变量变量是内存中数据区的首地址名字,故定义变量变量是内存中数据区的首地址名字,故定义变量变量是内存中数据区的首地址名字,故定义变量的伪指令又可叫数据定义伪指令。这类伪指令的伪指
40、令又可叫数据定义伪指令。这类伪指令的伪指令又可叫数据定义伪指令。这类伪指令的伪指令又可叫数据定义伪指令。这类伪指令格式格式格式格式为:为:为:为:变量名变量名 伪指令助记符伪指令助记符 操作数操作数 ;注释;注释(1)(1)(1)(1)变量名变量名变量名变量名用符号地址表示;用符号地址表示;用符号地址表示;用符号地址表示;(2)(2)(2)(2)伪指令助记符伪指令助记符伪指令助记符伪指令助记符有如下几种:有如下几种:有如下几种:有如下几种:DBDB(字节字节字节字节)、)、DW DW(字字字字)、)、DDDD(双字双字双字双字)、)、DFDF、DQDQ、DTDT(3)(3)操作数操作数操作数操
41、作数可以是常数或表达式;可以是常数或表达式;可以是常数或表达式;可以是常数或表达式;(4)(4)(4)(4)注释注释注释注释用来说明伪指令的功能,它亦可有可无。用来说明伪指令的功能,它亦可有可无。用来说明伪指令的功能,它亦可有可无。用来说明伪指令的功能,它亦可有可无。解释:解释:22表达式:表达式:表达式:表达式:表表表表达达达达式式式式项项项项是是是是给给给给变变变变量量量量或或或或指指指指定定定定存存存存储储储储单单单单元元元元赋赋赋赋予予予予初初初初值值值值,它它它它有有有有以以以以下下下下几种形式:几种形式:几种形式:几种形式:(1 1 1 1)数值表达式)数值表达式)数值表达式)数值
42、表达式(2 2 2 2)字符串表达式)字符串表达式)字符串表达式)字符串表达式(3 3 3 3)地址表达式(只适用)地址表达式(只适用)地址表达式(只适用)地址表达式(只适用DWDWDWDW和和和和DDDDDDDD两个伪指令)两个伪指令)两个伪指令)两个伪指令)(4 4 4 4)?表达式表达式表达式表达式(5 5 5 5)带)带)带)带DUPDUPDUPDUP的表达式的表达式的表达式的表达式23汇编后如下图所示:汇编后如下图所示:ACB10510H100H100-4600FFFBHData segmentData segmentA A DB DB DB DB 10,5,10H10,5,10HB
43、 B DWDWDWDW 100H,100,-4100H,100,-4C C DDDDDDDD 2*30,0FFFBH2*30,0FFFBHData endsData ends数值表达式举例数值表达式举例24操作数可以是操作数可以是操作数可以是操作数可以是字符串字符串字符串字符串STRSTRSTRSTRDBDBDBDBHELLOHELLOHELLOHELLO汇编后如下:汇编后如下:汇编后如下:汇编后如下:STRSTRHELLO注意注意下面的不同:下面的不同:A ADB ABDB ABA DW ABA DW AB 41 A 41 A 42 42BB 42 B 42 B 4141AA说明:当说明:当
44、DB定义的定义的数据是字符串时,数据是字符串时,按字符在字符串中按字符在字符串中出现的先后次序分出现的先后次序分配内存单元。配内存单元。字符串表达式举例字符串表达式举例25例例例例3 3 3 3:X DW X DW X DW X DW,$+,$+,$+,$+,$+,$+,$+,$+Len db$-xLen db$-xLen db$-xLen db$-x设设设设X X X X的偏移地址为的偏移地址为的偏移地址为的偏移地址为0000000000000000H,H,H,H,则汇编后如下图所示:则汇编后如下图所示:则汇编后如下图所示:则汇编后如下图所示:x 0000H030004000E000c000
45、4H000AHP72P72例例len0004H+4000AH+40012地址表达式举例地址表达式举例26 算术运算符也可以用于算术运算符也可以用于算术运算符也可以用于算术运算符也可以用于地址表达式地址表达式地址表达式地址表达式,地址表达式的基本形式地址表达式的基本形式地址表达式的基本形式地址表达式的基本形式为:为:为:为:变量名或标号名变量名或标号名变量名或标号名变量名或标号名数值表达式数值表达式数值表达式数值表达式或或或或变量名或标号名变量名或标号名变量名或标号名变量名或标号名数值表达式数值表达式数值表达式数值表达式说明:对地址运算的结果应有明确的说明:对地址运算的结果应有明确的说明:对地址
46、运算的结果应有明确的说明:对地址运算的结果应有明确的物理意义物理意义物理意义物理意义,例两个地址的乘例两个地址的乘例两个地址的乘例两个地址的乘或除无意义。或除无意义。或除无意义。或除无意义。例例例例:LEA SI,LEA SI,LEA SI,LEA SI,SUM+3SUM+3SUM+3SUM+3;SUMSUMSUMSUM为一变量为一变量为一变量为一变量mov ax,BUF1-BUF2mov ax,BUF1-BUF2mov ax,BUF1-BUF2mov ax,BUF1-BUF2 表示变量表示变量表示变量表示变量SUMSUMSUMSUM的地址加上的地址加上的地址加上的地址加上3 3 3 3得到的
47、和作为新存储单元的地址。得到的和作为新存储单元的地址。得到的和作为新存储单元的地址。得到的和作为新存储单元的地址。地址表达式地址表达式地址表达式地址表达式27说明:说明:说明:说明:()变量和标号是最简单的地址表达式;()变量和标号是最简单的地址表达式;()变量和标号是最简单的地址表达式;()变量和标号是最简单的地址表达式;()地址表达式所表示的偏移地址是在汇编时由()地址表达式所表示的偏移地址是在汇编时由()地址表达式所表示的偏移地址是在汇编时由()地址表达式所表示的偏移地址是在汇编时由MASMMASMMASMMASM计算的;计算的;计算的;计算的;()两个地址表达式的()两个地址表达式的(
48、)两个地址表达式的()两个地址表达式的差差差差表示两个地址之间的距离(即字节表示两个地址之间的距离(即字节表示两个地址之间的距离(即字节表示两个地址之间的距离(即字节数)数)数)数)而且两个地址必须在而且两个地址必须在而且两个地址必须在而且两个地址必须在同一个段内同一个段内同一个段内同一个段内;()两个地址表达式相加是没有意义的()两个地址表达式相加是没有意义的()两个地址表达式相加是没有意义的()两个地址表达式相加是没有意义的地址表达式(续)地址表达式(续)地址表达式(续)地址表达式(续)28$:可用在可用在可用在可用在硬硬硬硬指令中,也可用在指令中,也可用在指令中,也可用在指令中,也可用在
49、伪伪伪伪指令中。在指令中。在指令中。在指令中。在伪伪伪伪指令中指令中指令中指令中使用使用使用使用$,$,$,$,表示的是表示的是表示的是表示的是地址计数器地址计数器地址计数器地址计数器的当前值;的当前值;的当前值;的当前值;地址计数器地址计数器$汇编程序的汇编程序的地址计数器地址计数器:每进入一个新段,地址计数器清零;每进入一个新段,地址计数器清零;每分配一个单元,地址计数器自动加每分配一个单元,地址计数器自动加1,指向下一个待分配的,指向下一个待分配的单元单元;代表当前值。代表当前值。在在硬硬指指令令中中使使用用$,它它表表示示本本条条指指令令的的第第一一个个字字节节的的地地址址(本本条指令
50、的首地址)。如:条指令的首地址)。如:JNEJNE$6 6$6 6表表示示的的转转向向地地址址是是JNEJNE指指令令的的首首地地址址加加上上6 6。它它必必须须是是另另一一条指令的条指令的首地址首地址。29例例例例3 3 3 3:X DW X DW X DW X DW,$+,$+,$+,$+,$+,$+,$+,$+Len db$-xLen db$-xLen db$-xLen db$-x设设设设X X X X的偏移地址为的偏移地址为的偏移地址为的偏移地址为0000000000000000H,H,H,H,则汇编后如下图所示:则汇编后如下图所示:则汇编后如下图所示:则汇编后如下图所示:x 0000