微机原理PPT课件_第1页
微机原理PPT课件_第2页
微机原理PPT课件_第3页
微机原理PPT课件_第4页
微机原理PPT课件_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

01.06.2020,1,第5章86系列微型计算机的指令系统,5.2传送类指令,5.4串操作指令,5.5控制类指令,5.186系列汇编语言及指令的格式与寻址方式,5.3数据操作类指令,01.06.2020,2,指令是让计算机完成某种操作的命令,指令的集合称作指令系统,不同系列计算机有不同的指令系统。指令的符号用规定的英文字母组成,称为助记符。指令进行编程能够充分开发计算机硬件资源,它的程序目标代码短、运行速度快,因此,指令语言是面向机器的语言,在自动控制、智能化仪器仪表、监测等领域应用广泛。,01.06.2020,3,5.186系列汇编语言及指令的格式与寻址方式5.1.186系列汇编语言指令语句格式,任何一种汇编语言的指令语句都是与机器指令一一对应的,它通过汇编程序将其翻译成机器指令代码(目标代码),让CPU执行某种操作。86系列汇编语言指令语句格式如图5.1所示。图中由前向后的箭头表示是可选项,由后向前的箭头表示是重复项,圆头方框表示是语句中的关键字。,01.06.2020,4,(1)标号是给该指令所在地址取的名字,必须后跟冒号“:”,它可以缺省,是可供选择的标识符。86系列汇编语言中可使用的标识符必须遵循下列规则:标识符由字母(az,AZ)、数字(09)或某些特殊字符(,?)组成。第一个字符必须是字母(az,AZ)或某些特殊的符号(,?),但“?”不能单独作标识符。标识符有效长度为31个字符,若超过31个字符,则只保留前面的31个字符为有效标识符。,01.06.2020,5,下面是有效的标识符:START:MYCODE:ALPHA:NUM1:LOOP1:X:?MORE350:BETA1:DELAYIS:下面是无效的标识符:4LOOP:MAINA/B:BETA*:START3:GAMA1:NUM+1:?:ONE*TWO:,01.06.2020,6,(2)指令助记符是指令名称的代表符号,它是指令语句中的关键字,不可缺省,它表示本指令的操作类型,必要时可在指令助记符的前面加上一个或多个“前缀”,从而实现某些附加操作。(3)操作数是参加本指令运算的数据,有些指令不需要操作数,可以缺省;有些指令需要两个操作数,这时必须用逗号(,)将两个操作数分开;有些操作数可以用表达式来表示。(4)注释部分是可选项,允许缺省,如果带注释则必须用分号(;)开头,注释本身只用来对指令功能加以说明,给阅读程序带来方便,汇编程序不对它做任何处理。,01.06.2020,7,5.1.286系列CPU的寻址方式,机器执行指令的目的就是对指定的操作数完成规定的操作,将操作结果存入规定的地方。因此,如何获得操作数的存放地址及操作结果的存放地址就是一个很关键的问题。8086/8088CPU有多种方法来获取操作数的存放地址及操作结果的存放地址,这些方法统称为数据寻址方式。,01.06.2020,8,5.1.286系列CPU的寻址方式,为什么要设置多种寻址方式?希望用最短的指令长度访问尽可能大的存储器空间希望给多样的程序设计技术和数据结构对数据访问的灵活性和有效性提供支持变址寻址便于处理表格和矩阵相对寻址便于编制浮动的、可重入的程序,下面主要以MOV指令为例,介绍86系列CPU的寻址方式。,01.06.2020,9,MOV指令的功能格式:MOV目的操作数(dest),源操作数(src),01.06.2020,10,8086CPU指令系统中,有一部分指令所用的8位或16位操作数就在指令中提供,这种方式称作立即数寻址方式。例如:MOVAL,80H;将十六进制数80H送入ALMOVAX,1090H;将1090H送AX,AH中为10H,AL中为90H采用立即数寻址方式的指令主要用来对寄存器赋值。因为操作数可以从指令中直接取得,不需要运行总线周期,所以,立即数寻址方式的显著特点就是速度快。立即数可以为8位,也可以为16位;规定立即数只能是整数,不能是小数、变量或者其他类型的数据;另外还要注意,立即数只能作为源操作数。,1.立即数寻址,立即数寻址方式,微机原理及应用吴丽娟,01.06.2020,12,1.立即数寻址【例】画出MOVAX,1946H指令执行过程示意图。解:指令执行后,AX=1946H,16位数据1946H存入寄存器,下图中,指令存放于代码段,OP为操作码,接着存放低位字节数46H,在存放高位字节数19H,这是字类型的立即数,为指令机器码的一部分。,01.06.2020,13,2.寄存器寻址如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出。这种寻址方式就叫寄存器寻址方式。对16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP或者BP,而对8位操作数来说,寄存器可为AH,AL,BH,BL,CH,CL,DH,DL。例如:INCCX;将CX的内容加1ROLAH,1;将AH中的内容循环左移一位采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要使用总线周期,因此,执行速度快。在一条指令中,可以对源操作数采用寄存器寻址方式,也可以对目的操作数采用寄存器寻址方式,还可以两者都用寄存器寻址方式。,01.06.2020,14,2.寄存器寻址例:下列程序执行后,(AX)=?,(BX)=?MOVAX,1234HMOVBX,5678HADDAX,BX该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。,执行:1234HAX5678HBX(AX)+(BX)AX执行后:(AX)=68ACH,(BX)=5678H,01.06.2020,15,01.06.2020,16,2.寄存器寻址例:设AX=4710H,CX=7507H。问执行指令MOVAX,CX后AX=?,BX=?解:AX寄存器的内容被CX的内容取代,CX本身的内容不变,故AX=7507H,BX=7507H。,01.06.2020,17,3.直接寻址使用直接寻址方式时,数据总是在存储器中,存储单元的有效地址由指令直接指出,所以直接寻址是对存储器进行访问时可采用的最简单的方式。例如:MOVAX,1070H;将DS段的1070H和1071H两单元的内容取到AX中注意:采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器DS。例如,上一条指令执行时,设DS2000H,则执行过程是将绝对地址为21070H和21071H两单元的内容取出送AX。,直接寻址方式,微机原理及应用吴丽娟,01.06.2020,19,如果要对其它段寄存器所指出的存储区进行直接寻址,则本条指令前必须用前缀指出段寄存器名。例如:CS:MOVBX,3000H;将CS段的3000H和3001H两单元的内容送BX设CS为5100H,则本指令在执行时,将54000H和54001H两单元的内容取出送BX。,01.06.2020,20,【例】假设TABLE是在附加数据段定义的一个字节数组的首地址标号,其偏移地址为1000H,则指令:MOVAL,ES:TABLE或MOVAL,ES:TABLE或MOVAL,ES:1000H或MOVAL,ES:1000H,是等效的,都表示将字节数组的第一个数组元素送入AL寄存器中。MOVAL,ES:TABLE+2或MOVAL,ES:TABLE+2或MOVAL,ES:1000H+2或MOVAL,ES:1000H+2也是等效的,都表示将字节数组的第三个数组元素送入AL寄存器中。这种寻址方式一般适用于处理单个变量。,01.06.2020,21,例(1)MOVAX,1024HMOVBX,ES1000H设DS=2000H,ES=3000H,(21024H)=1784H,(31000H)=1234H。指令执行后AX=?,BX=?,(1)DS16+1024H=21024HAX=1784H,ES=3000H则BX=1234H,01.06.2020,22,4.寄存器间接寻址采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以为BX,BP,SI和DI之一,即有效地址等于其中某一个寄存器的值:,偏移地址EA计算方法:,和直接寻址类似,若指令前面没有用前缀指明具体的段寄存器,则寻址时默认的段寄存器通常为DS。如寄存器为BP时,则对应的段寄存器为SS。,01.06.2020,23,采用寄存器间接寻址时,允许在指令中指定一个位移量,这样,有效地址通过将一个寄存器的内容加上一个位移量来得到。位移量可以为8位,也可以为16位。即:,BXBP8位位移量SI16位位移量DI细分起来,寄存器间接寻址可分为以下4种:,01.06.2020,24,(1)以BX寄存器进行间接寻址数据段基址寻址如MOVAX,BX(2)以BP寄存器进行间接寻址堆栈段基址寻址如MOVBX,BP(3)以SI和DI寄存器进行间接寻址变址寻址其中SI为源寄存器、DI为目的寄存器(4)将BX、BP和SI、DI寄存器组合起来进行间接寻址基址加变址寻址如MOVAX,BX+SIMOVAX,BX+SI+0050;相对基址加变址寻址,01.06.2020,25,(1)以BX寄存器进行间接寻址数据段基址寻址。用BX寄存器进行间接寻址时,默认的段寄存器为DS,因为BX称为基址寄存器,所以这种寻址方式也叫数据段基址寻址。例如:MOVAX,BX设DS5000H,BX3000H,则本指令在执行时,将53000H和53001H两单元的内容送AX。如果要对其它段寄存器所指的区域进行寻址,则必须在指令前用前缀指出段寄存器名。例如:ESMOVCX,BX设ES3000H,BX4000H,则本指令在执行时,将34000H和34001H两单元的内容送CX。,寄存器间接寻址方式,微机原理及应用吴丽娟,01.06.2020,27,(2)以BP寄存器进行间接寻址堆栈段基址寻址。如果以寄存器BP对操作数进行间接寻址,则必须注意,操作数默认在堆栈段中,因为BP称为基址寄存器,所以这种寻址方式通常称为堆栈段基址寻址。例如:MOVBX,BP设SS5000H,BP4000H,则本指令在执行时,将54000H和54001H两单元的内容送BX。,01.06.2020,28,(3)以SI和DI寄存器进行间接寻址变址寻址。SI和DI寄存器分别称为源变址寄存器和目的变址寄存器,所以用这两个寄存器来进行间接寻址也叫变址寻址。变址寻址通常用于对数组元素进行操作,另外,后面还会讲到有些串操作指令要求用固定的变址寄存器对操作数进行寻址,操作过程中,指令会自动修改变址寄存器中的地址,以指向下一个操作数。,寄存器相对寻址方式,微机原理及应用吴丽娟,01.06.2020,30,(3)以SI和DI寄存器进行间接寻址变址寻址。例:设DS=2000H,SS=3000H,BX=1000H,BP=2100H,(21000H)=1426H,(32100H)=2017H,问执行MOVAX,BXMOVBL,BP指令后AX=?BL=?,答案:AX=1426HBL=17H,01.06.2020,31,(4)将BX,BP和SI,DI寄存器组合起来进行间接寻址基址加变址的寻址。通常将BX和BP称为基址寄存器,将SI和DI称为变址寄存器。8086指令系统允许把基址寄存器和变址寄存器组成起来构成一种新的寻址方式,叫基址加变址的寻址。用这种寻址方式时,操作数的有效地址是1个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容。即:BXSIBPDI,EA,+,01.06.2020,32,例如:MOVAX,BX+SI设DS1000H,BX5000H,SI2000H,则上面指令在执行时,有效地址为7000H,本指令将17000H和17001H两单元的内容取到AX中。图5.2对堆栈中数组的访问在基址加变址的寻址方式中,只要用上BP寄存器,那么默认的段寄存器就是SS;在其它情况下,默认的段寄存器均为DS。如果操作数不在默认段,则要用前缀指出相应的段寄存器名。,01.06.2020,33,用基址加变址的寻址方式时,与变址寻址、基址寻址的情况类似,也允许带一个8位或16位的位移量。带位移量的基址加变址的寻址,在有些资料中也称为相对的基址加变址寻址。如:MOVAX,BX+SI+0050;将BX和SI中的内容与0050相加作为有效地址由于基址加变址的寻址方式中,允许两个地址分量分别改变,而且有一个对段寄存器的约定规则即如果基址寄存器用BX,则默认的段寄存器为DS;如果基址寄存器用BP,则默认的段寄存器为SS这种寻址方式使用起来很灵活。,基址变址寻址方式,微机原理及应用吴丽娟,相对基址变址寻址方式,微机原理及应用吴丽娟,图5.3对8086有关操作数的各种寻址方式进行了总结。图中不仅指出了每种寻址方式下操作数的来源,还表明了有效地址的计算方法。,图5.38086/8088的操作数寻址方式,01.06.2020,37,为了对各种寻址方式有个比较,下面举一个综合性的例子。【例】设BX0158H,DI10A5H,位移量1B57H,DS2100H,并假定没有使用段前缀,即把DS作为操作数对应的段寄存器。在各种寻址方式下,这些寄存器和位移量所产生的有效地址和物理地址为:直接寻址:有效地址1B57H物理地址21000H+1B57H22B57H,MOVAX,1B57H,01.06.2020,38,寄存器间接寻址(寄存器为BX):有效地址0158H物理地址21000H+0158H21158HBX寄存器相对间接寻址:有效地址0158H+1B57H1CAFH物理地址21000H+1CAFH22CAFH变址寻址(寄存器为DI):有效地址10A5H物理地址21000H+10A5H220A5H,MOVAX,BX,MOVAX,BX+1B57H,MOVAX,DI,01.06.2020,39,DI寄存器相对变址寻址:有效地址10A5H+1B57H2BFCH物理地址21000H+2BFCH23BFCH基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):有效地址0158H+10A5H11FDH物理地址21000H+11FDH221FDH相对的基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):有效地址0158H+10A5H+1B57H2D54H物理地址21000H+2D54H23D54H,MOVAX,DI+1B57H,MOVAX,BX+DI,MOVAX,BX+DI+1B57H,01.06.2020,40,例:已知DS=1000H,ES=2000H,SS=1100H,SI=1010H,BX=0200H,BP=0600H.请指出下列指令的源操作数字段是什么寻址方式,源操作数物理地址是多少。MOVAL,2400HMOVAX,BPADDAX,ES:BP+10MOVAL,BX+SI+25,直接寻址,PA=DS*16+2400=12400H,寄存器间接寻址,PA=SS*16+BP=11600H,寄存器相对寻址,PA=ES*16+BP+0AH=2060AH,相对基址加变址寻址,PA=DS*16+BX+SI+19H=11229H,01.06.2020,41,例:分别指出下列指令的源操作数和目的操作数的寻址方式。MOVSI,200MOVCX,DATA:SIADDAX,BXSIADDAX,BXMOVSI,AX,源:立即数寻址目的:寄存器寻址源:寄存器间接寻址目的:寄存器寻址源:基址加变址寻址目的:寄存器寻址源:寄存器寻址目的:寄存器寻址源:寄存器寻址目的:寄存器间接寻址,01.06.2020,42,例:写出以下指令中内存操作数的所在地址。(1)MOVAL,BX+5(2)MOVBP+5,AX(3)INCBYTEPTRSI+3(4)MOVDL,ES:BX+DI(5)MOVBX,BX+SI+2,(1)数据段基址寻址,(DS)*16+(BX)+5(2)以BP寄存器进行的间接寻址(堆栈段基址寻址),(SS)*16+(BP)+5(3)本条指令含义为:将SI+3所指存储单元的内容加1,(DS)*16+(SI)+3(4)基址加变址寻址,(ES)*16+(BX)+(DI)(5)相对基址加变址寻址,(DS)*16+(BX)+(SI)+2,01.06.2020,43,寻址方式小结,常用指令,01.06.2020,45,5.2传送类指令,传送类指令可以分为4种:通用数据传送指令目标地址传送指令标志位传送指令I/O数据传送指令,传送类指令是指令系统中最活跃的一类指令,也是条数最多的一类指令,主要用于数据的保存及交换等场合。,除了SAHF和POPF指令外,其余指令执行后对标志位都没有影响。,:运算结果影响标志位:运算结果不影响标志位,传送类指令,01.06.2020,47,5.2.1通用数据传送指令,通用传送指令中包括最基本的传送指令MOV,堆栈指令PUSH和POP,数据交换指令XCHG。1.最基本的传送指令MOV指令是形式最简单、用得最多的指令。它可以实现CPU内部寄存器之间的数据传送、寄存器和内存之间的数据传送,还可以把一个立即数送给CPU的内部寄存器或者内存单元。,将数据从一个地址传送到另一个地址;数据在传送过程中不发生任何变化;对标志寄存器的内容无任何影响。,传送指令的特点,01.06.2020,48,1.最基本的传送指令MOVBH,DI;源操作数为寄存器间接寻址MOVDI,ES:3SI;源操作数为变址寻址,使用跨段前缀MOVBP,3BX+SI;源操作数为基址加变址寻址MOVAL,BL;BL中的8位数据送ALMOVES,DX;DX中的16位数据送附加段寄存器ESMOVAX,BX;BX和BX+1所指的两个内存单元内容送AXMOVDI,AX;累加器的内容送DI和DI+1所指的两个单元MOVCX,1000;把1000和1001两个单元的内容送CX,01.06.2020,49,01.06.2020,50,例如:分析如下MOV指令的正确性:MOVAX,BLMOVDS,1000HMOVBX,SIMOVES,CSMOVCS,AX,;类型不匹配,;不允许立即数送段寄存器,;不允许内存操作数之间传送,;不允许段寄存器之间传送,;CS不能作为目的操作数,01.06.2020,51,补充:堆栈(STACK),是按后进先出原则组织的一片存储区域,用来暂存一批需要回避的数据或地址。,“后进先出”,堆栈:,暂存数据、断点信息或传送信息,用途:,存取原则:,堆栈段的最大深度:,64KB,01.06.2020,52,堆栈的构造,一端固定,具有最大地址的单元(数据由此向上堆积),一端浮动,指向最后被压入堆栈的数据所在存储单元(栈顶的位置随堆栈中存放数据多少而变化),用来指示当前栈顶的位置。(压入的数据放入哪个单元或从那个单元弹出数据均由SP决定),堆栈段,SS,Bottom,XX,XX,XX,XX,栈底:,栈顶:,堆栈指针:,01.06.2020,53,8086堆栈的组织,该片存储区域所包含存储单元数,其值有由初始时SP的值决定(指向栈底+1单元),如64KB的堆栈段不能满足需要,可通过修改SS来改变当前的堆栈段,使之指向另一片存储区域,同时SP重新赋值,堆栈段:,由SS存放堆栈段段基值以决定其起始地址,堆栈段的长度:,堆栈是按字组织的,数据的存取均为2字节操作,数据在堆栈段内的存放,堆栈区域的扩展:,01.06.2020,54,堆栈的三种基本操作,SS、SP赋值(段的起始位置及长度),SP2SP;栈顶向上浮动数据(SS:SP),(SS:SP)R/MSP+2SP数据;栈顶向下回落,1、设置堆栈,2、进栈,把数据压入堆栈,在栈顶进行,3、出栈,从栈顶取出数据送入R/M,01.06.2020,55,执行堆栈指令PUSH和POP时,指令地址是由SP给出当前栈顶的偏移地址,故将SP称为堆栈指针寄存器。,SP和BP在使用上有区别:,BP则是用来存放位于堆栈段中的一个数据区基址的偏移地址的,故将BP称做基址指针寄存器。,01.06.2020,56,86系列指令系统中提供了专用的堆栈操作指令,其中PUSH是把字压入堆栈,POP是把字弹出堆栈。在程序中采用堆栈操作指令时,应预置堆栈段寄存器SS、堆栈指示器SP的值,同时,使SP的内容为当前堆栈段的栈顶。在执行PUSH指令时,首先,堆栈指示器SP自动减2;然后,将一个字以源操作数传送至栈顶。POP指令的执行过程正好与PUSH指令相反,它把由SP指出的当前堆栈段的栈顶的一个操作数(一个字),传送到目的操作数中,然后,SP自动加2,指向新的栈顶。,2.堆栈操作指令,01.06.2020,57,POP指令中的目的操作数可以是除代码段寄存器CS之外的其它寄存器和存储器。在86系列指令系统中,不允许CS寄存器作为目的操作数使用。这是因为,一旦改变了代码段寄存器CS的内容,使程序有了新的当前代码段,就会导致CPU从新的CS和IP给出的毫无意义的地址中去取下一条指令,使程序错误运行。,2.堆栈操作指令,例如,将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中,已知:(SS)0200H,(SP)0008H,(CX)12FAH,其示意图如下图所示。,2.堆栈操作指令,2,SS段首地址,新栈顶,原栈顶,12FAH,16,PUSHCX指令的操作过程,PUSH指令的功能,微机原理及应用吴丽娟,例如,将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中,已知:(SS)0200H,(SP)0008H,(CX)12FAH,其示意图如下图5.4和图5.5所示。,2.堆栈操作指令,+2,POPCX指令的操作过程,POP指令的功能,微机原理及应用吴丽娟,01.06.2020,62,例设SS=1234H,SP=0FEFEH,DX=0314H,AX=3010H。问:1)当前栈顶的物理地址。2)执行PUSHDXPUSHAXPOPAX后SP=?,(1)MOVCX,AXMOVAX,BXMOVBX,CX,(2)PUSHAXPUSHBXPOPAXPOPBX,解:1)SS16+SP=12340+0FEFE=2223EH2)SP2SP=0FEFCH,例写出将AX和BX中内容互换有哪几种方法,01.06.2020,63,例设堆栈指针SP的初值为2000H,AX3000H,BX5000H,试问:(1)执行指令PUSHAX后SP?(2)再执行PUSHBXPOPAX后SP?AX?BX?,解:1)执行指令PUSHAX后SP2000H2=1FFEH2)SP=1FFEH,AX5000H,BX=5000H,01.06.2020,64,3.交换指令交换指令XCHG可以实现字节交换,也可以实现字交换。交换过程可以在CPU的内部寄存器之间进行,也可以在内部寄存器和存储单元之间进行,但不能在两个存储单元之间执行数据交换过程。例如:XCHGAL,BL;AL和BL之间进行字节交换XCHGBX,CX;BX和CX之间进行字交换XCHG2530,CX;CX和2530,2531两单元的内容交换MOVAX,5678H;(AX)=5678HMOVBX,0FFFFH;(BX)=0FFFFHXCHGAX,BX;(AX)=0FFFFH,(BX)=5678H,不能使用CS、IP作为操作数,XCHG指令的功能,微机原理及应用吴丽娟,01.06.2020,66,4.换码指令XLAT是一条完成字节翻译功能的指令,称为换码指令。它可以使累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。使用换码指令时,要求BX寄存器指向表的首地址,AL中为表中某一项与表格首地址之间的偏移量,指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所对应的单元中的值取到AL中去。,01.06.2020,67,图5.6表示了换码指令的功能。XLAT指令就是通过查表方式来完成翻译功能的,因此,在执行该指令之前,必须建立好一张翻译表,该表的最大容量为256字节。,图5.6换码指令的功能,01.06.2020,68,执行XLAT指令可将任意一个十进制数翻译成7段显示码,其操作步骤如下:(1)将译码表定位到某个逻辑段的一片连续地址中,并将其表首址的偏移地址置入BX寄存器中。(2)将待翻译的十进制数字送入AL寄存器中。(3)执行XLAT指令。例如,假设这段数据存放在偏移地址为2000H开始的内存中,取出“3”所对应的7段码,用如下几条程序助记符即可完成:MOVBX,2000HMOVAL,3XLAT,XLAT指令的功能,微机原理及应用吴丽娟,01.06.2020,70,5.2.2目标地址传送指令,这是一类专用于传送地址码的指令,用来传送操作数的段地址或偏移地址,共包含以下3条指令:1.取有效地址指令取有效地址指令LEA的功能是将存储器地址送到一个寄存器.LEA指令格式中,要求源操作数必须为内存单元地址,目的操作数必须为一个16位的通用寄存器。,1取有效地址指令LEA,2取偏移地址及数据段首址指令LDS,3取偏移地址及附加数据段指令LES,01.06.2020,71,5.2.2目标地址传送指令,这条指令常用来使一个寄存器作为地址指针。例如:LEAAX,2728;将2728单元的偏移量送AX,指令执行后,AX=2728LEABX,BP+SI;指令执行后,BX中的内容为BP+SI的值LEASP,0482;使堆栈指针SP为482,例如:主存偏移地址的获取。MOVBX,0100H;(BX)=0100HMOVSI,0210H;(SI)=0210HLEABX,1234BX+SI;(BX)=1544H注:LEABX,1234BX+SI等同于LEABX,BX+SI+1234,01.06.2020,72,如LEABX,2700H;将(相对于DS)偏移地址2700H送BX;(BX)=2700H例:设DS=3000H,BX=2000H,SI=1000H,问(1)执行LEAAX,BX+SI+1000H后,AX=?(2)执行MOVAX,BX+SI+1000H后,AX=?,LEA与MOV指令的区别,4000H,1256H,即:MOV指令传送操作数的内容,LEA传送操作数的地址。,01.06.2020,73,2.将地址指针装到DS和另一个寄存器的指令LDS指令的功能是把4个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后两个字节即段地址一定送到DS中。比如,设2130H2133H这4个单元中存放着一个地址,2130H和2131H中为地址的偏移量,2132H和2133H中为地址的段值,执行指令:LDSDI,2130H使2130H和2131H中的偏移量送到DI,2132H和2133H中的段值送到DS。,01.06.2020,74,2.将地址指针装到DS和另一个寄存器的指令设1000H、1001H、1002H、1003H这四个存储单元存放的地址分别为12H、34H、56H、78H,则执行完LDSDI,1000H后,DS=?,DI=?,答案:DS=7856H,DI=3412H,01.06.2020,75,3.将地址指针装到ES和另一个寄存器的指令LES指令与LDS指令的操作基本相同,所不同仅在于将源操作数所指向地址指针中的段基址(后两个字节)传送到ES段寄存器,而不是DS段寄存器。,01.06.2020,76,LDS或LES指令将源操作数指定的4个连续字节单元内容分别送入指令指定的寄存器以及DS或ES中。其中:低16位送到一个指定的字寄存器,高16位送到DS或ES中。,57H,13H,68H,24H,例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468H,DS:2480H,DS:2481H,DS:2482H,DS:2483H,SI,LDSSI,2480,01.06.2020,77,5.2.3标志位传送指令,可完成标志位传送的指令共有4条:,1读取标志指令LAHF,2设置标志指令SAHF,3标志寄存器进栈指令PUSHF,4标志寄存器出栈指令POPF,01.06.2020,78,图5.7LAHF指令的功能,1.读取标志指令读取标志指令LAHF被执行时,将标志寄存器中的低8位传送到AH中,如图5.7所示。,D5D3D1,三位任意!,01.06.2020,79,2.设置标志指令设置标志指令SAHF被执行时,将AH寄存器的相应位传送到标志寄存器的低8位。用下图表示。,01.06.2020,80,3.对标志寄存器的压入堆栈指令和弹出堆栈指令PUSHF指令将标志寄存器的值压入堆栈顶部,同时,堆栈指针SP的值减2,此指令在执行时标志寄存器的值不变。POPF指令的功能正好相反,此指令在执行时从堆栈中弹出一个字送到标志寄存器中,同时堆栈指针SP的值加2。,PUSHFPOPAXORAH,01HPUSHAXPOPF,01.06.2020,81,5.2.4输入/输出数据传送指令,输入/输出指令用来完成累加器(AX/AL)与I/O端口之间的数据传送.执行输入指令时,CPU可以从一个8位端口读入一个字节到AL中,也可以从两个连续的8位端口读一个字到AX中。执行输出指令时,CPU可以将AL中的一个字节写到一个8位端口中,或者将AX中的一个字写到两个连续的8位端口中。,IN有四种形式:(1)语句格式:INAL,PORT功能:(PORT)AL(2)语句格式:INAX,PORT功能:(PORT)AXINAL,50H;将50H端口的字节读入ALINAX,70H;将70H、71H两端口的值读入AX,70H端口的内容读入AL,71H端口的内容读入AH,源操作数“50H、70H”从形式上来说是立即数,实际上是端口地址,因而指令的寻址方式为直接寻址。“MOV”指令中,直接寻址要加中括号,输入输出指令不加。如MOVAL,2000H;INAL,25H,间接IN指令(口地址是16位,也可8位。)MOVDX,0FFF2HINAL,DX,01.06.2020,83,(3)语句格式:INAL,DX;从DX所指的端口中读取一个字节功能:(DX)AL(4)语句格式:INAX,DX;从DX和DX+1所指出的两个端口中读取一个字,较低地址端口中的值读到AL中,较高地址端口中的值读到AH中;功能:(DX)AL,01.06.2020,84,OUT有四种形式:(1)语句格式:OUTPORT,AL功能:(AL)PORT(2)语句格式:OUTPORT,AX功能:(AX)PORTOUT44H,AL;将AL中的一个字节输出到44H端口OUT80H,AX;将AX中的内容输出到80H,81H两端口,AL中的内容输出到80H,AH中的内容输出到81H,01.06.2020,85,(3)语句格式:OUTDX,AL;将AL中的字节输出到DX所指的端口(4)语句格式:OUTDX,AX;将AL中的字节输出到DX所指的端口中,同时将AH中的字节输出到DX+1所指的端口中,间接OUT指令(端口地址是16位,也可8位。)MOVDX,87FEHMOVDX,80HMOVAL,40HOUTDX,ALOUTDX,AL,例1,例2,01.06.2020,86,在计算机内部表示二进制数的方法通常称为数值编码,把一个数及其符号在机器中的表示加以数值化,这样的数称为机器数。机器数有两个基本特点,其一,数的符号数值化。整数有正数和负数,因为计算机只能表示0、1两种状态,数据的正号“+”或负号“”,在机器里就用一位二进制的0或1来区别。通常这个符号放在二进制数的最高位,称符号位,以0代表符号“+”,以1代表符号“”,这样正负符号就被数值化了。因为有符号占据一位,数的形式值就不等于真正的数值,带符号位的机器数对应的数值称为机器数的真值。,补充:机器数,01.06.2020,87,机器数的另一个特点是二进制的位数受机器设备的限制。机器内部设备一次能表示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长8位、16位、32位、64位。,字长为8位时,D7为符号位;字长为16位时,D15为符号位。如,一个8位字长的计算机中,带符号数的格式如下:D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0正数负数其中,最高位D7是符号位,其余D6D0是数值位。,01.06.2020,88,1、机器数的范围机器数的范围由计算机的硬件决定。当使用8位寄存器的时候,字长为8位,所以一个无符号整数的最大值是11111111B=255D,此时称机器数的范围为0255。当使用16位寄存器的时候,字长为16位,所以一个无符号整数的最大值是1111111111111111B=65535D=FFFFH,此时称机器数的范围为065535。2、机器数中小数点的位置机器中,小数点的位置通常有两种约定:一种规定小数点的位置固定不变,这时的机器数称为“定点数”;另一种规定小数点的位置可以浮动,这时的机器数称为“浮点数”。,机器数的三种表示方法:原码、反码、补码。原码表示法:正数的符号位用“0”表示,负数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论