南航微机原理课件吴宁版chapter3

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

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

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

资源描述

3.180X86/Pentium指令格式3.280X86/Pentium寻址方式3.38086/8088CPU指令系统3.480X86/PentiumCPU指令系统3.580X87浮点运算指令第3章80X86/Pentium指令系统第3章80X86/Pentium指令系统指令系统:微机处理器所能执行的各种指令的集合,它定义了计算机硬件所能完成的基本操作。本章重点:基本指令集对80X86/Pentium系列CPU:8086/8088的16位指令系统是基本指令集。80286-Pentium的指令系统对基本指令集进行了增强与扩充:①32位整数指令集②多媒体MMX指令集③数据流SIMD扩展SSE指令集④保护模式编程的系统控制类指令等不同的微处理器有不同的指令系统南京航空航天大学电子信息工程学院第3章80x86/Pentium指令系统3.180x86/Pentium指令格式汇编语言指令的特点----机器指令:指令的二进制代码形式。如:89D8H汇编指令:助记符形式的指令。如:MOVAX,BX操作数OPCode动作:做什么?对象:针对什么做动作?立即操作数MOVAL,50HReg操作数INCAL存贮器操作数MOVAL,[2000H]I/O操作数:INAL,28H操作码/助记符:与动作一一对应目/源操作数:可能有多种组合第3章80x86/Pentium指令系统操作码:由CPU设计人员定义。每一种操作唯一对应一个操作码。例:加法操作助记符ADD;数据传送操作助记符MOV;比较操作助记符CMP;操作数:可由编程人员采用不同方式给出。指令格式:指令中对操作码、操作数的编码方式。对x86,由1~16个字节构成。datadisps-i-bmodr/m操作码前缀1~41~2110.1.2.40.1.2.48086/8088指令格式:1~6个字节data(高)data(低)disp/data(高)disp/data(低)modr/mOPCode第3章80x86/Pentium指令系统有效地址EA:从段的首地址到操作数所在地址的距离,用字节数表示,是一个无符号16位整数,它指向段首地址开始的64KB。操作码与寻址方式字节:01234567WDOPCodemodregr/m在指令中的操作数以8086/8088指令格式为例:1~6个字节data(高)data(低)disp/data(高)disp/data(低)modr/mOPCode操作码寻址方式依据指令的不同而取舍规定指令的操作类型指出存贮器操作数地址的位移量或立即数两个操作数存放地址及EA计算方法第3章80x86/Pentium指令系统第二字节:reg.—编码(23=8)表示一个具体的reg.操作数,字节或字已由W决定,目的或源由D决定。mod—编码表示另一个操作数是在reg.中还是在存贮器中。11编码为reg.,其他编码为存贮器。当mod=11时,r/m指出第二个reg.操作数的编码。当mod≠11时,r/m指出存贮器操作数存放地址的计算方法。01234567WDOPCodemodregr/m第一字节:操作码(OpCode)—操作类型W(字操作标志位)—操作数类型=D(reg.寻址标志位)—reg.操作数传送方向=0字节1字0reg.操作数为源操作数1reg.操作数为目的操作数南京航空航天大学电子信息工程学院第3章80x86/Pentium指令系统说明:若指令中两个操作数都是reg,则D=1。当:D=1,reg.为目的操作数,由modr/m决定源。D=0,reg.为源操作数,由modr/m决定目的。1100111100000010例1:ADDCL,BH;两个reg相加机器语言:00000010|11001111OPCodeDreg.为目的操作数W字节运算modreg.寻址方式reg.CLr/mBH第一个操作数为目的reg第二个操作数为reg.操作数机器码存放在内存中南京航空航天大学电子信息工程学院第3章80x86/Pentium指令系统例2:ADDDISP[BX][DI],DX;reg与存储器相加机器语言:0000000110010001OPCodereg.为源操作数字操作数第二个是存贮器操作数reg.DXEA=BX+DI+D16disp设DISP=2345H,则有001000110100010100100011010001011001000100000001低disp(8)高disp(8)指令代码:第3章80x86/Pentium指令系统说明:①汇编语言指令可手工汇编成机器码.②即使是同一种指令,不同的寻址方式,其机器指令码长度会有所不同。编程时应选择合理算法、数据结构、寻址方式等节省MEM。③该指令的正确形式:ADDWORDPTRDISP[BX][DI],-105D例3:ADDDISP[BX][DI],-105D8381452397此FFH仅在运算时用,不作为指令码存在代码段-105D11101001原码10010111补码OPCode机器码为:10000011W字10000001D低位数据符号扩展0100010145H0010001123H10010111(-105D)的补码,低8位11111111低位立即数符号的扩展disp南京航空航天大学电子信息工程学院第3章80x86/Pentium指令系统回顾80X86/Pentium指令格式:(1)OPCode——规定指令的操作类型,同时还指出:①操作数类型②reg.操作数传送方向③reg.编码④符号扩展(2)modr/m和s-i-b寻址字段:规定reg./mem操作数的寻址方式其中,modr/m是主寻址字节,规定:操作数存放的位置r/m及存贮器操作数有效地址EA的计算方法。s-i-b是比例-变址-基址寻址字节:此字节可有可无,按主寻址字节编码而定。(3)disp位移量字段:存贮器操作数有效地址EA的一部分,为:0、1、2、4个字节。(4)data立即数字段:指明立即数的大小,0、1、2、4个字节。当8位与16/32位操作数一起使用时,CPU自动将它扩展为符号相同的16/32位数.第3章80x86/Pentium指令系统(5)前缀字段——用于修改指令操作的某些属性◆段超越前缀:将前缀中指明的段reg.取代指令中默认的段reg.◆重复前缀:串操作时置于指令前面,提高CPU处理串数据的速度◆总线锁定前缀Lock:用于产生Lock信号,防止其他主控设备中断CPU在总线上的传输操作。◆操作数宽度前缀:改变当前操作数宽度的默认值(由汇编程序自动设定)◆地址宽度前缀:改变当前地址宽度的默认值(由汇编程序自动设定)所有字段只有操作码字段是必需的,其他字段均可有可无。前缀的编码为1个字节,在一条指令前可同时使用多个指令前缀,不同前缀的前后顺序无关紧要。南京航空航天大学电子信息工程学院第3章80x86/Pentium指令系统3.280x86/Pentium寻址方式3.2.1寻址方式与有效地址EA的概念寻址方式:操作数的存放形式与如何寻找操作数。依据寻址方式,可方便地访问到各类操作数。操作数存放位置:(1)操作数在指令中,与代码存放在一起,称为立即操作数——立即寻址(2)操作数在Reg.中,指令中操作数部分是对应Reg.的编码——Reg.寻址(3)操作数在mem中,指令中操作数部分是操作数的存储地址——存储器寻址存储器寻址时,指令中操作数部分给出的地址是段内偏移地址。为了处理各种数据结构的需要,这个段内偏移量可以由几个基本部分组成,故称其为有效地址EA(区别于指令机器代码中计算物理地址时的位移量)。南京航空航天大学电子信息工程学院在80X86/Pentium中,任何内存单元的物理地址都由两部分组成:段基地址和段内偏移地址(段内偏移量)存贮器寻址时,指令中给出的是段内偏移地址对实地址方式——DS是段基地址的高16位,称为段地址;TABLE为段内偏移量,16位。物理地址PA=DS×16+TABLE对保护方式——DS中是指向段描述符的16位段选择符,通过它可得到32位段基地址;TABLE为32位。线性地址=段基地址+TABLE换算成32位PA如:DS:TABLE第3章80x86/Pentium指令系统南京航空航天大学电子信息工程学院第3章80x86/Pentium指令系统有效地址EA有4个分量组成:EA=(基址寄存器)+(变址寄存器×比例因子)+位移量4个分量的取值规定,对于16位寻址和32位寻址有所不同。表3-116位和32位寻址时4种分量的使用规则有效地址分量16位寻址32位寻址基址寄存器BX,BP任何32位通用寄存器(EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP)变址寄存器SI,DI除ESP外的任何32位通用寄存器(EAX/EBX/ECX/EDX/ESI/EDI/EBP)比例因子11,2,4,8位移量0,8,16(位)0,8,32(位)1.立即寻址操作数包含在指令中,紧跟着操作码并与操作码一起存放在代码段中,与代码一起被取入CPU的指令队列,在指令执行时不需要再访问存贮器。例:MOVAL,80HMOVAX,1234HMOVEDX,12345678H①立即操作数可以是8、16、32位。若是16或32位,则存放时必须满足低对低,高对高的原则。②指令中的立即数只能是源操作数,不能是目的操作数。③常用于给Reg.赋初值。1234立即寻址方式示意图3.2.2各种寻址方式(共11种。8086/8088/80286(16位寻址)只有8种,80386/486/Pentium系列CPU(32位寻址)11种)第3章80x86/Pentium指令系统2.寄存器寻址操作数存放在指令规定的8、16或32位Reg中,Reg名字出现在指令中。例:INCCL;CL←CL+1MOVAX,BX;DS←AXMOVECX,EAX;ECX←EAX指令执行后,源操作数不变,目的操作数为源的内容。①Reg是任何CPU中的通用RegAX,BX,CX…BP…AH,AL…等②操作数在Reg中,无需访问总线,执行速度快。③若选用AX,执行指令时间更短。3.存储器寻址操作数在存贮区中,操作数的有效地址EA在指令中,段地址在默认的或段超越前缀指定的段寄存器中。操作数的物理地址PA=DS(或SS、ES…)×16+EA第3章80x86/Pentium指令系统第3章80x86/Pentium指令系统(1)直接寻址EA=指令中给出的位移量数据有效地址EA直接在指令中给出,它存放在代码段操作码之后。操作数一般在数据段DS中(这是一种默认方式)。例:MOVAL,[2000H];将DS段中2000H单元的内容送AL设DS=4000H,则物理地址为:4000H×16+2000H=42000H①允许段超越例:MOVAX,ES:[2000H](或ES:MOVAX,[2000H])AXES:2000H2001H将ES段中2000H、2001H单元内容分别送AL、AH(低对低,高对高)不管数据在哪个段内存放,只要不是DS,一定要加段超越前缀。第3章80x86/Pentium指令系统②直接寻址中EA可以以变量名的形式给出。例:VALUEDB12HMOVAL,[VALUE];将变量VALUE所指的字节;单元内容12H存入AL或MOVAL,VALUE;VALUE又称为符号地址(2)Reg间接寻址EA=(Reg)操作数的有效地址EA在指令指定的Reg中Reg使用规定如下:①16位寻址时,EA在DI、SI、BP、BX中,这时:若以DI、SI、BX间接寻址,则默认操作数在数据段中。操作数物理地址=DS×16+BX→(或SI、DI)若以BP间接寻址,则默认操作数在堆栈段内.操作数物理地址=SS×16+BP若操作数不在以上默认段,则必须在指令中加上段超越前缀。例:MOVAX,[SI];将DS段[SI][SI+1]的内容送AL,AHMOVBH,[BP];将SS段[BP]的内容送BHMOVCX,ES:[BX];将ES段[BX][BX+1]内容送CL,CH第3章80x86/Pentium指令系统②32位寻址时,8个32位通用R

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

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

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

×
保存成功