919016-【微机技术(4版)PPT第5章(18.7)版】

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020/11/7上海交通大学1面向21世纪课程教材普通高等教育“十一五”国家级规划教材微型计算机技术WeixinɡJisuɑnjiJishu(第4版)孙德文章鸣嬛编著2020/11/7上海交通大学2第5章8086指令系统2020/11/7上海交通大学38086的指令系统•5.18086指令的寻址方式•5.28086指令简析2020/11/7上海交通大学45.1.8086指令的寻址方式•所谓指令的寻址方式(AddressingMode)是指在指令中操作数的表示方式。•由于程序编写上的需要,大多数情况下,指令中并不直接给出操作数的数值,而是给出操作数存放的地址———寄存器的地址或存储单元的地址。•在许多情况下,操作数的地址也不直接给出,而是给出计算操作数地址的方法。计算机执行程序时,根据指令给出的寻址方式,计算出操作数的地址,然后从该地址中取出操作数进行指令操作码指定的操作,把操作结果送入指定的目的操作数中。•一般来说,计算机的寻址方式越丰富,指令系统的功能就越强,工作的灵活性也越大。2020/11/7上海交通大学58086指令的寻址方式•6大类寻址方式立即寻址、寄存器寻址、存储器寻址、串操作寻址、外设I/O端口寻址以及程序转移操作寻址。变化最多的是存储器寻址,•这种寻址方式又分为:直接寻址寄存器间接寻址基址寻址变址寻址基址变址寻址。•注意:根据寻址方式计算而得的地址只是有效地址EA———段内偏移地址,这一地址还需与所在段的段基值组合后才能形成20位的物理地址。2020/11/7上海交通大学61,立即寻址(ImmediateAddressing)•立即寻址的指令直接给出操作数的数值,即指令机器码的最后1个或2个字节就是操作数———立即数。•立即数只能作为源操作数,在汇编码指令中,可用十六进制数(以H结尾)、二进制数(以B结尾)和十进制数(不需加特殊符号)表示,也可以使用撇号“′”括起来的ASCII码表达的字符和字符串。•注意,如果十六进制数以字母A~F打头,则必须在前面加上一个“0”,这是汇编程序的要求。•由于立即数是直接从指令中取得的,所以取数速度较快,这种寻址方式常用来给寄存器或存储器赋初值。2020/11/7上海交通大学72,寄存器寻址(RegisterAddressing)•操作数在寄存器中,即寄存器的内容就是操作数的数值。在汇编码指令中,操作数用寄存器的符号来表示。例如,INCAX,其功能为AX+1→AX。•这类寻址方式的指令的机器码字节最短,因为8个通用寄存器只要用3个代码即可区分。•另外,由于寄存器是在微处理器芯片的内部,整个操作都在微处理器内部进行,不必执行访问内存的总线周期,因此其执行速度最快。•8086的寄存器寻址中,可用的寄存器有通用寄存器和段寄存器,寄存器可作为源寄存器或/与目的寄存器。•例如“MOVDS,AX”。2020/11/7上海交通大学83,存储器寻址(MemoryAddressing)•对于存储器寻址的指令,操作数在存储器中,在指令操作中,存储器操作数出入微处理器都需经过总线。•当EU读或写一个存储器操作数时,必须将一个偏移地址(OffsetAddress)传送给BIU,BIU经过地址运算后产生一个20位的物理地址,然后执行存取该操作数所需的总线周期。•EU为一个存储器操作数而计算出来的偏移量称为操作数的有效地址EA,这是一个16位无符号数,表示该操作数所在存储单元与所在段起始地址的距离(以字节为单位)。2020/11/7上海交通大学9存储器寻址•一条存储器寻址的指令能访问由基址寄存器内容或/与变址寄存器内容或/与DISP值组合而得的有效地址EA所决定的存储单元。•其中,DISP(Displacement)为位移量,是一个8位或16位数•DISP包含在指令中,根据程序中操作数名称(变量或标号)的位置推算而得,程序员可修改或规定此值。2020/11/7上海交通大学10按其有效地址EA的形成方法可分为如下几种•1)直接寻址•2)寄存器间接寻址•3)基址寻址•4)变址寻址•5)基址变址寻址2020/11/7上海交通大学111)直接寻址(DirectAddressing)•由指令直接给出操作数的偏移地址,它紧跟在操作码之后。•例如,INCBYTEPTR[04A3H]指令中,存储器操作数的偏移地址为4A3H。•直接寻址指令的另一种表示形式为•INCADDR,•指令中存储器操作数的地址用符号地址(变量,Variable)ADDR表示。2020/11/7上海交通大学122)寄存器间接寻址(RegisterIndirectAddressing)•存储器操作数的有效地址直接取自一个基址寄存器(BX)或变址寄存器(SI或DI)。•例如•INCBYTEPTR[BX]。2020/11/7上海交通大学133)基址寻址(BasedAddressing)•以基址寄存器BX或BP的内容为基准地址,指令中再给出一个地址位移量D(D8或D16),它们组合而得存储器操作数的有效地址。•汇编码指令中有效地址的表示方法有如下几种:•(1)[BX(或BP)+D],其中,D为常量,•例如INCBYTEPTR[BP+4]。•(2)D[BX(或BP)],其中,D为变量或常量,•例如INCADDR[BX]。•当使用BP作基址寻址时,若无指定段替换,则内定在堆栈段内寻址。•若D为常量,则以有符号的二进制数表示,可为8位或16位值。当D为8位值时,有效地址计算中,位移量必须进行符号扩展。2020/11/7上海交通大学144)变址寻址(IndexedAddressing)••指令中给出一个位移量D作为基准地址,再同变址寄存器SI(或DI)的内容相加作为存储器操作数的有效地址。•汇编码指令中的有效地址有[SI(或DI)+D]以及D[SI(或DI)]两种表示,式中D的含义与基址寻址的相同。•基址寻址和变址寻址又称为寄存器相对寻址。2020/11/7上海交通大学155)基址变址寻址(BasedIndexedAddressing)•基址寄存器BX(或BP)中存放基准地址,•变址寄存器SI(或DI)存放变址值,•指令中再给出一个位移量D,•三者相加构成存储器操作数的有效地址。•其中,D可为8位数或16位数,也可以无此项。若为8位数,在计算中应进行符号扩展。2020/11/7上海交通大学16基址变址寻址•汇编码指令中的有效地址有两种表示:•1、[BX(或BP)+SI(或DI)+D],•例如,INCBYTEPTR[BX+DI+4];•2、D[BX(或BP)+SI(或DI)],例如,INCADDR[BX+SI]。•采用BP作为基址时,规定在当前堆栈内寻址。含有D项的基址变址方式又称为相对基址变址寻址方式。2020/11/7上海交通大学174,程序转移寻址•指令在顺序执行时,下一条指令的偏移地址总是由指令指针IP自动递增而得,•当程序在本段内发生转移时,需要给出即将转移去执行的那条指令的偏移地址,并用它去取代IP中的原有内容。•如果即将转移去执行的指令与原来执行的指令不在同一段中,则还需用新的代码段的段基值去取代CS中的原有内容,此时,操作数作为转移地址使用,分别送到IP和CS。2020/11/7上海交通大学18程序转移寻址程序转移寻址方式用于•条件转移指令、•无条件转移指令、•循环指令和转子指令(调用指令)。•程序转移寻址方式按目的地址的形式可分为如下几种。2020/11/7上海交通大学191)相对寻址•以IP的内容为基准地址,加上紧跟指令操作码后的相对位移量D,得到转移地址的偏移地址。•转移地址的偏移地址为IP+D,D是带符号的二进制数。•当D为8位数时,转移范围为-128~+128;当D为16位数时,转移范围为-32768~+32767(注意:不能越段)。•例如,条件转移指令JEA和无条件转移指令JMPADDR指令中的A、ADDR为转移地址的标号。这种寻址方式又称为段内直接转移。相对寻址2020/11/7上海交通大学202020/11/7上海交通大学212)段内寄存器寻址•以寄存器的内容为转移地址的偏移地址。•例如,“JMPBX”,BX中的内容即偏移地址。2020/11/7上海交通大学223)段内间接转移寻址•包括前述的存储器操作数中的寄存器间接寻址、变址寻址、基址寻址以及基址变址寻址等几种寻址方式,这些寻址方式求得的操作数即为转移地址的偏移地址。例如,•JMPWORDPTR[BX],•JMPVAR[BX][SI],•JMPWORDPTR[EA](EA为有效地址)。•指令中的[BX]及VAR[BX][SI]都表示段内间接转移地址为偏移地址。2020/11/7上海交通大学234)段间直接转移寻址•程序从一个代码段转移到另一个代码段称为段间转移,实现段间转移不仅要求改变IP中的指令偏移地址,还要改变CS中的段基值。•这种寻址方式的转移指令中带有两个16位地址,•第一个地址为转移地址的偏移值,•第二个地址为转移地址的段基值。段间直接转移寻址2020/11/7上海交通大学242020/11/7上海交通大学255)段间间接转移寻址•在这种寻址方式的转移指令中,要实现段间转•移所需的两个16位地址,可以用任何数据存储器的间接寻址方式求得,•汇编码指令形式为:•JMPDWORDPTR[EA]。段间间接转移寻址2020/11/7上海交通大学262020/11/7上海交通大学275.28086指令简析•8086的汇编码指令(即汇编语言指令)有100多条(以助记符计算),按功能可分为•数据传送指令、•算术运算指令、•位处理指令、•串操作指令、•程序转移•指令和处理器控制指令•共6大类,2020/11/7上海交通大学285.2.1.数据传送指令(共14条)助记符功能通用数据传送指令MOV传送字节或字PUSH字入栈POP字出栈XCHG交换字节或字XLAT字节转换地址目标传送指令LEA装入有效地址LDS将指针变量装入寄存器及DSLES将指针变量装入寄存器及ES标志传送指令LAHF标志寄存器低字节送AHSAHFAH值送标志寄存器低字节PUSHF标志寄存器内容进栈POPF标志寄存器内容出栈I/O指令IN输入字节或字OUT输出字节或字2020/11/7上海交通大学29数据传送指令(共14条)•src/s源,dest/d目的•reg/r寄存器,•mem/m存储器(内存)•sreg段寄存器,•B字节,W字2020/11/7上海交通大学30数据传送指令(续)1)MOVdest,src(B/W);ds2)PUSHsrc(W);SPSP-2(SP+1)(SP)srcPOPdest(W);dest(SP+1)(SP)SPSP+23)XCHGdest,src(B/W);destsrc(两操作数交换)2020/11/7上海交通大学31数据传送指令(续)4.XLAT(B)XLAT变量名/表格首地址(B)AL[BX+AL]5.LEAreg16,mem(W);reg16EAsrc(LEAloadeffectiveaddress)6.传送是复制(COPY),除XCHG,XLAT外都不改变src.7.除POPF,SAHF外,不影响FR.2020/11/7上海交通大学325.2.2.算术运算指令(20条)助记符功能加法指令ADD加法ADC带进位的加法INC增量(加1)AAA加法的ASCII修正DAA加法的十进制修正减法指令SUB减法SBB带借位的减法DEC减量(减1)NEG求补(变负)CMP比较AAS减法的ASCII修正DAS减法的十进制修正2020/11/7上海交通大学33乘法指令MUL无符号数乘法IMUL整数乘法AAM乘法的ASCII修正除法指令DIV无符号数除法IDIV整数除法AAD除法的ASCII修正CBW字节转换为字CWD字转换为双字2020/11/7上海交通大学34算术运算指令(续)1)加法指令ADDdest,src;B/W功能:dest←dest+srcADCdest,src;B/W功能:dest←dest+src+CFDest和src可以是带符号数,也可以是无符号数。INCdest;B/W

1 / 91
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功