1、1二、汇编语言与汇编程序2.1 符号指令中的表达式;符号指令中的表达式;2.2 符号指令的寻址方式;符号指令的寻址方式;2.3 常用指令;常用指令;2.4 伪指令;伪指令;2.5 常用系统功能调用与常用系统功能调用与BIOS。22.1符号指令中的表达式1.常量和数值表达式;常量和数值表达式;2.变量和地址表达式;变量和地址表达式;3.标号;标号;4.标量和标号类型的变更。标量和标号类型的变更。31.常量和数值表达式1.1.常量:常量:指在汇编时已经有确定数值,程序指在汇编时已经有确定数值,程序执行期间不变的量执行期间不变的量.(1)汇编语言使用的常量:汇编语言使用的常量:2进制(进制(1011
2、0110B)、)、8进制进制(1234Q)、10进制进制(123D)、16进制进制(01A8H)、ASCII码字符(码字符(welcome,1234)(2)应应用用:用用于于伪伪指指令令给给变变量量赋赋值值、或或机机器器指指令令语语句句中的操作数、寻址方式中的位移量等中的操作数、寻址方式中的位移量等4(3)分类:分类:数值常量:直接以数值出现,如数值常量:直接以数值出现,如0B7H 符符号号常常量量:由由括括起起来来的的一一串串字字符符,最最 长长225个个字字符符,如如12345678,hello(4)符号常量的定义:伪指令符号常量的定义:伪指令EQU或或“”eg:P EQU 314;P31
3、42.2.数值表达式:数值表达式:是由常量和算术、逻辑、关系等运是由常量和算术、逻辑、关系等运算符组成的有意义的式子。算符组成的有意义的式子。52.变量和地址表达式变量:变量:存储器中的数据或数据区的符号表示。存储器中的数据或数据区的符号表示。变量名变量名:是数据的地址或数据区的首地址。:是数据的地址或数据区的首地址。地址表达式地址表达式:由变量、常量、寄存器:由变量、常量、寄存器(SI、DI、BX、BP)的内容和运算符组成的有意义的式子。的内容和运算符组成的有意义的式子。变变量量或或地地址址表表达达式式可可给给出出指指令令中中的的存存储储器器的的地地址址。由由于于存存储储器器是是分分段段使使
4、用用的的,因因此此变变量量或或地地址址表表达达式式都都具具有有3重属性:重属性:段地址、偏移地址和类型段地址、偏移地址和类型。6变量的段地址变量的段地址:变量所在段的段首地址除:变量所在段的段首地址除以以10H之商;当要访问某变量时,其段地之商;当要访问某变量时,其段地址一定要在相应的段寄存器中。址一定要在相应的段寄存器中。变量的偏移地址变量的偏移地址:变量所在段的段首址到:变量所在段的段首址到该变量所在存储单元的字节距离,即该变量所在存储单元的字节距离,即EA。变量的段地址和偏移地址分别用变量的段地址和偏移地址分别用SEG或或OFFSET两个算符来指定。两个算符来指定。例如:变量例如:变量W
5、的段地址和偏移地址分别表示为的段地址和偏移地址分别表示为SEG W和和OFFSET W。变量的类型:变量的类型:存取某变量的字节数,存取某变量的字节数,Byte、Word、Dword、Qword、Tbyte7变量的定义变量名变量名 数据定义伪指令数据定义伪指令 表达式表达式,变量名变量名:数据的地址或数据区的首地址数据的地址或数据区的首地址 数据定义伪指令:数据定义伪指令:DB(定义字节定义字节)、DW(定义字定义字)、DD(定义双字定义双字)、DQ(定义定义4字字)、DT(定义定义10字节字节),根据定义的字节数自动给变量分配根据定义的字节数自动给变量分配存储单元。存储单元。表达式表达式:数
6、值表达式、数值表达式、ASCII码字符串、地址码字符串、地址表达式、?及表达式、?及n DUP(表达式)(表达式)8数值表达式:数值表达式:A1 DB (1*3),(15/3)ASCII码字符串码字符串:B2 DB 1234,ABCD(DB给每个字节分配一个单元,字符从左至右按地址递增顺序排列)地址表达式:只能用于DW或DD,表达式为一变量或标号DW定义:取其偏移地址初始化变量,egADWVALUE;取VALUE偏移地址初始化ADD定义:取其段地址和偏移地址初始化变量,egADDVALUE;取VALUE段地址和偏移地址初始化A,髙位字为VALUE段地址,低位字为其偏移地址?:变量无确定的值,用
7、于预留若干字节存储单元以存放结果n DUP:DUP为重复字句,为重复字句,n为重复因子为重复因子egADB2DUP(0,3DUP(1);011101119 例例如如,在在数数据据段段DATAl中中定义的变量如下:定义的变量如下:Wl DW B3;B1 DB AB$;W2 DW -5,1994H;B2 DB 4 DUP(?);D DD EB ;B3 DB 2 DUP(-1)DB l DUP(10,E);DB 13,1,3在在附附加加数数据据段段DATA2中中定定义的变量如下:义的变量如下:EB DB 8 DUP(?)EW DW AB,CD103.标号标号标号是指令地址的符号表示,也可以是过程名。
8、过程是指令地址的符号表示,也可以是过程名。过程名是过程入口地址的符号表示,即过程的第一条指令名是过程入口地址的符号表示,即过程的第一条指令的地址。的地址。标号的标号的定义方式定义方式有两种:有两种:(1)用用“:”定义,直接写在指令助记符前。定义,直接写在指令助记符前。如如 CYCLE:MOV AL,SI (2)用用PROC和和ENDP伪指令定义过程。伪指令定义过程。标标号号代代表表指指令令的的地地址址,因因而而它它也也有有3个个属属性性:段段地地址址、偏移地址和类型。偏移地址和类型。标号的段地址标号的段地址:定义该标号所在段的段地址。:定义该标号所在段的段地址。标标号号的的偏偏移移地地址址:
9、标标号号所所在在段段的的段段首首址址到到该该标标号号定定 义指令的字节距离。义指令的字节距离。标号的类型标号的类型有有NEAR和和FAR两种。两种。114.变量和标号类型的变更格式格式:类型类型 PTR 地址表达式地址表达式PTR算符用来明确指出某个变量、标号或地址表达式算符用来明确指出某个变量、标号或地址表达式的类型属性,或者使它们临时兼有与原定义所不同的的类型属性,或者使它们临时兼有与原定义所不同的类型属性类型属性,但仍保持它们原来的,但仍保持它们原来的段地址段地址和和偏移地址偏移地址属属性不变。性不变。如:如:BYTE PTR W1WORD PTR B3 BYTE PTR BX+312指
10、令指令(Instruction):让计算机完成某种操作的命令。指令系统指令系统(Instruction System):指令的集合。2.2符号指令的寻址方式一、概一、概 述述指令指令控制计算机完成指定操作的命令控制计算机完成指定操作的命令机器指令机器指令指令的二进制代码形式。例如:指令的二进制代码形式。例如:CD21H汇编指令汇编指令助记符形式的指令。例如:助记符形式的指令。例如:INT 21H指令系统指令系统CPU所有指令及其使用规则的集合所有指令及其使用规则的集合138086汇编语言指令的语句格式汇编语言指令的语句格式标号标号:指令助记符指令助记符 操作数操作数 ;注释;注释(1)标号:指
11、令所在地址的符号,符合以下规则:标号:指令所在地址的符号,符合以下规则:由字母由字母(az,AZ)、数字数字(09)或某些特殊或某些特殊字符字符(,_,?)等组成;等组成;首字符是字母或某些特殊字符,但首字符是字母或某些特殊字符,但“?”不能不能单独作标识符;单独作标识符;有效长度为有效长度为131个字符。个字符。14(2)指令助记符:指令助记符:指出指令的操作类型。(3)操作数:操作数:参加本指令运算的数据。(4)注释:注释:指令功能的说明。15有效地址有效地址EA(Effective Address)内存单元的地址:段基址内存单元的地址:段基址 16+段内偏移量段内偏移量EA16指令包含的
12、信息指令包含的信息(1)做什么操作做什么操作(2)操作数的来源操作数的来源(3)操作结果的存数操作结果的存数(4)下一条指令的位置下一条指令的位置17指令的基本构成说明说明要执要执行的是什行的是什么操作么操作操作对象,操作对象,可以有可以有0个、个、1个或个或2个个目的目的源源18指令举例:ADDAX,SI+6MOVAX,BX操作码操作数INCBXHLT19双操作数指令双操作数指令 ADD AX,BX 大多数运算型指令都是双操作数指令,对这种大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用指令,有的机器(大中型)使用“三地址三地址”指令:指令:除给出参加运算的两个操作数外,
13、还要指出运算结除给出参加运算的两个操作数外,还要指出运算结果的存放地址。果的存放地址。现代微型计算机中多采用二地址指令,两现代微型计算机中多采用二地址指令,两个操作数分别称为个操作数分别称为“源操作数源操作数”和和“目的操目的操作数作数”,指令执行后,把运算结果放到目的操,指令执行后,把运算结果放到目的操作数的地址之中。作数的地址之中。20指令系统设计一个指令系统能够提供哪些寻址方式,能否为一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关编制程序提供方便,这是指令系统设计的关键。键。需要说明的是,在不同的计算机系统中,寻址需要说明的是,在不同的计算机系统中,寻址方
14、式的名称和分类并不统一,但基本可以归方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的变型或组合:结为以下几种方式或它们的变型或组合:21二、二、8088/8086的操作数分为的操作数分为3类类1 1、立即数(常数)立即数(常数)取值范围如下表:8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128127)8000H-7FFFH(-3276832767)MOV AX,0FA00H;正确正确MOV 8000H,DX;错误错误222 2、寄存器操作数寄存器操作数放在放在8个个通用寄存器通用寄存器或或4个个段寄存器段寄存器中
15、的操作数中的操作数23只能存放字操作数只能存放字操作数段寄存器存放段寄存器存放当前操作数的当前操作数的段基地址段基地址不允许将立即数传送到段寄存器不允许将立即数传送到段寄存器SIDIBPSPCSDSESSS243 3、存储器操作数存储器操作数存储器操作数存储器操作数字节字节字字双字双字124类型类型存储单元个数存储单元个数一般一般不允许不允许两个两个操作数同时为存储器操作数操作数同时为存储器操作数25存储单元的存储单元的物理地址物理地址=段基地址段基地址16+偏移地址偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。存储器操作数的偏移地址(也称有效地址)
16、可以通过存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。不同的寻址方式由指令给出。例如,若例如,若(BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令,则以下指令的结果是一样的:的结果是一样的:MOV AL,2A00HMOV AL,BX+0A00HMOV AL,BXSIMOV AL,DI26一条指令的执行时间一条指令的执行时间=指令的执行时间指令的执行时间取指令取指令取操作数取操作数执行指令执行指令传送结果传送结果单位用时钟周期数表示单位用时钟周期数表示结论:结论:1)尽量使用寄存器作为操作数)尽量使用寄存器作为操作数 2)若有可能,用移位代替乘
17、除法)若有可能,用移位代替乘除法 3)尽量使用简单的寻址方式)尽量使用简单的寻址方式27寻址方式寻址方式寻找操作数的方法寻找操作数的方法l寻找操作数的地址寻找操作数的地址在在8086指令系统中,说明操作数所在地指令系统中,说明操作数所在地址的寻址方式可分为址的寻址方式可分为8种种:立即寻址立即寻址 寄存器相对寻址寄存器相对寻址 寄存器寻址寄存器寻址 基址基址-变址寻址变址寻址 直接直接寻址寻址 相对的基址相对的基址-变址寻址变址寻址 间接寻址间接寻址 隐含寻址隐含寻址三、三、80868086的寻址方式的寻址方式28l 操作数操作数(为一常数为一常数)直接直接由指令给出由指令给出 (此操作数称为
18、立即数此操作数称为立即数)l 立即寻址只能用于源操作数立即寻址只能用于源操作数,用于寄存器或用于寄存器或存储器赋初值,与寄存器或存储器操作数进行存储器赋初值,与寄存器或存储器操作数进行算术逻辑运算算术逻辑运算l 例:例:MOV AX,1C8FH MOV AL,8FH ADD AX,100H 错误例:错误例:MOV 2A00H,AX 1.立即寻址立即寻址29立立即即数数操作码操作码低低8位位高高8位位存储器存储器MOV操作码操作码02H31HAHAL代码段代码段立即寻址指令在存立即寻址指令在存储器中的存放形式储器中的存放形式AX指令操作例:指令操作例:MOV AX,3102H ;AX 3102H
19、 执行后,执行后,(AH)=31H,(AL)=02H302.寄存器寻址寄存器寻址l 操作数放在某个寄存器中操作数放在某个寄存器中l 源操作数与目的操作数字长要相同源操作数与目的操作数字长要相同l 寄存器寻址与段地址无关寄存器寻址与段地址无关l 例:例:MOV AX,BX MOV 3F00H,AX MOV CL,AL 错误例:错误例:MOV AX,BL ;字长不同字长不同 MOV ES:AX,DX ;寄存器与段无关寄存器与段无关31AXSI2233H2233H指令操作例:指令操作例:MOV SI,AX ;SI (AX)指令执行前:(AX)=2233H指令执行后:(AX)=2233H,(SI)=2
20、233HAX是累加器,结果存放在是累加器,结果存放在AX的话,执行时间要短些。的话,执行时间要短些。通通用用寄寄存存器器是是处处理理器器的的一一部部分分,采采用用寄寄存存器器寻寻址址方方式式可可以提高效率。以提高效率。323.直接寻址直接寻址l 指令指令中直接给出操作数的中直接给出操作数的16位位偏移地址偏移地址 偏移地址也称为有效地址偏移地址也称为有效地址(EA,Effective Address)l 默认的段寄存器为默认的段寄存器为DS,但也可以显式地指定其他,但也可以显式地指定其他段寄存器段寄存器称为段超越前缀称为段超越前缀l 偏移地址也可用偏移地址也可用符号地址符号地址来表示,如来表示
21、,如ADDR、VARl 例:例:MOV AX,2A00H MOV DX,ES:2A00H MOV ES:2A00H,DX MOV SI,TABLE_PTR33指令操作例:指令操作例:MOV AX,3102H AL (3102H),AH (3103H)如果(DS)=2000H,(23102H)=CDH,(23103H)=ABH则操作数的物理地址为:20000H+3102H=23102H指令执行后:(AX)=ABCDHMOV操作码操作码02H31HAHAL23102HCDHABH存储器存储器代码段数据段.344.寄存器间接寻址寄存器间接寻址l 操作数操作数的的偏移地址偏移地址(有效地址有效地址EA
22、)放在放在寄存器寄存器中中l 只有只有SISI、DIDI、BXBX和和BPBP可作间址寄存器可作间址寄存器 l 例:例:MOV AX,BX MOV CL,CS:DI 错误例错误例:MOV AX,DX MOV CL,AXEA=(BX)(BP)(SI)(DI)35(1)EA=BXSIDI若没有前缀指明具体的段寄存器,若没有前缀指明具体的段寄存器,则操作数在数据段则操作数在数据段DS中中(2)EA=BP 若没有前缀指明具体的段寄存器,若没有前缀指明具体的段寄存器,则操作数在堆栈段则操作数在堆栈段SS。36指令操作例指令操作例:MOV AX,SI若若(DS)=6000H,(SI)=1200H,(612
23、00H)=44H,(61201H)=33H则指令执行后,则指令执行后,(AX)=3344H。44H33H60001200DSSI600006120061200HAX存储器存储器数据段+)120044H33H375.寄存器相对寻址(包括基址寻址和变址寻址)寄存器相对寻址(包括基址寻址和变址寻址)l EA=间址寄存器的间址寄存器的内容加上内容加上一个一个8或或16位的位的位移量位移量寄存器相对寻址寄存器相对寻址常用于存取表格或一维数组中的常用于存取表格或一维数组中的元素元素把把表格的起始地址作为位移量表格的起始地址作为位移量,元素的下元素的下标值放在间址寄存器中标值放在间址寄存器中(或反之)(或反
24、之)EA=(BX)(BP)(SI)(DI)+8位位16位位位移量位移量 38(1)若若EA=BXSIDI+8位或位或16位偏移量位偏移量则操作数地址则操作数地址 DS:EA(2)若若EA=BP+8位或位或16位偏移量位偏移量则操作数地址:则操作数地址:SS:EA39l 例:例:MOV AX,BX+8 MOV CX,TABLESI MOV AX,BP ;默认段寄存器为默认段寄存器为SSl 指令操作例:指令操作例:MOV AX,DATABX 若若(DS)=6000H,(BX)=1000H,DATA=2A00H,(63A00H)=66H,(63A01H)=55H 则物理地址则物理地址=60000H+
25、1000H+2A00H=63A00H 指令执行后指令执行后:(AX)=5566H(见下页图示)(见下页图示)40操作码操作码00偏移量低2A偏移量高DS6000BX1000+DATA2A0063A0063A00HAHALAX代码段数据段.66H55HMOV AX,DATABX416.基址基址-变址寻址变址寻址l 若操作数的偏移地址:若操作数的偏移地址:由由基址寄存器基址寄存器(BX(BX或或BP)BP)给出给出 基址寻址方式基址寻址方式 由由变址寄存器变址寄存器(SI(SI或或DI)DI)给出给出 变址寻址方式变址寻址方式l 由一个基址寄存器由一个基址寄存器的的内容内容和一个变址寄存器和一个变
26、址寄存器的的内内容相加容相加而而形成形成操作数的操作数的偏移地址偏移地址,称为称为基址基址-变址寻变址寻址。址。EA=(BX)(BP)+(SI)(DI)l 同一组内的寄存器不能同时出现同一组内的寄存器不能同时出现。42例:例:MOV AX,BX SI MOV AX,BX+SI MOV AX,DS:BP DI错误例:错误例:MOV AX,BX BP MOV AX,DI SI4383000操作码操作码DS8000B X2000+SI100083000HAHALAX代码段数据段.YYXX指令操作例:指令操作例:MOV AX,BXSI假定:假定:(DS)=8000H,(BX)=2000H,SI=100
27、0H则物理地址则物理地址 =80000H+2000H+1000H=83000H=80000H+2000H+1000H=83000H指令执行后指令执行后:(:(AL)AL)=83000H83000H (AH)AH)=83001H83001H 447.相对的基址相对的基址-变址寻址变址寻址l 在在基址基址-变址寻址的基础上再加上一个相对位变址寻址的基础上再加上一个相对位移量移量l 注意事项同注意事项同基址基址-变址寻址变址寻址EA=(BX)(BP)+(SI)(DI)+8位位16位位位移量位移量 l 例:例:MOV AX,BASE SI BXMOV AX,BX+BASE SIMOV AX,BX+SI
28、+BASEMOV AX,BX BASE SIMOV AX,BX+SI BASE45指令指令操作例:操作例:MOV AX,DATADIBX若若(DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H则指令执行后则指令执行后(AH)=83201H,(AL)=83200H8320083200HAHALAX+DATA0200操作码操作码代码段数据段.YYXXDS8000BX2000DI100046使用相对的基址使用相对的基址-变址寻址方式可以很方便地访变址寻址方式可以很方便地访问二维数组问二维数组。基址寄存器基址寄存器数组首地址数组首地址变址寄存器变址寄存器数组元素数组元素
29、行行址址位移量位移量数组元素数组元素列列址址(偏移地址)(偏移地址)478.隐含寻址隐含寻址l 指令操作数是隐含的,在指令中未显式地指明。指令操作数是隐含的,在指令中未显式地指明。l 例:例:MUL BL 指令隐含了被乘数指令隐含了被乘数AL及乘积及乘积AXl 类似的指令还有:类似的指令还有:DIV、CBW、MOVS等等(AL)(BL)AX48分别指出下列指令中源操作数的寻址方式。(1)MOVBX,1000H(2)ADDAX,SI4(3)MOVDI,1000H(4)SUBAX,BP+DI+5(5)MOVAX,BX49指出下列指令中源操作数的寻址方式,并计算源操作数的物理地址。设(DS)=200
30、0H,(ES)=3000H,(SS)=4000H,(SI)=100H,(BX)=200H,(BP)=300H。1)MOVAX,BX+162)MOVAX,0040H3)MOVAX,BP4)MOVAX,ES:BXSI5)MOVAX,BXSI0050H1)基址寻址;2020FH2)直接寻址;20040H3)间接寻址;40300H4)基址变址寻址;30300H5)基址变址寻址;20350H50设有关寄存器及存储单元的内容如下(DS)=1000H,(BX)=0100H,(SI)=0001H(10100H)=12H,(10101H)=34H,(10102H)=78H,(11200H)=2AH,(11201
31、H)=20H,(11202H)=0B7H,(11203H)=65H。试说明下列各条指令执行完后,求(AX)是多少?(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,1200H(4)MOVAX,BXSI;(5)MOVAX,1100HBXSI(1)(AX)1200H(2)(AX)0100H(3)(AX)202AH(4)(AX)7834H(5)(AX)0B720H51小结小结指令由(指令由()和()和()构成)构成如何取得操作数如何取得操作数称为(称为()操作码操作码 操作数操作数寻址寻址52寄存器间接、寄存器相对、基址变址、相对寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:基址变址四种寻址方式的比较:寻址方式寻址方式 指令操作数形式指令操作数形式 n 寄存器间接寄存器间接 只有一个寄存器(只有一个寄存器(BX/BP/SI/DI之一)之一)n 寄存器相对寄存器相对 一个寄存器加上位移量一个寄存器加上位移量n 基址基址变址变址 两个不同类别的寄存器两个不同类别的寄存器n 相对基址相对基址-变址变址 两个不同类别的寄存器加上位移量两个不同类别的寄存器加上位移量