微机原理与接口技术3_第1页
微机原理与接口技术3_第2页
微机原理与接口技术3_第3页
微机原理与接口技术3_第4页
微机原理与接口技术3_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章命令系统在本章中,3.1地址方式3.2 8086命令系统3.3 80286以上被扩展了的命令、3.1地址方式、3.1地址方式、操作数为命令的处理对象。 指定操作数或操作数存储位置的方法称为地址方式。 对于80 x86CPU,其地址方式分为3种,共计7种地址方式。 立即地址寄存器地址存储器地址直接媒体方式寄存器间地址方式寄存器相对地址方式基础地址和索引修饰方式相对地址和索引修饰方式、3.1地址方式、1,立即地址方式:操作数作为命令的一部分直接写入命令中实际上,使用的数据作为直接常数给命令。 例如,MOV AX、6789H ADD AX和1234H的寻址方法要求数据在编程时是明确的,不能修改

2、。 请注意,3.1寻址方法,并且立即数量为8位、16位或32位。 如果即时数是16比特或32比特,则以“高低低”的原则来存储,“高低低”是指数据的高位比特存储在高位地址,数据的低位比特存储在低位地址。 8086是16位码片,在8086系统中,指令直接给出的即时数最多是16位,在32位的情况下,类似的指令必须使用两次。 例如,两个32位数据的相加是基于ADD AX、1234H ADC DX、5678H、3.1地址方式、2、寄存器地址方式:是否预先在寄存器中存储了指令所需的操作数、目标操作数例如,除了不能直接使用MOV AX、BX IP寄存器以外,段寄存器的使用也有限制。 寄存器在CPU中使用寄存

3、器地址方式的指令的执行速度很快。 提倡尽可能地使用寄存器寻址方式。 3.1地址方式、3、存储器地址方式中,直接地址寄存器间接地址寄存器相对地址和索引地址相对地址和索引地址、3.1地址方式、1直接地址方式是指令中直接输入该操作数的段地址和有效地址MOV AX、DS:2000H的很多指令都有存储默认数据的段。 例如,上述命令是MOV AX、2000H MOV AX、DS:2000H MOV AX、ES:2000H、3.1地址方式、2寄存器间地址方式的操作数存在于存储器中,操作数的有效地址是SI、DI、BX和BP这4个寄存器如果在段未超过前缀时用SI、DI、BX等来指定有效地址,则MOV AX、DS

4、:BX为其默认段寄存器指定了SS (即,如果在BP中指定了DS有效地址,则其默认段寄存器为SS )。 另外,3.1地址方式、3寄存器相对地址方式操作数,在存储器中,有效地址是一个基地址寄存器(BX,BP )或索引寄存器(SI,DI )的内容和指令中的8位/16位偏移(即相对值) 用补数表示MOV BX,SI 100H指令中提供的8位/16位偏移。 在计算有效地址时,如果偏移是8位,则将符号扩展为16位。 如果在总和之后获得的有效地址超过了0FFFFH段的大小,则采取64K的类型。 3.1地址方式、4基本地址和索引修饰方式的操作数是存储器,有效地址是基本地址寄存器(BX,BP )和索引寄存器(S

5、I,DI )的内容之和。 例如,请特别注意MOV BX、BX DI MOV BX、BX SI MOV BX、BP DI MOV BX、BP SI,不要将基地址寄存器和索引寄存器混淆。 3.1地址方式,5是对于基本地址和索引修饰方式的操作数的存储器,有效地址是基本地址寄存器(BX,BP )的值和索引寄存器(SI,DI )的值和指令中的8位/16位偏移的和。除了MOV BX、BX DI 200的形式符合上述若干规则之外,其表现形式还比较灵活。 例如,如下所述的写法完全等价: 200BXDI BX 200DI BX DI 200、3.2 8086命令系统、3.2 8086命令系统、命令系统是确定CP

6、U能够实现的功能,并以汇编语言进行程序设计的基本部分。 通过其功能,可以实现数据传送指令标志位操作指令、算术运算指令、逻辑运算指令移位操作指令、指令循环指令、指令转移指令条件设定字节指令、字符串操作指令、ASCII-BCD代码运算、调整指令处理器指令、3.2 8086指令系统, 指令格式:汇编语言的指令格式如下:指令辅助符号操作数1、操作数2、操作数在指令中包含操作数,如果指令要求明确写入的话,写时应该遵守:指令辅助符号和操作数之间有空格的指令中包含多个操作数创建操作数之间用逗号(,)分隔的程序时,也可以在命令之后写注释的内容,但在注释之前写分号“; 中所述情节,对概念设计中的量体外部表面积进

7、行分析。 3.2 8086命令系统,二、数据传输命令: 1传输命令MOV传输命令MOV对高级语言的赋值语句。 命令的功能是将源操作数(第二个操作数)的值传递到目标操作数(第一个操作数)。 命令的形式为MOV Reg/Mem、Reg/Mem/Imm。 RegRegister (寄存器)、MemMemory (内存)、ImmImmediate (即时数)、8位、16位、32位(特别表示其位数的除外)。 以下,采用上述缩写,并省略说明。 3.2 8086命令系统、MOV命令有以下几个具体规定,其中对其他命令也有有效的规定。 两个操作数的数据类型必须相同的两个操作数不能同时为段寄存器,代码段寄存器CS

8、不是目标操作数,但、 不能立即将数量传递给段寄存器。即时数量不是目标操作数的指令指针IP不能作为MOV指令的操作数。两个操作数不能同时作为存储单元。 3.2 8086命令系统、2交换命令XCHG交换命令XCHG(Exchange Instruction )在两个寄存器间、寄存器和存储器变量间进行数据交换,两个操作数的数据类型相同。 XCHG Reg/Mem、Reg/Mem寄存器不是段寄存器,不能将2个操作数同时设为内存变量。 3.2 8086命令系统、3有效地址命令LEA(Load Effective Address )将存储器变量的有效地址发送到指定的寄存器。 其命令形式通常被用于使指针、索

9、引寄存器BX、DI、SI等为初始值。3.2 8086命令系统,4负载段寄存器命令Load Segment Instruction命令的功能是将存储器中地址的“负载字”转送到指令所指定的16位寄存器,后续的“高字”转送到相应的段寄存器(其命令形式,LDS/LESReg,Mem取得有效地址的命令和由段寄存器命令得到的地址的源完全不同。 例如,当执行POINTERDD12345678H LDS BX,POINTER命令时,各寄存器的内容分别为: (BX)=5678H,(DS)=1234H。 3.2 8086命令系统,5堆操作命令堆是具有“先进后出”特征的数据结构。 主要有两种操作。 堆叠操作和堆叠操

10、作。 (1)进入命令PUSH,命令格式: PUSHReg/Mem (2)退出命令POP,命令格式: POPReg/Mem,3.2 8086命令系统,6标志寄存器传送命令(1)标志AH命令LAHF功能: Flags的低位8位AH。 (2)AH标志寄存器指令SAHF功能: AH值发送Flags的低位8比特。 (3)标志寄存器进入指令PUSHF功能:进入16位标志寄存器。 (4)标志寄存器堆栈指令POPF功能:将堆栈顶部的16位数据堆栈到标志寄存器中。 这些命令没有形式上的参数.、3.2 8086指令系统、7转换指令XLAT转换指令(Translate Instruction )可以作为操作数提供内

11、存地址,也可以没有形式的操作数,有隐式操作数BX和AL两种。 具有将在给定指令中明确给定的存储器地址或默认的BX的值作为存储器字节数组的开头地址、后缀作为AL的数组元素的值而传递给AL:ALBXAL的功能。 命令形式是XLAT Mem或XLAT、3.2 8086命令系统、8I/O命令8086CPU命令系统中,通常的访问存储器命令无法访问该信息,I/O命令访问I/O端口(1)输入命令inal,PortNo/DX (2)输出命令outportno/DX,alio设备的端口地址在0255的范围内,则能够用命令直接给出,不是该端口地址存储在寄存器DX中、3.2 8086指令系统、3、算术运算指令: 1

12、加法指令(1)加法指令ADD ADD Reg/Mem、Reg/Mem/Imm将源操作数的值与目标操作数相加。 (2)带进位加法指令的adcreg/mem、Reg/Mem/Imm源操作数和进位标志位的值相加。 (3)加法1命令increg/mem对操作数的值进行加法运算。 3.2 8086命令系统,2减法命令(1)减法命令SUB SUB Reg/Mem,Reg/Mem/Imm从目标操作数中减去原始操作数。 (2)带借用位的sbsbbrereg/mem、Reg/Mem/Imm一起减去源操作数和标志CF的值。 (3)命令3)decdecdecregreg/mem减去1,从操作数的值减去1。3.2 8

13、086指令系统,2减法指令(续) (4)改变互补指令NEG NEG Reg/Mem操作数0操作数,即操作数的符号。 (5)比较指令cmpreg/mem、Reg/Mem/Imm不保持结果的减法运算,其目的是通过影响标志位获得两者的关系。 数据传输指令除了直接操作标志寄存器以外,一般不影响标志位,之后的指令大多会影响标志位,所以请参照教科书附录b。 3.2 8086命令系统,3乘法命令(1)无符号数乘法命令MUL MUL Reg/Mem (2)有符号数乘法命令IMUL IMUL Reg/Mem无符号乘法命令和有符号乘法命令的唯一区别在于,数据的最高位作为“数值”参与运算,或者作为“符号比特” 乘法

14、指令的被乘数都是隐式操作数,乘数显式写在指令中。 CPU根据乘数的位数来确定被乘数。 3.2 8086指令系统,4除法指令(1)无符号除法指令divreg/mem(2)有符号除法指令idivreg/mem除法与乘法隐式操作数类似,具体参照教科书表3-2和表3-3、3.2 8086指令系统,则为5数据型该功能用AL的符号比特来填充AH (即,当AL为正时AH=0),否则AH=0FFH。 (2)将字转换成双字命令CWD CWD的这个命令的隐含操作数是AX和DX,具有用AX的符号位嵌入DX的功能。 两个命令都没有形式上的参数。 3.2 8086指令系统,四,逻辑运算指令:逻辑运算指令与高级语言相同,

15、主要包括逻辑AND、逻辑OR、逻辑NOT和异或指令XOR等。 逻辑运算指令全部以位计算。TEST指令是不保存结果的and运算,可以与前面说明的CMP进行比较。 3.2 8086指令系统,5,转换指令:、图,3,-、1,转换指令执行映像,c,0,、ROL、 多用移位指令置换乘法2的平方的少量位数的移位,一般不是由CL决定,而是通过重复数次的1次移位实现的移位指令,但对标志位的影响不同。3.2 8086指令系统,6,环路指令: 1环路指令(1)环路指令: LOOP (2)等于或不等于零环路指令: LOOPZ/LOOPE (3)零环路指令: LOOPNE/LOOPNZ,3.2 8086指令系统实现“

16、in”型循环需要相应的处理。 只有一个短转变。 换句话说,偏移量不能超过128。 换句话说,循环中所有脚本的字节数的总和不能超过128。 CX (ecx )-1进程对标志没有影响。 在CX的初始值为0时的周期数最大为10000H次。 3.2 8086指令系统、2周期计数器零转指令的功能在CX=0时,通过程序转移标签执行。 由于JCXZ码通常使用该指令作为循环的开头,在判断CX是否为0之后再进入循环整体来执行,所以是可以与循环指令结合来构成“相当”型循环的形式。 3.2 8086命令系统,7,转变命令:1.无条件转变命令JMP标签/Reg/Mem 2条件转变命令根据一个标志寄存器的标志位来确定是否需要转变。 Jxx标签/Reg/Mem条件迁移命令从Jxx的下一个命令到目标地址的距离必须在-128127字节以内。 如果条件分支的范围宽,就必须用条件分支命令JMP来实现。 对初学者,提倡使用标签的方式。 3.2 8086命令系统,

温馨提示

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

最新文档

评论

0/150

提交评论