您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第3章80x86cpu指令系统.
云南大学软件学院本科教学课程教学单位:云南大学软件学院教师:王逍80X86计算机组成与汇编语言第三章80x86cpu指令系统•指令–或称为语句,是源程序中最小的代码单元,源程序就是由一条一条的语句构成。全部指令的集合称为指令系统,其确定了cpu所能实现全部功能。•机器指令–由二进制数组成,计算机硬件只能识别﹑存储和运行机器指令。•助记符/符号指令/汇编指令–80X86汇编语言的指令助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令基本上是一一对应的。•指令的结构•计算机的指令包括:操作码+操作数↓↓操作的性质操作的对象(1或2个字节)+↓存放在(位置不同)寄存器、存储器、I/O端口地址、立即数(由寻址方式决定)•机器指令由操作码字段和操作数字段两部分组成。•操作码字段:说明cpu完成何种操作。在机器指令中对每个操作码对应一个唯一的二进制编码。•操作数字段:也称地址码,说明参加操作的数据对象本身或保存数据对象的位置。操作数字段可以有一个,二个或三个操作数或0个。•指令的分类•根据操作数的个数–单操作数、双操作数、无操作数•指令书写格式–操作码操作数1,操作数2,……•指令的编码•80X86CPU指令系统采用变长的指令格式。•一条指令可以由1~16个字节组成。可能需要占用连续多个的存储单元,存放指令的第一个存储单元地址称为指令地址。•一条指令可能包含需要操作的对象即操作数,也可能占用内存的多个存储单元。•一个操作数如果占用连续多个的存储单元,也是进行连续存放,其中,操作数的低位存放在低地址存储单元中,高位存放在高地址部分。存放数据的第一个存储单元地址称为操作数的地址。•寻址方式•寻址方式的定义–指令中说明操作数所在地址的方法。–寻址:操作数所在的位置•操作数所在的位置–1、指令代码中,这种操作数为立即数。–例:MOVAL,08H–2、cpu内部的通用寄存器或段寄存器中,这种操作数为寄存器操作数。–例:INCCX–3、存储单元中,这种操作数为内存操作数。–内存操作数占用一个或者连续多个存储单元中。机器指令中操作数字段包含着此操作数所在的第一个存储单元的逻辑地址。–4、输入/输出端口中,这种操作数为端口操作数。•寻址方式分类–1、隐含寻址方式–2、数据型操作数寻址方式–3、目标寻址方式立即寻址方式寄存器直接寻址方式直接寻址方式寄存器间接寻址方式寄存器相对寻址方式基址变址寻址相对基址变址寻址*比例寻址*串操作寻址*I/O端口寻址相对程序寻址直接程序寻址间接程序寻址•数据型操作数寻址方式一、立即寻址方式(ImmediateAddressing)•1.含义:–操作数是立即数(即8位,16位或32位的常数),直接包含在指令中。•2.特点:–翻译成机器码时,立即数是指令的一部分,紧跟在操作码之后存放在代码段内。在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。–如果立即数是l6/32位数:高字节→高地址单元,低字节→低地址单元•3.作用:–常用于给寄存器赋初值•4、注意:–立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位)中去;–立即数只能作源操作数,不能作目的操作数;–以A~F打头的数字出现在指令中时,前面必须加数字0。以免与其它符号相混淆(如:MOVAX0FF00H)。例:MOVCX,2A50H;指令的编码格式如图MOVCX,2A50H•例:立即数寻址–MOVAL,01010101B–MOVAX,-120–MOVAX,A0H;思考:指令是否正确?–MOVEAX,12345678H–MOVDL,’A’;’A’为立即数寻址–MOVCX,3*5–MOVBX,1234H–MOVBX,34H;思考:指令是否正确?–MOVBL,1234H;思考:指令是否正确?–MOVCL,4–MOVCL,300;思考:指令是否正确?–;对比:C语言中,charc=300是否正确?二、寄存器(直接)寻址方式(RegisterAddressing)•1.含义:–操作数包含在寄存器中,寄存器的名称由指令指定。•2.特点:–32位操作数:寄存器可以是EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP等;–16位操作数:寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等。–8位操作数:寄存器AH、AL、BH、BL、CH、CL、DH和DL。•3.作用:寄存器之间传递数据。•4.注意:–源操作数的长度必须与目的操作数—致。MOVBL,BX–不允许段寄存器间直接传输。MOVES,DS–不允许代码段寄存器作为目标操作数。MOVCS,AX内存操作数的寻址方式(RegisterAddressing)•绝大多数操作数存放在一个或连续多个代码段以外的存储单元中。•CPU执行指令时根据程序中的逻辑地址自动转换得到物理地址后寻址某个存储单元,最后取出其中的信息。•任何一个内存单元的地址(逻辑地址)实际上由两部分组成:•1、段的基地址:该存储单元所在段的基地址,即该段的第一个存储单元的地址(如果是寻找操作数,在大多数情况下,数据存放在数据段寄存器DS中);•2、段内偏移量:该存储单元相对于所在段的段基址的距离/偏移量。称为偏移地址或者有效地址(EA,EffectiveAddress)。•段基址和偏移地址合称为逻辑地址。CPU在寻找某个存储单元时根据逻辑地址的段基址和偏移地址就能形成(由CPU的地址生成部分自动完成)最终的物理地址,从而找到相应的存储单元。•在存储器操作数寻址方式中,一个存储单元完整的逻辑地址表达式为:•段R:[基址R+变址R*比例因子+位移量]•冒号之前称为段超越前缀助记符(简称段超越前缀),用于通知CPU在生成物理地址时应该使用那个段寄存器的内容以获取逻辑段的段基址。•冒号之后的部分称为有效/偏移地址表达式。用来通知CPU在生成物理地址时在一个逻辑段中的某个存储单元,相对于段基址的偏移/有效地址。•[]表示括号中的内容是存储单元的偏移/有效地址、而不是操作数本身。•有效地址(EA):在一个逻辑段中,某存储存储单元相对于段首址的地址位移量。有效地址(EA)的组成部分:–基址:存放在基址寄存器–变址:存放在变址寄存器–比例因子:386及其后继机型新增加的术语。其值可为1,2,4,或8,可用变址寄存器的内容乘以比例因子来取得变址值–位移量:存放在指令中的一个8/16/32位的数,但它不是一个立即数,而是一个位移量(偏移地址的一部分)。表16/32位寻址时偏移地址的构成16位寻址32位寻址基址寄存器BX,BP任何32位的通用寄存器变址寄存器SI,DI除ESP以外的32位通用寄存器比例因子无1,2,4,8位移量字长0,8,160,8,32•80x86指令系统提供了多种存储器寻址方式。–直接寻址;–寄存器间接寻址;–基址寻址;–变址寻址;–基址加变址。三、直接寻址方式(DirectAddressing)•1.含义:–存储单元的有效地址EA(即:操作数的偏移地址)由指令的操作数字段中直接给出。–即:EA=操作数–操作数可以是8位,16位,32位(仅在保护模式中)。•2.特点:–机器码中,有效地址存放在代码段中指令的操作码之后,而该地址单元中的数据总是存放存储器中。须先求出操作数的物理地址,再从存储器中取得操作数。–操作数的物理地址=16×DS(默认)+EA•3.作用:实现对存储单元的读/写操作。•4.段超越前缀:可以使用段超越前缀指定段地址,省略时默认为DS。–例MOVAX,ES:[100]–Debug中应该写位es:movax,[100]–物理地址=16×ES+100•6.符号地址–汇编语言中一般用符号地址代替直接数值地址,由编译器来计算操作数的有效直接地址,防止人工计算地址出错。例:AREA1DW0867HMOVAX,AREA1MOVAX,[AREA1]MOVAX,ES:[AREA1]区分:MOVAL,78HMOVAL,[78H]MOVAX,DS:[78H]MOVAL,ES:[78H]例MOVAX,[2000H]解:设DS=3000H,由指令得:EA=2000H(16位逻辑地址)物理地址=16×3000H+2000H=32000H(20位,20根地址线)设32000H地址单元的内容为1234H,即(32000H)=1234H则:AX=1234H指令执行过程如图所示。(注:如用AL替代AX,则AL=34H)四、寄存器间接寻址方式(RegisterIndirectAddressing)•1.含义:–操作数的有效地址EA放在寄存器中,寄存器在中括号中[],寄存器称为间接寄存器。–EA=间接寄存器–寄存器的内容并不是操作数,而是操作数所在的内存中某个存储单元的偏移地址。•2.16位寻址–可以使用的寄存器有:基址寄存器BX、BP,变址寄存器SI、DI。如果使用BX、SI、DI寄存器,则默认操作数在数据段DS中如果使用BP寄存器,则默认操作数在堆栈段SS中–操作数的物理地址=16×DS+BX/SI/DI或=16×SS+BP四、寄存器间接寻址方式(RegisterIndirectAddressing)•3.32位寻址–可以使用的寄存器有:EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP。如果使用EBP,ESP寄存器,则默认操作数在堆栈段SS中;使用其他寄存器,则默认操作数在数据段DS中–操作数的物理地址=16×DS+EAX/EBX/ECX/EDX/ESI/EDI或=16×SS+EBP/ESP•4.作用:实现对存储单元的读/写操作。例MOVBX,[SI]解:设:DS=1000H,SI=2000H,(12000H)=318BH则:物理地址=16×DS+SI=10000H+2000H=12000H指令执行后,BX=318BH,指令执行过程如图所示。操作码代码段数据段8B3110002000DSSI+12000×10H12000318BBXBHBL指令执行过程示意图•4.注意:•寄存器名称外必须加方括号,以区别寄存器直接寻址方式;•不允许使用8位寄存器;•可以使用段超越前缀来从默认段以外的段中取得数据;例:MOVBX,ES:[SI];MOVFS:[EBP],DL;Debug与debug32的不同:debug中输入es:movbx,[si]debug32中输入movdl,fs:[ebp]区分:MOVAL,[BX];MOVAL,BX五、寄存器相对寻址方式(RegisterRelativeAddressing)•1.16位寻址含义:操作数的有效地址是基址寄存器BX,BP或变址寄存器SI,DI的内容与8位或16位位移量(Displacement)之和。即[BX]/[BP]EA=+8位偏移量/16位偏移量COUNT[SI]/[DI]•2.16位寻址特点:可以使用寄存器:BX、BP、SI、DI。操作数的物理地址=16×DS+BX/SI/DI+COUNT或=16×SS+BP+COUNT五、寄存器相对寻址方式(RegisterRelativeAddressing)•3.32位寻址含义:操作数的有效地址是EBP、ESP、EAX、EDX、ESI、EDI、EBP、ESP的内容与8位或16位或32位位移量(Displacement)之和。即[EAX]/[EBX]/[ECX]/[EDX]EA=+8位偏移量/16位偏移量/32位偏移量COUNT[ESI]/[EDI]/[EBP]/[ESP]•4.32位寻址特点:操作数的物理地址=16×DS+EAX/EBX/ECX/EDX/ESI/EDI+COUNT或=16×SS+EBP/ESP+COUNT例MOVBX,COUNT[SI];或:MOVBX,[COUNT+SI]解:设:DS=3000H,SI=2000H,位移量COUNT=4000H,(36000H)=318BH则:物理地址=16×DS+SI+COUNT=30000H+2000H+4000H=36000H指令执行后,BX=318BH403000六、基址变址寻址方式(RegisterRelativeAddressing)•1.16位
本文标题:第3章80x86cpu指令系统.
链接地址:https://www.777doc.com/doc-2155519 .html