指令系统与汇编语言程序设计-n

上传人:tia****g98 文档编号:248538503 上传时间:2024-10-24 格式:PPT 页数:114 大小:355KB
返回 下载 相关 举报
指令系统与汇编语言程序设计-n_第1页
第1页 / 共114页
指令系统与汇编语言程序设计-n_第2页
第2页 / 共114页
指令系统与汇编语言程序设计-n_第3页
第3页 / 共114页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本章主要教学内容,指令格式及寻址的有关概念,8086,CPU,指令系统的寻址方式及其应用,8086,CPU,各类指令的表示、功能、特点及其应用,Pentium,微处理器新增指令和寻址方式介绍,汇编语言的基本表达方式和内容,汇编语言程序设计的基本步骤和基本方法,顺序、分支、循环、子程序基本结构和设计方法,常用的,DOS,和,BIOS,中断调用简介,第3章,指令系统与汇编语言程序设计,1,本章教学目的及要求,通过学习,使学生掌握指令的寻址方式、指令系统及其应用;学会程序设计的基本方法;掌握程序设计的技巧,保证程序设计的质量。,第3章,指令系统与汇编语言程序设计,2,第3章,3.1,指令格式及寻址,1.,指令系统与指令格式,在计算机中要执行的各种操作命令称为指令。计算机所能执行的全部命令的集合即为该计算机的指令系统。,计算机指令以二进制编码的形式存放在存储器中,用二进制编码形式表示的指令称为机器指令,,CPU,可以直接识别机器指令。,人们采用一些助记符通常是指令功能的英文单词的缩写,如数据传送指令用助记符MOV(MOVE的缩写),,这样表示的指令称为符号指令,也称为汇编指令。汇编指令具有直观、易理解、好记忆的特点。,指令系统与汇编语言程序设计,3,第3章,指令系统与汇编语言程序设计,计算机中的汇编指令由操作码字段和操作数字段两部分组成。,(,1,)操作码字段:操作码表示计算机要执行的某种指令功能,由它来规定指令的操作类型,,说明计算机要执行的具体操作,例如传送、运算、移位、跳转等操作。,同时还指出操作数的类型、操作数的传送方向、寄存器编码或符号扩展等,,是指令中必不可少的组成部分。,(2)操作数字段:,操作数表示计算机在操作中所需要的数据,或者所需数据的存放位置(也称为地址码),,还可以是指向操作数的地址指针或其它有关操作数据的信息。,4,8086的指令格式如图,3-1,所示,指令的长度范围是,1,6,个字节。其中,操作码字段为,1,2,个字节(,B,1,、,B,2,),操作数字段为,0,4,个字节(,B,3,B,6,)。每条具体指令的长度将根据指令的操作功能和操作数的形式而定。,图,3-1 8086,的指令格式,第3章,指令系统与汇编语言程序设计,5,第3章,指令系统与汇编语言程序设计,2.,寻址及寻址方式的概念,计算机的指令中通常要指定操作数的位置,即给出操作数的地址信息,在执行时需要根据这个地址信息找到需要的操作数,这种寻找操作数的过程称为寻址。,寻址方式就是寻找操作数或操作数地址的方式。,不同机器的指令系统都规定了一些寻址方式以供编程时选择使用,根据给定的寻址方式,就可以方便地访问各类操作数。,6,第3章,指令系统与汇编语言程序设计,8086,指令中的操作数有三种可能的存放位置:,(,1,)操作数直接在指令中,即,跟随在指令操作码之后,,指令的操作数部分就是操作数本身,这种操作数叫立即操作数。,(,2,)操作数,存放在,CPU,的某个内部寄存器中,这时指令的操作数部分是,CPU,内部寄存器的一个编码,,称为寄存器操作数。,(,3,)操作数,存放,在,内存储器,的数据区中,这时指令的操作数部分包含此操作数所在的内存地址,,称为存储器操作数。,7,第3章,指令系统与汇编语言程序设计,3.2 8086 CPU,的寻址方式,3.2.1,立即数寻址,立即数寻址方式是指操作数直接存放在给定的指令中,紧跟在操作码之后。,立即数可以是,8,位或,16,位二进制数。,例如,给定如下指令,采用立即数寻址:,MOV AL, 10,;,十进制数(),MOV AL, 00100101B,;,二进制数(),MOV AX, 263AH,;,十六进制数(),8,第3章,指令系统与汇编语言程序设计,3.2.2,寄存器寻址,寄存器寻址方式是在指令中直接给出寄存器名,寄存器中的内容即为所需操作数。,在寄存器寻址方式下,操作数存在于指令规定的,8,位、,16,位寄存器中。寄存器可用来存放源操作数,也可用来存放目的操作数。,寄存器寻址方式是,CPU,内部的操作,不需要访问总线周期,因此指令的执行速度比较快。,对于,16,位操作数,寄存器可以是,AX,、,BX,、,CX,、,DX,、,SI,、,DI,、,SP,、,BP,等。,对于8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL等。,9,第3章,指令系统与汇编语言程序设计,3.2.3,存储器寻址,计算机中访问内存的寻址方式有多种,不管哪一种寻址方式,最终都将得到存放操作数的物理地址。采用,存储器寻址时,指令中需要给出操作数的地址信息。,存储器操作数的有效地址,EA,的计算方法和寻址方式有着密切地联系,而操作数物理地址,PA,的计算则和操作数的具体存放位置有关。,10,第3章,指令系统与汇编语言程序设计,1,直接寻址方式,直接寻址方式是一种针对内存的寻址方式。在这种寻址方式下,,指令中给出的地址码即为操作数的有效地址,EA,,,它是一个,8,位或,16,位的位移量。在默认方式下,操作数存放在数据段,DS,中,如果要对除,DS,段之外的其他段如,CS,、,ES,、,SS,中的数据寻址,应在指令中增加前缀,指出段寄存器名,这称为段跨越。,在直接寻址方式的指令中,操作数的有效地址,EA,已经给出,那么操作数的物理地址为:,PA,(,DS,),10H,EA,。,11,第3章,指令系统与汇编语言程序设计,2,寄存器间接寻址方式,寄存器间接寻址方式是指操作数的有效地址,EA,在指定的寄存器中,,这种寻址方式是在指令中给出寄存器,寄存器中的内容为操作数的有效地址。,16,位操作数寻址时,,EA,放在基址寄存器,BX,、,BP,或变址寄存器,SI,、,DI,中,所以该方式下操作数的物理地址计算公式有以下几个:,物理地址,PA,(,DS,),10H,(,BX,),物理地址,PA,(,DS,),10H,(,DI,),物理地址,PA,(,DS,),10H,(,SI,),物理地址,PA,(,SS,),10H,(,BP,),12,第3章,指令系统与汇编语言程序设计,3,寄存器相对寻址方式,这种寻址方式是在指令中给定一个基址寄存器或变址寄存器和一个,8,位或,16,位的相对偏移量,两者之和作为操作数的有效地址。当选择间址寄存器,BX,、,SI,、,DI,时,指示的是数据段中的数据,选择,BP,作间址寄存器时,指示的是堆栈段中的数据。,有效地址计算为:,EA,(,reg,),8,位或,16,位偏移量;其中,reg,为给定寄存器。,物理地址计算为:,PA,(,DS,),10H,EA,(使用,BX,、,SI,、,DI,间址寄存器),PA(SS)10HEA (使用BP作为间址寄存器),13,第3章,指令系统与汇编语言程序设计,4,基址变址寻址方式,在基址变址寻址方式中,有效地址,EA,是基址寄存器加变址寄存器,即两个寄存器的内容之和为操作数的有效地址。在该寻址方式中,当基址寄存器和变址寄存器的默认段寄存器不同时,一般由基址寄存器来决定默认用哪一个段寄存器作为段基址指针。若在指令中规定了段跨越,则可以用其他寄存器作为段基地址。,基址变址寻址方式的物理地址计算公式为:,物理地址,PA,(,DS,),10H,(,BX,),(,SI,),物理地址,PA,(,SS,),10H,(,BP,),(,DI,),14,第3章,指令系统与汇编语言程序设计,5,相对基址变址寻址方式,这种寻址方式是在指令中给出一个基址寄存器、一个变址寄存器和,8,位或,16,位的偏移量,三者之和作为操作数的有效地址。,基址寄存器可取,BX,或,BP,,变址寄存器可取,SI,或,DI,。,如果基址寄存器采用,BX,,则段寄存器使用,DS,;,如果基址寄存器采用,BP,,则段寄存器使用,SS,。,其物理地址计算为:,PA,(,DS,),10H,(,BX,)(,SI,)或(,DI,)偏移量,PA(SS)10H(BP)(SI)或(DI)偏移量,15,第3章,指令系统与汇编语言程序设计,3.2.4 I/O,端口寻址,由于8086CPU的I/O端口采用独立编址方式,可有64K个字节端口或32K个字端口。指令系统中设有专门的输入指令IN和输出指令OUT来进行访问,I/O端口的寻址方式有直接端口寻址和寄存器间接端口寻址两种。,16,第3章,指令系统与汇编语言程序设计,1,直接端口寻址,直接端口寻址是在指令中直接给出要访问的端口地址,一般采用,2,位十六进制数表示,可访问的端口数为,0,255,个。,例如:,IN例如:IN AL,30H,;表示从,I/O,端口地址为,30H,的端口中取出字节数据送到,8,位寄存器,AL,中。,IN AX,50H ;表示从I/O端口地址为50H和51H的两个相邻端口中取出字数据送到16位寄存器AX中。,17,第3章,指令系统与汇编语言程序设计,2,寄存器间接端口寻址,当访问的端口地址数,256,时,直接端口寻址不能满足要求,要采用,I/O,端口的间接寻址方式。它是把,I/O,端口的地址先送到寄存器,DX,中,用,16,位的,DX,作为间接寻址寄存器。此种方式可访问的端口数为,0,65535,个。,例如:,MOV DX,,,283H,;将端口地址,283H,送到,DX,寄存器。,OUT DX,AL ;将AL中的内容输出到DX所指定的端口中。,18,第3章,指令系统与汇编语言程序设计,3.3 8086 CPU,的指令系统,8086,指令系统是,80X86/Pentium,微处理器的基本指令集。指令的操作数可以是,8,位或,16,位,偏移地址是,16,位。按功能可将指令分成六大类,即:数据传送类,指令,、算术运算类,指令,、逻辑运算与移位类,指令,、串操作类,指令,、控制转移类,指令,和处理器控制类,指令,。,19,第3章,指令系统与汇编语言程序设计,3.3.1,数据传送类指令,数据传送类指令的基本功能是把操作数或操作数的地址传送到指定的寄存器或存储单元中。,数据传送类指令共有,14,条,,根据传送的内容可,分成以下,4,组,:,(,1,)通用数据传送指令;,(,2,)累加器专用传送指令;,(,3,)地址传送指令;,(4)标志寄存器传送指令。,20,第3章,指令系统与汇编语言程序设计,1.,通用数据传送指令,(,1,)传送指令,MOV,格式:,MOV dst,,,src,MOV,指令的功能是,把源操作数src传送至目的操作数dst,,执行后,源操作数内容不变, 目的操作数内容与源操作数内容相同。,源操作数可以是通用寄存器、段寄存器、存储器以及立即数,目标操作数可以是通用寄存器、段寄存器(,CS,除外)或存储器。,21,数据之间的传送关系如图,3-5,所示。,图,3-5,数据之间的传送关系,22,第3章,指令系统与汇编语言程序设计,使用,MOV,指令进行数据传送时要注意以下几点:,(1),段寄存器,CS,及立即数不能作为目标操作数;,(2),两个存储单元之间不允许直接传送数据;,(3)立即数不能直接传送到段寄存器;,(4),两个段寄存器之间不能直接传送数据;,(5),传送数据的类型必须匹配;,(6),MOV指令不影响标志,位。,23,第3章,指令系统与汇编语言程序设计,(,2,)堆栈操作指令,PUSH/POP,进栈指令:,PUSH opr,;,SP,SP,2,,将源操作数,opr,压入堆栈,出栈指令:,POP opr,;栈顶弹出字数据到目标操作数,opr,,,SP,SP+2,堆栈是存储器中的一个特殊区域,主要用于存入和取出数据,堆栈是以“先进后出”的方式进行数据操作的。在8086的堆栈组织中,堆栈从高地址向低地址方向生长,它只有一个出入口,堆栈指针寄存器SP始终指向堆栈的栈顶单元,24,第3章,指令系统与汇编语言程序设计,(,3,),XCHG,交换指令,XCHG,指令用来将源操作数和目的操作数的内容进行交换。它可以实现字节数据交换,也可以实现字数据交换。,该指令的操作数必须有一个是在寄存器中,即可以在两个通用寄存器之间或寄存器与存储器之间交换数据,但不能在两个存储器之间交换数据。指令执行结果不影响标志位。,25,第3章,指令系统与汇编语言程序设计,2.,累加器专用传送指令,8086指令系统中将累加器AX作为数据传输的核心,系统的输入/输出指令IN/OUT和换码指令XLAT就是专门通过累加器来执行的,称之为累加器专用传送指令。,26,第3章,指令系统与汇编语言程序设计,3.,地址传送指令,8086,的地址传送指令用于控制寻址机构,它可将存储器操作数的地址传送到,16,位目标寄存器中。这类指令有以下,3,种形式:,(,1,)有效地址送寄存器指令:,LEA reg,,,src,LEA,指令功能是将存储器操作数,src,的有效地址传送到,16,位的通用寄存器,reg,。,(,2,)地址指针送寄存器和,DS,指令:,LDS reg,,,src,该指令完成一个32位的地址指针传送,地址指针包括段地址和偏移地址两部分。,(,3,)地址指针送寄存器和,ES,指令:,LES reg,,,src,LES指令执行的操作与LDS指令相似,不同之处是以ES代替DS。,27,第3章,指令系统与汇编语言程序设计,4.,标志寄存器传送指令,8086,可通过这类指令读出当前标志寄存器中各标志位的内容,也可以重新设置各标志位的值。标志寄存器的传送指令共有,4,条,均位单字节指令,指令的操作数以隐含形式出现,隐含为,AH,寄存器。,(,1,)取标志指令,LAHF,(,2,)置标志位指令,SAHF,(,3,)标志寄存器入栈指令,PUSHF,(,4,)标志寄存器出栈指令,POPF,28,第3章,指令系统与汇编语言程序设计,3.3.2,算术运算类指令,8086,的算术运算类指令包括加、减、乘、除,4,种基本运算指令,以及为进行,BCD,码十进制数运算而设置的各种较正指令。,8086的基本算术运算指令中,除加1和减1指令外,其余均为双操作数指令,两个操作数中除了源操作数可为立即数外,必须有一个操作数在寄存器中,而单操作数指令则不允许采用立即数方式。,29,第3章,指令系统与汇编语言程序设计,加减法运算在执行过程中会产生溢出,无符号数运算时,如果加法运算最高位向前产生进位或减法运算最高位向前有借位,则表示出现溢出,采用标志位,CF=1,来表示;带符号数采用补码运算时,符号位也参与运算,出现溢出则表示运算结果发生了错误,采用标志位,OF=1,来表示。,30,第3章,指令系统与汇编语言程序设计,算术运算指令除加,1,指令,INC,不影响,CF,标志外,其余指令对,CF,、,OF,、,ZF,、,SF,、,PF,、,AF,等,6,个标志位均可产生影响,其规则如下:,无符号数运算产生溢出时,,CF,1,;,带符号数运算产生溢出时,,OF,1,;,当运算结果为,0,时,,ZF,1,;,当运算结果为负数时,,SF,1,;,当运算结果中有偶数个,1,时,,PF,1,;,当操作数为BCD码,低4位出现进位1时,AF1。,31,第3章,指令系统与汇编语言程序设计,1.,加法指令,(,1,)不带进位加法指令:,ADD dst,,,src,指令功能为:(,dst,)(,dst,),+,(,src,),(,2,)带进位的加法指令:,ADC dst,,,src,指令功能为:(,dst,)(,dst,),+,(,src,),+CF,(,3,)加,1,指令:,INC opr,指令功能为:(opr)(opr)+1,32,第3章,指令系统与汇编语言程序设计,2.,减法指令,(,1,)不带借位减法指令:,SUB dst,,,src,指令功能为:(,dst,)(,dst,)(,src,),(,2,)带借位的减法指令:,SBB dst,,,src,指令功能为:(,dst,)(,dst,)(,src,),CF,(,3,)减,1,指令:,DEC opr,指令功能为:(,opr,)(,opr,),1,(,4,)求补指令:,NEG opr,该指令将,opr,中的内容取,2,的补码,相当于将,opr,中的内容按位取反后末位加,1,。,(,5,)比较指令:,CMP opr1,,,opr2,指令功能为:(opr1)(opr2),33,第3章,指令系统与汇编语言程序设计,3.,乘法运算指令,乘法指令包括无符号数和带符号数相乘的指令,指令中只给出乘数,被乘数隐含给出。两个,8,位数相乘时被乘数放入,AL,中,,16,位数的乘积存放到,AX,中;两个,16,位数相乘时被乘数先放入,AX,寄存器中,,32,位数的乘积放到,DX,和,AX,两个寄存器中,规定,DX,中存放高,16,位,,AX,中存放低,16,位。,34,第3章,指令系统与汇编语言程序设计,(,1,)无符号数乘法指令:,MUL src,若,src,为字节数据,执行,AX,(,AL,)(,src,);,若,src,为字数据,执行,DX,、,AX,(,AX,)(,src,) (,2,)带符号数乘法指令:,IMUL src,该指令的执行功能与MUL相同。,35,第3章,指令系统与汇编语言程序设计,4.,除法运算指令,除法指令可用来实现两个无符号数或带符号数的除法运算,包括字和字节两种操作,该指令隐含使用,AX,和,DX,作为一个操作数,指令中给出的源操作数为除数。,(,1,)无符号数除法指令:,DIV src,DIV,指令的被除数、除数、商和余数全部为无符号数。,(,2,)带符号数除法指令:,IDIV src,IDIV,指令的被除数、除数、商和余数均为带符号数,且余数的符号位同被除数。,两条指令执行的操作功能如下:,当除数,src,为字节数据时,用,AX,除以,src,,得到的,8,位商保存在,AL,中,,8,位余数保存在,AH,中;,当除数src为字数据时,用DX、AX除以src ,得到的16位商保存在AX中,16位余数保存在DX中。,36,第3章,指令系统与汇编语言程序设计,5.,符号扩展指令,符号扩展指令是指用一个操作数的符号位形成另一个操作数,后一个操作数的各位是全,0,(正数)或全,1,(负数),符号扩展指令虽然使数据位数加长,但数据的大小并没有改变。该指令的执行不影响标志位。,(,1,)字节转换为字指令,CBW,该指令的功能是将,AL,中的符号位,D,7,扩展到,AH,中。,(,2,)字转换为双字指令,CWD,该指令的功能是将AX中的符号位扩展到DX中。,37,第3章,指令系统与汇编语言程序设计,6.,十进制调整指令,十进制数在计算机中是采用二进制数来表示的,这就是,BCD,码,要对十进制的,BCD,码进行算术运算,必须对得到的结果进行调整,否则结果无意义。,8086,指令系统提供了以下两类十进制调整指令。,(,1,)组合,BCD,码加法、减法调整指令,DAA,;组合,BCD,码加法调整指令,将,AL,中的和调整为组合,BCD,码,DAS,;组合,BCD,码减法调整指令,将,AL,中的差调整为组合,BCD,码,38,第3章,指令系统与汇编语言程序设计,(,2,)非组合,BCD,加法、减法调整指令,AAA,;非组合,BCD,加法调整指令,将,AL,中的和调整为非组合,BCD,码,AAS,;非组合,BCD,减法调整指令,将,AL,中的差调整为非组合,BCD,码,AAA和AAS分别用于加法指令(ADD、ADC)或减法指令(SUB、SBB)之后,执行时对AL进行测试,若AL中的低四位09H,或AF1,则进行AL(AL)06H修正;AL的高4位为0,同时AH(AH)1;CFAF1。调整后的结果放在AX中,39,第3章,指令系统与汇编语言程序设计,3.3.3,逻辑运算与移位类指令,1.,逻辑运算指令,有以下,5,条逻辑运算指令,它们可对,8,位或,16,位操作数按位进行逻辑运算。,(,1,)逻辑与指令:,AND dst,,,src,(,2,)逻辑或指令:,OR dst,,,src,(,3,)逻辑异或指令:,XOR dst,,,src,(,4,)逻辑非指令:,NOT dst,(,5,)测试指令:,TEST dst,,,src,。,40,第3章,指令系统与汇编语言程序设计,2.,移位指令,移位操作类指令可以对字节或字数据中的各位进行算术移位、逻辑移位或循环移位。,移位指令的格式为:,SHL/SAL/SHR/SAR,dst,,,1/ CL,循环移位指令的格式为:,ROL/ ROR/ RCL/,RCR,dst,,,1/ CL,上述指令分别对操作数进行逻辑左移,SHL,、算术左移,SAL,、逻辑右移,SHR,、算术右移,SAR,;,循环左移ROL、循环右移ROR、带进位的循环左移RCL、带进位的循环右移,RCR,等操作。操作数可以是字节或字操作。,图,3- 7,为各种移位操作的功能示意。,41,图,3-7,移位指令的操作功能示意,42,第3章,指令系统与汇编语言程序设计,3.3.4,串操作类指令,数据串是存储器中的一串字节或字的数据序列。,8086,指令系统中设置了串操作指令,其操作对象是内存中地址连续的字节串或字串。在每次操作后能够自动修改地址指针,为下一次操作作准备。,基本串操作指令有串传送(,MOVS,)、串比较(,CMPS,)、串扫描(,SCAS,)、串存取(,LODS,、,STOS,)等。任何一个基本串操作指令的前面都可以加一个重复操作前缀,使指令操作重复,这样在处理长数据串时要比用循环程序速度快得多。,43,第3章,指令系统与汇编语言程序设计,3.3.5,控制转移类指令,程序的执行一般是按指令顺序逐条执行的,但有时需要改变程序的执行流程。控制转移类指令就是用来改变程序执行的方向,也就是修改,IP,和,CS,的值。,通过控制转移指令可实现各种结构化程序设计,如分支结构程序、循环结构程序等。,(,1,)如果指令给出改变,IP,中内容的信息,转移的目标位置和转移指令在同一个代码段,则称为段内转移;,(,2,)如果指令给出改变,IP,中内容的信息,又给出改变,CS,中内容的信息,转移的目标位置和转移指令不在同一个代码段,则称为段间转移。,根据转移指令的功能,可分为无条件转移指令、条件转移指令、循环控制指令、子程序调用和返回指令4类。,44,第3章,指令系统与汇编语言程序设计,1.,无条件转移指令,无条件转移指令,JMP,用来控制程序转移到指定的位置去执行,指令中要给出转移位置的目标地址,通常有以下,5,种形式:,JMP SHORT opr,;段内直接短转移,JMP NEAR PTR opr,;段内直接近转移,JMP WORD PTR opr,;段内间接转移,JMP FAR PTR opr,;段间直接转移,JMP DWORD PTR opr,;段间间接转移,45,第3章,指令系统与汇编语言程序设计,2.,条件转移指令,条件转移指令是根据上一条指令所设置的条件码来测试,被测试的内容为状态标志位。满足测试条件则转移到指令中指定的位置去执行,如果不满足条件则顺序执行下一条指令。,条件转移指令根据判断的标志位不同,通常可以归纳为3类:即判断单个标志位状态、比较无符号数高低和比较带符号数大小。这3类指令在使用之前,应该有比较CMP、测试TEST、加减或逻辑运算等指令。,46,第3章,指令系统与汇编语言程序设计,3.,循环控制指令,将一段代码程序执行多次操作即为循环,采用循环控制指令实现。循环控制转向的目的地址是在以当前,IP,内容为中心的,128,127,的范围内,指令采用,CX,作为计数器,每执行一次循环,,CX,内容减,1,,直到为零后循环结束。,(,1,)循环控制指令,LOOP,(,2,),为零或相等时,循环控制指令,LOOPZ/LOOPE,(3),不为零或不相等时,循环控制指令LOOPNZ/LOOPNE,47,第3章,指令系统与汇编语言程序设计,4.,子程序调用和返回指令,(,1,)子程序调用指令,指令格式为:,CALL NEAR PTR opr,;段内调用,CALL FAR PTR opr,;段间调用,(,2,)子程序返回指令,RET,指令格式:,RET,或,RET,表达式,48,第3章,指令系统与汇编语言程序设计,3.3.6,处理器控制类指令,这类指令主要用于修改状态标志位、控制CPU的功能如使CPU暂停、等待、空操作等。,49,第3章,指令系统与汇编语言程序设计,3.4 Pentium,微处理器新增指令和寻址方式,3.4.1 Pentium,微处理器寻址方式,1. Pentium,微处理器的内部寄存器和指令格式,由于,Pentium,微处理器采用,32,位指令,它的内部寄存器和指令格式与,16,位微处理器存在不同,主要有以下几方面:,(,1,)指令的操作数可以是,8,位、,16,位或,32,位;,(,2,)根据指令的不同操作数字段可以是,0,3,个;,(3)在部分不存放结果的单操作数指令中,可以采用立即数作为操作数;,50,第3章,指令系统与汇编语言程序设计,(,4,)部分指令对操作数的数据类型不是简单地要求一致,而是要有不同的匹配关系;,(,5,)立即数寻址方式中,操作数可以是,32,位的立即数,寄存器寻址方式中,操作数可以是,32,位通用寄存器;,(,6,)存储器操作数寻址方式中,操作数可达,32,位,寻址方式既可采用,16,位的地址寻址方式也可采用,32,位的扩展地址寻址方式。,(,7,),16,位微处理器原有的,4,个通用数据寄存器扩展为,32,位,更名为,EAX,、,EBX,、,ECX,和,EDX,;,(8)原有的4个用于内存寻址的通用地址寄存器同样扩展为32位,更名为ESI、EDI、EBP、ESP;,51,第3章,指令系统与汇编语言程序设计,(,9,)指令指针寄存器扩展为,32,位,更名为,EIP,;,(,10,)在原有的,4,个段寄存器基础上,增加了,2,个新的段寄存器,FS,和,GS,;,(,11,),32,位微处理器增加了,4,个系统地址寄存器;,(,12,)标志寄存器也扩展为,32,位,更名为,EFLAGS,,除了原有的状态、控制标志外,还增加了,2,位;,(,13,)新增加了,5,个,32,位的控制寄存器,命名为,CR0CR4,;,(14)新增了8个用于调试的寄存器DR0DR7,2个用于测试的寄存器TR6TR7。,52,第3章,指令系统与汇编语言程序设计,2. Pentium,微处理器的新增寻址方式,如前所述,8086微处理器有固定寻址、立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址等8种寻址方式,而,Pentium,微处理器有,11,种寻址方式。,与,8086,相比新增加的,3,种寻址方式分别是比例变址寻址方式、基址加比例变址寻址方式和带位移量的比例变址寻址方式。,53,第3章,指令系统与汇编语言程序设计,3.4.2 Pentium,系列微处理器专用指令,Pentium,系列处理器的指令集是向上兼容的,它保留了,8086,和,80X86,微处理器系列的所有指令,因此,所有早期的软件可直接在奔腾机上运行。,Pentium,处理器指令集中新增加了以下,3,条专用指令。,1. 比较和交换8字节数据指令CMPXCHG8B,2. CPU,标识指令,CPUID,3.,读时间标记计数器指令,RDTSC,54,第3章,指令系统与汇编语言程序设计,3.4.3 Pentium,系列微处理器控制指令,Pentium,处理器指令集中新增加了,3,条系统控制指令。,1.,读专用模式寄存器指令,RDMSR,2.,写专用模式寄存器指令,WRMSR,3.,恢复系统管理模式指令,RSM,55,第3章,指令系统与汇编语言程序设计,3.5,汇编语言简述,计算机可直接识别的是机器指令,用机器指令编写的程序称为机器语言程序。由于机器指令是用二进制编码来表示的,既不直观又难以记忆,所以使得机器指令编写的程序在使用上受到了限制。为了解决机器语言使用上的不便,人们开始使用容易记忆和识别的符号指令来编写程序。汇编语言就是用与操作功能含义相应的缩写英文字符组成的符号指令作为编程用的语言。,56,第3章,指令系统与汇编语言程序设计,使用汇编语言编写的程序计算机是不能够直接地识别和执行的,必须经过“翻译”,将汇编语言程序“翻译”成机器语言程序,这个“翻译”是由汇编程序来完成的。汇编程序是系统预先提供的系统软件之一,它把源文件转换成二进制编码表示的目标文件(,.OBJ,),这个过程称为汇编。在汇编过程中对源程序进行语法检查(又称扫描),得到无语法错误的结果后,还要经过连接程序,使目标程序成为计算机的可执行文件(,.EXE,)。,57,汇编语言程序转换成为计算机可运行的程序,的过程如图,3-8,所示。,图,3-8,汇编语言程序的执行过程,58,第3章,指令系统与汇编语言程序设计,3.5.1 汇编语言语句的类型和格式,汇编语言源程序是由指令、伪指令及宏指令组成的。每条指令又可称为一条语句,汇编语言程序中一条完整的语句格式由以下,4,项内容组成:,name,operation operand,; comment,(1)名字,项,name,:名字,通常为一符号序列,,表示本条语句的符号地址。,名字项可用作标号和变量,作为标号表示的是符号地址,其后跟冒号,“:”,;作为变量表示的是一个数据,其后不跟,冒号“:”,。,59,第3章,指令系统与汇编语言程序设计,标号和变量具备以下,3,种属性:,段属性:该属性定义了标号和变量的段起始地址,其值必须在一个段寄存器中。标号的段是它所出现的对应代码段,由,CS,指示。变量的段通常由,DS,或者,ES,指示。,偏移属性:该属性表示标号和变量相距段起始地址的字节数,该数是一个,16,位无符号数。,类型属性:该属性对于标号而言,用于指出该标号是在本段内引用还是在其他段中引用。标号的类型有,NEAR(,段内引用)和,FAR(,段间引用)。对于变量,其类型属性说明变量有几个字节长度,这一属性由定义变量的伪指令确定。,60,第3章,指令系统与汇编语言程序设计,(2)操作码项,operation,:,为操作码助记符,可以是指令、伪指令及宏指令名。,汇编程序可以将指令翻译成对应的机器码;伪指令是在汇编过程中完成相应的控制操作,又称为汇编控制指令;宏指令是采用有限的一组指令来定义的代号,汇编时将展开成相应的具体操作指令。,(3)操作数项,operand,:,为操作码提供数据及操作信息,操作数项可以是常数、变量、表达式等数据,也可以是操作数的地址或地址表达式。,当有两个或两个以上的操作数时,各操作数之间要用逗号隔开。,61,第3章,指令系统与汇编语言程序设计,(,4,)注释项,comment,:,为语句注释,说明所在语句行的功能,,以“;”开头,是语句的非执行部分。通常,注释用来说明一段程序或几条语句的功能,,一段完整的程序注释是很重要的,它可使程序思路显得更清楚,特别是在模块化程序设计中可通过注释将各模块的功能描述出来,大大增强了程序的可读性。,此外,语句格式,中带方括号“,”,的部分表示任选项,可根据需要加以选择,,汇编语言要求上面的4项内容之间必须留有空格,否则会被认为是错误的命令。,62,第3章,指令系统与汇编语言程序设计,汇编语言的标识符、表达式和运算符,(,1,)标识符:如前所述,汇编语言语句格式第一个字段是它的名字项,名字可以是标号或变量,这两者又称为标识符。,标号和变量可以用,LABLE,和,EQU,伪指令来定义,相同的标号或变量的定义在同一程序中只能允许出现一次。,(2)表达式和运算符:表达式中的运算符充当着重要的角色。8086宏汇编有算术运算符、逻辑运算符、关系运算符、分析运算符和综合运算符共5种。,63,第3章,指令系统与汇编语言程序设计,算术运算符用于完成算术运算,加、减、乘、除运算都是整数运算,除法运算得到的是商的整数部分,求余运算是指两数整除后所得到的余数。,逻辑运算符对操作数进行按位操作,运算后产生一个逻辑运算值,供给指令操作数使用,不影响标志位。,NOT,是单操作数运算符,其它,3,个为双操作数运算符。,关系运算符的运算对象是两个性质相同的项目,其结果只能是两种情况:关系成立或不成立。当关系成立时,运算结果为,1,,否则为,0,。,分析运算符用于对存储器地址进行运算,它可以将存储器地址的段、偏移量和类型属性分离出来,返回到所在的位置作操作数使用。故又称为数值返回运算符。,综合运算符用来建立和临时改变变量或标号的类型以及存储器操作数的存储单元类型,也称为属性修改运算符。,64,第3章,指令系统与汇编语言程序设计,3.5.2 汇编语言的源程序结构,一个汇编语言源程序包含了以下几个结构形式:,(,1,)汇编源程序一般应该由,3,个逻辑段组成,即数据段、堆栈段和代码段。数据段用来在内存中建立一个适当容量的工作区,以存放常数、变量等程序需要对其进行操作的数据;堆栈段用来在内存中建立一个适当的堆栈区,以便在中断、子程序调用时使用;代码段包括了许多以符号表示的指令,以完成程序规定的操作。,(,2,)每个逻辑段以,SEGMENT,语句开始,以,ENDS,语句结束,整个源程序以,END,语句结束,每个逻辑段内有若干条语句以完成某种特定操作功能。,65,第3章,指令系统与汇编语言程序设计,(,3,)汇编源程序的主模块要用,ASSUME,伪指令告诉汇编程序,各个段地址与段寄存器之间的对应关系,以便对源程序模块进行汇编时确定段中各项的偏移量;,DOS,的装入程序在执行时,将把,CS,初始化为正确的代码段地址,把,SS,初始化为正确的堆栈段地址,在源程序中不需要再对它们进行初始化。由于装入程序已经将,DS,寄存器留作它用,所以在源程序中要对,DS,进行初始化。,(4)汇编语言源程序存放在存储器中,无论是取指令还是存取操作数,都要访问内存。所以,程序的编写必须分段进行,以满足存储器分段管理的要求。,66,第3章,指令系统与汇编语言程序设计,3.5.3,伪指令,我们前面所分析的大都是机器指令,这是,CPU,指令系统中提供的命令,在运行时由,CPU,执行,每条指令对应,CPU,的一种特定的操作,例如传送、加、减法等,经汇编以后,每条,CPU,指令产生一一对应的目标代码。而,伪指令是用来对相关语句进行定义和说明的,它不产生目标代码,所以又称伪操作。,宏汇编程序MASM提供了约几十种伪指令,主要有数据定义、符号定义、段定义、过程定义、模块定义、结构等。,67,第3章,指令系统与汇编语言程序设计,1.,数据定义伪指令,数据定义伪指令用来定义变量的类型,给变量分配存储单元。,数据定义伪指令的一般格式为:,变量名,伪指令,数据项,;注释,数据定义伪指令,有以下,5,种形式:,(,1,),DB,(,Define Byte,):定义字节变量,每个数据占,1,个字节。,(,2,),DW,(,Define Word,):定义字变量,每个数据占,1,个字,即,2,个字节。,(,3,),DD,(,Define Double word,):定义双字变量,每个数据占,2,个字,即,4,个字节。,(,4,),DQ,(,Define Quadruple word,):定义,4,字变量,每个数据占,4,个字,即,8,个字节。,(5)DT(Define Ten byte):定义10字节变量,每个数据占10个字节。,68,第3章,指令系统与汇编语言程序设计,2.,符号定义伪指令,符号定义伪指令主要是为程序中的表达式赋予一个符号名,或定义新的类型属性等。它为程序的编写和使用带来了许多方便。,(,1,),EQU,(等值)伪指令:将表达式的值或符号赋予,EQU,前面的一个名字,可以用这个名字来代替给定的表达式。需要注意的是,一个符号一经,EQU,伪指令赋值后,在整个程序中不允许再对同一符号重新赋值。,(,2,)(等号)伪指令:其功能与,EQU,伪指令基本相同,主要区别在于它可以对同一个名字重复定义。,(,3,),LABLE,(标号)伪指令:其用途是在原来标号或变量的基础上定义一个类型不同的新的标号或变量。,(,4,),PTR,(属性修改)伪指令:用于临时指定或修改操作数的类型属性。,69,第3章,指令系统与汇编语言程序设计,3.,段定义伪指令,段定义伪指令可对代码段、数据段、堆栈段及附加段进行定义和赋名,,并指明段的定位类型、组合类型及类别,。代码段的内容主要是指令及伪指令,数据段、堆栈段及附加段主要是定义数据、分配存储单元等。,有以下两种段定义伪指令:,(,1,),SEGMENT/ENDS,伪指令,格式:,段名,定位类型, ,组合类型, ,类别,(段内语句系列),段名,ENDS,70,第3章,指令系统与汇编语言程序设计,(,2,),ASSUME,伪指令,格式:,ASSUME,段寄存器名:段名,,段寄存器名:段名,,,ASSUME段寻址伪指令放置在代码段的开始处,可以设定多个段与段寄存器之间的对应关系,中间用逗号分开。当汇编程序汇编一个逻辑段时,可利用相应的段寄存器寻址该逻辑段中的指令或数据。,71,第3章,指令系统与汇编语言程序设计,4.,过程定义伪指令,汇编语言中的子程序是以过程的形式出现的,过程的调用和返回采用,CALL,和,RET,指令来完成。过程定义伪指令的格式如下:,格式:过程名,PROC NEAR/FAR,(过程中的语句系列),RET,(过程中的语句系列),过程名,ENDP,72,第3章,指令系统与汇编语言程序设计,5.,结构定义伪指令,结构是将逻辑上相互关联的一组数据以某种形式组合在一起,形成一个整体以便进行数据处理。结构的使用需要经过结构定义、结构预置和结构引用等过程。,结构采用伪指令,STRUC,和,ENDS,进行定义,把相关数据定义语句组合起来,便构成一个完整的结构。其格式如下:,结构名,STRUC,(数据定义语句序列),结构名,ENDS,73,第3章,指令系统与汇编语言程序设计,6.,模块定义伪指令,一个较大的汇编语言源程序,按任务分配可以由多个模块组成,每个模块都是具有独立功能的逻辑单位。为了实现模块之间的连接、调用、相互访问、变量传送等功能,通常使用以下几个伪指令。,(,1,),NAME,伪指令:用于给源程序汇编以后得到的目标程序指定模块名,在汇编连接时使用。,(,2,),END,伪指令:表示源程序结束,指示汇编程序停止汇编,,END,后面的语句可以不予理会。,(,3,),PUBLIC,伪指令:用于定义本模块中的某些符号是全局符号名,允许程序中的其它模块直接引用。,(4)EXTRN伪指令:指明本模块中所用的某些符号在程序的其它模块中已经定义,且出现在其它模块的PUBLIC伪指令中。,74,第3章,指令系统与汇编语言程序设计,7.,定位伪指令,ORG,和程序计数器,$,(,1,),ORG,伪指令:,ORG,是起始位置设定伪指令,用来指定某条语句或某个变量的偏移地址。在程序设计中,如果需要将存储单元分配在指定位置,可以使用,ORG,伪指令来改变位置计数器的值。,(2)程序计数器$:字符“$”出现在在程序中的表达式里,它的值为程序下一个所能分配的存储单元的偏移地址,称为程序计数器。“$”用来表示位置计数器的当前值。,75,第3章,指令系统与汇编语言程序设计,3.5.4,宏指令与高级汇编技术,在汇编语言中,有的程序段需要多次重复使用,为了减少编程的工作量,可将它们定义为一条宏指令。需要时,直接在程序中将宏指令当作一条指令一样来引用。,汇编程序在源程序的汇编过程中,将宏指令对应的程序段目标代码嵌入到该宏指令处。,宏指令实际上也是一种伪指令,比起前面介绍的伪指令功能更强,,使用更灵活,,在源程序中采用宏指令可简化程序。,76,第3章,指令系统与汇编语言程序设计,1.,宏汇编,所谓“宏”是指源程序中一段具有独立功能的代码,宏指令代表一段源程序。当宏汇编时,宏指令就被自动地展开成为相应的机器码而插入源程序中的宏调用处,宏调用指令在汇编过程中对宏定义体作宏展开操作。宏展开就是用宏定义体取代源程序中的宏指令名,并用实参取代宏定义中的形参,而且要求实参要与形参一一对应。,宏定义语句格式是:,宏指令名,MACRO ,形参,1,,形参,2,,形参,n,;宏体,ENDM,77,第3章,指令系统与汇编语言程序设计,(,2,)宏调用:经定义的宏指令,可以在源程序中调用,称为宏调用。宏调用的格式为:,宏指令名 实参1,实参2,实参n,(3)宏展开:宏展开就是将宏指令语句用宏定义中宏体的程序段目标代码替换。在汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,取调用提供的实参替代相应的形参,对原有宏体目标代码作相应改变。,78,第3章,指令系统与汇编语言程序设计,2.,重复汇编,在编写汇编程序的过程中,有时需要重复编写相同或几乎完全相同的一组代码,为避免重复编写的麻烦,可以使用重复汇编。,重复汇编伪指令有以下,3,种:,(,1,)定重复伪指令,REPT/ENDM,:,REPT,和,ENDM,必须成对出现,两者间之的重复内容是要重复汇编的部分,重复汇编次数用表达式的值来表示。,(,2,)不定重复伪指令,IRP/ENDM,:此伪指令重复执行重复内容中所包含的语句,重复的次数由参数表中的参数个数决定。,(3)不定重复字符伪指令IRPC/ENDM:此伪指令重复执行重复内容中的语句,重复汇编的次数等于字符串中字符的个数。,79,第3章,指令系统与汇编语言程序设计,3.,条件汇编,条件汇编也是汇编语言提供的一组伪操作。伪操作指令中指出汇编程序所进行测试的条件,汇编程序将根据测试的结果有选择地对源程序中的语句进行汇编处理。,条件伪操作的一般格式:,IF,表达式,条件程序块,1,ELSE,条件程序块,2,ENDIF,80,第3章,指令系统与汇编语言程序设计,3.5.5,汇编语言程序上机过程,1.,汇编语言的工作环境,帮助建立汇编语言源程序和支持汇编语言程序运行的软件主要包括以下几个方面:,(,1,),DOS,操作系统:汇编语言源程序的建立和运行都是在,DOS,操作系统的支持下进行的。,(,2,)编辑程序:是用来输入和建立汇编语言源程序的一种通用的系统软件,源程序的修改也可在编辑状态进行。,(,3,)汇编程序:一般选用宏汇编,MASM.EXE,,将源程序汇编成目标程序。,(,4,)连接程序:,8086,汇编语言使用的连接程序是,LINK.EXE,。,(5)调试程序:作为一种辅助工具来帮助编程者进行程序的调试,常采用动态调试程序DEBUG.COM。,81,第3章,指令系统与汇编语言程序设计,2.,汇编语言上机步骤,通常,在计算机上运行汇编语言程序的步骤主要有以下几方面:,(,1,)用编辑程序(例如,EDIT.COM,)建立扩展名为,.ASM,的汇编语言源程序文件;,(,2,)用汇编程序(例如,MASM.EXE,)将源程序文件汇编成用机器码表示的目标程序文件,其扩展名为,.OBJ,;,(,3,)用连接程序(例如,LINK.EXE,)把目标文件转化成可执行文件,其扩展名为,.EXE,。如果在汇编过程中出现语法错误,根据错误的信息提示(如错误位置、错误类型、错误说明),用编辑软件重新调入源程序进行修改。,(4)生成可执行文件后,在DOS命令状态下直接键入文件名就可执行该文件。,82,第3章,指令系统与汇编语言程序设计,3.6,基本程序设计,程序设计的目的是把解决实际问题的方法转化为计算机程序。在汇编程序设计过程中,首先对要解决的问题进行具体的描述,对于较小的程序可以使用程序流程图,对于较大的程序可以采用模块化程序设计方法。无论采用流程图还是模块化的方法设计都要使用程序设计的基本程序结构来表现出来,基本的程序结构包括顺序结构、分支结构、循环结构及子程序结构。,83,第3章,指令系统与汇编语言程序设计,3.6.1,程序设计的步骤和程序的基本结构,1.,程序设计的基本步骤,用汇编语言设计程序,一般按下述步骤进行:,(,1,)分析问题,抽象出数学模型,(,2,)确定算法或解题思想,(,3,)绘制流程图,(,4,)程序编制,(5)程序的运行、检查与调试,84,第3章,指令系统与汇编语言程序设计,2.,程序的基本结构,程序的基本结构通常可以分为顺序结构、分支结构和循环结构,3,种。每一个结构只有一个入口和一个出口,,3,种结构的有机组合和嵌套可构成结构化程序。,(,1,)顺序结构:该结构是按照语句的先后次序执行一系列的顺序操作,没有分支和跳转。,(,2,)分支结构:也叫条件选择结构,可根据不同情况做出判断和选择,以便执行不同的程序段。分为双分支结构和多分支结构。,(3)循环结构:循环实际上是分支结构的一种扩展,循环是否继续是依靠条件判断语句来完成的。按照条件判断的位置,可以把循环分为“当型循环”和“直到型循环”,85,第3章,指令系统与汇编语言程序设计,3.6.2,顺序结构程序设计,顺序结构是一种最简单的程序设计结构形式。采用这种结构只能完成简单的任务程序设计。顺序结构在任何结构的程序中都会出现,因此,它是构成复杂程序的基础。,【例,3.32,】用顺序结构来编程实现求,S=,(,X,2,Y,2,),/Z,的值,将最后结果放入,RESULT,单元保存。,本题中要定义4个变量,X、Y、Z是计算表达式涉及到的数据,RESULT单元是结果的存放单元。为方便数据的重复使用,采用寄存器来存放中间结果X,2,和Y,2,。,86,参考程序如下:,DATA SEGMENT,;定义数据段,X DB 5,;给,X,、,Y,、,Z,赋初值,Y DB 7,Z DB 2,RESULT DB,?,;定义,RESULT,单元,预留空间,DATA ENDS,;数据段结束,CODE SEGMENT,;定义代码段,ASSSUME CS,:,CODE,,,DS,:,DATA,START,:,MOV AX,,,D
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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