
微机原理汇编指令集合.doc
16页微机原理及接口技术常用编指令微机原理及接口技术常用编指令一.寄存器寄存器(用来存放存储单元的段地址或偏移地址、参与运算的数据、状态标志等)相关指令8086 CPU 中有 14 个 16 位的寄存器,这 14 个寄存器按照功能分为四类:通用寄存器、段寄存器组、指令指针、标志位寄存器 FR1.通用寄存器(通用寄存器(8 个)个)㈠㈠数据寄存器数据寄存器:①AX(accumulator):寄存器(累加器)它的由来来源于 EAX 寄存器(32 位):EAX 累加寄存器 EAX 分为高 16 位和低 16 位其中低 16 位又可单独访问,命名为 AX,16 位寄存器 AX 又可单独访问,可分为高、低分别为 AH、AL 字节个 8 位AX 常用于运算;在乘法和除法中指定用来存放操作数,另外所有的 I/O 指令都使用这一个寄存器与外接设备传送数据②BX(base)::基址寄存器,寄存器(基址寄存器)它的由来来源于 EBX 寄存器(32 位):EB X 累加寄存器 EBX 分为高 16 位和低 16 位其中低 16 位又可单独访问,命名为BX,16 位寄存器 BX 又可单独访问,可分为高、低分别为 BH、BL 字节个 8 位。
BX 常用于地址索引,查表和间接寻址时存放基地址③CX(count)::计数寄存器,寄存器(计数寄存器)它的由来来源于 ECX 寄存器(32 位):EC X 累加寄存器 ECX 分为高 16 位和低 16 位其中低 16 位又可单独访问,命名为CX,16 位寄存器 CX 又可单独访问,可分为高、低分别为 CH、CL 字节个 8 位常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.④④DX(data)::数据寄存器,寄存器(数据寄存器)它的由来来源于 EDX 寄存器(32 位):ED X 累加寄存器 EDX 分为高 16 位和低 16 位其中低 16 位又可单独访问,命名为DX,16 位寄存器 DX 又可单独访问,可分为高、低分别为 DH、DL 字节个 8 位常用于数据传递㈡㈡指针和变址寄存器指针和变址寄存器这些寄存器存放的是段内的偏移量,用来形成操作数的存储地址SP(Stack Pointer)::堆栈指针,与 SS 配合使用,可指向目前的堆栈位置,SP 指向栈顶BP(Base Pointer):基址指针寄存器,可用作 SS 的一个相对基址位置,BP 指向栈的任何一单元。
SI(Source Index):源变址寄存器可用来存放相对于 DS 段之源变址指针 DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址 指针,指令中 SI 对应 DS , DI 对应 ES 不能互换2.指令指针指令指针 IP(Instruction Pointer)((1 个)个)16 位的指令指针 IP,用来存放下一条指令在 CS(代码段寄存器)中的偏移量 当发现中断或调用时 BIU【(Bus Interface Unit)总线部件,功能是取指令、读 操作数和送出结果】自动将 IP 的偏移量压入堆栈保存,并调整 IP 的内容程 序不能直接访问 IP,但可以通过中断、转移等指令来修改 IP 的内容3.段寄存器段寄存器(Segment Register)((4 个)个)为了运用所有的内存空间,8086 设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;存放当前执行的指令在内存中的地址段CS 和 IP 决定了当前指令的逻辑地址 DS(Data Segment):数据段寄存器;存放当前数据段的段地址DS 和 SI 决定了字符串 操作时目的操作数的地址。
SS(Stack Segment):堆栈段寄存器;存放当前数据段的堆栈地址,SS 与 SP 决定了当 前堆栈的顶部,所谓堆栈是以“后进后出”规则保存信息的一种存储机构8086CPU 的堆 栈段地址在 SS 寄存器中,堆栈当前偏移地址在 SP 寄存器中,SP 的初值代表了堆栈区的 大小 ES(Extra Segment):附加段寄存器附加段是一个附加的数据段ES 和 DI 决定了字符 串操作时目的操作数的地址4.标志位寄存器标志位寄存器 FR((Flag Regise))8086CPU 设置了一个 16 位的标志寄存器 FR,用来显示微机的运行结果或控制机制操作, 规定了其中的 9 位,标志的设置,FR 的九个标志按作用可分为两大类:一类叫状态标志, 用来表示运算结果的特征,他们是:CF、PF、AF、ZF、SF、OF另一类叫做控制标志, 用来控制 CPU 的操作,它们是:IP、DF、TFCF(carrier flag)进位标志位:运算中高四位中发生进位或错位时,CF=1;否则 CF=0;STC 指令可置 CF=1,CLR 指令对 CF 求反;循环指令也会影响该标志位DF(direction flag)方向标志位:控制串指令对字符串处理的方向。
DF=0 时,变址地址指针 SI、DI 作增量操作,即由低地址向高地址进行串操作,字节操作增量为 1,字操作增量为 2;DF=1 时,作减量操作,即由高地址向低地址进行串操作STD 指令可置 DF=1,CLD 指令置 DF=0OF(overflow flag)溢出标志位:当运算结果超出机器的的表示范围时 OF=1;否则为 0;存 在以下几种情况可称之为溢出【即使 OF=1】两个正数相加得到一个负数;l 两个负数相加 得到一个正数;两个相同符号的数相乘得到一个负数;两个异号的数相乘得到一个正数PF(parity flag) 奇偶校验位:当运算结果的低 8 位中 1 的个数为偶数时,PF=1;否则 PF=0;AF(auxiliary flag)辅助进位标志:在运算结果的低 4 位向高 4 位有进位(加法)或有错位 (减法)时,AF=1 否则 AF=0.该标志一般在 BCD 码运算中作为是否进行十进制调整的判 断ZF(zero flag)零标志位:结果为 0,ZF=1,否则 ZF=0.SF(sign flag) 符号标志位:在进行有符号运算数的算术运算,当运算结果为负时 SF=1, 否则为 0。
IF(interrupt flag)中断允许标志位:控制可屏蔽中断的标志当 IF=1 时,允许 CPU 响应屏 蔽中断请求;当 IF=0 时,禁止响应TF(trap flag) 陷阱标志位:这是为程序调试而提供的 CPU 单步工作方式TF=1 时,CPU每执行完 一个条指令就产生一个内部中断,以便对每一个指令的执行结果进行跟踪调查二、数据传送指令二、数据传送指令1、数据传送指令、数据传送指令⑴⑴通用数据传送指令通用数据传送指令 MOV(Move) 数据传送 Mov 指令形式【MOV OPRD1 目的操作数 OPRD2 源操作数】它允许在 CPU 的寄存器之间、存储器和寄存器之间传送字节和字数据,也可以将立即数传送到寄存器或 存储器中功能即:将源操作数送入目的操作数中,源操作数保持不变 以下注意点:立即数、代码段寄存器 CS(代码段寄存器)只能做源操作数; IP(指令指针)寄存器不能作源操作数或目的操作数;MOV 指令不能在两个存储单元之间 直接传递数据,也不能在两个段寄存器之间直接传送数据;两个操作数的类型属性要一致堆栈操作指令 POP(Pop from the stack) 、PUSH(Push onto the stack) 堆栈是以“先进后出”方式工作的一个存储区,栈区的段地址由 SS 寄存器的内 容确定,而栈顶位置由堆栈指针 SP 寄存器的内容来确定。
堆栈操作指令包括入栈 (PUSH)和出栈指令(POP)指令两类这两条指令必须以字为操作,不能采用立即寻址 方式 入栈操作:PUSH OPRD ; OPRD 为源操作数功能将源操作数压入堆栈源操作数可以是 16 位通用寄存器、段寄存器或存储器中的数据字堆 栈是以“先进后出|”的原则工作,栈区的段地址由 SS 寄存器的内容 确定每一次执行 PUSH 的步骤为:首先修改 SP 的值,SP=SP-2;低 位字节地址在较低地址单位【SP】=OPRD 低 8 位;高字节放在较高 地址单位, 【SP+1】=OPRD 高八位由于堆栈操作都是以字为单位进 行的,所以 SP 总是指向偶地址单元 出栈操作:POP OPRD ; OPRD 为目的操作数将当前 SP 所指向的堆栈 顶部的一个字送到指定目的操作数中目的操作数可以是 16 位通用寄 存器、段地址寄存器或存储单元,但 CS 不能做目的操作数每执行 一次 POP 指令后,SP=SP+2,即 SP 向高地址方向移动,指向栈顶数据交换指令 XCGH(Exchange)XCGH OPRD1【目的操作数】 OPRD2【源操作数】把一个字节或一个字 的源操作数和目的操作数相互交换。
交换能在通用寄存器与累加器之间、通用寄存器与存 储器之间进行但段寄存器和立即数不能作为一个操作数,也不能在累加器之间进行2.累加器专用传送指令累加器专用传送指令字节交换指令 XLAT(Translate) XLAT [转换表] ;换码用查表方式将一种代码XLAT 指令有两种格式,第一种 格式中的“转换表”为表格的首地址,一般为符号表示,以提高程序的可读性,但它也可 以省略,即用第二种格式使用 XLAT 指令时,要求 BX 寄存器指向该表的首地址,AL 中 为表中某一项与表格首地址之间的偏移量指令执行时,会将 BX 和 AL 中的值相加,把得 到的值作为地址,然后将此地址所得对应的存储器单元中的数值读送到 AL 中去该指令 是通过查表方式来完成翻译功能的因此,在执行该指令之前,必须在内存中建立好一张 翻译表,该表的最大容量为 256 个字节 输入输出指令 IN(input)/OUT(output) 输入指令格式:IN AL,端口地址[N] ;IN AX,端口地址[N+1][N];IN AL,DX;IN AX,DX; 说明:从 I/O 端口输入数据至 AL/AX,允许一个字节由一个输入端口传送到 AL 中,或者把 一个字由一个输入端口传送到 AX 中,若端口地址超过 256(00~FFH) ,则需用 DX 寄存器 来保存该端口地址,这样用 DX 作端口地址时,最多可寻址 64K(0000~FFFFH) 。
输出指令格式:OUT AL,端口地址[N] ;OUT AX,端口地址[N+1][N];OUT DX , AL;OUT DX, AX, 说明:将 AL 或 AX 的内容输出至 I/O 端口可将 AL 和 AX 中的内容传送到一个输出端口, 端口寻址方式与 IN 指令相同3.有效地址传送寄存器指令有效地址传送寄存器指令LEA(Load effective address) 有效地址送寄存 ,格式:LEA OPRD1 , OPRD 2把 源操作数的偏移地址传送到目的操作数LDS(Load DS with Pointer) 指针送寄存器和 DS格式:LDS OPRD1,OPRD2功能: 完成一个地址指针的传送地址指针包括偏移地址和段地址,它们已分别存放在 由源操作数给出最低地址的四个连续存储单元中(即存放了一个 32 位的双子数 据) ,指令可将该数据的高 16 位(段地址)送入到 DS,低 16 位(偏移地址) 送入目的操作数所指出的一个 16 位通用寄存器或者是变址寄存器LES(Load ES with Pointer) 指针送寄存器和 ES。
格式:LES OPRD1, OPRD2 功 能:这条指令除将地址指针的段地址送入 ES 外,与 LDS 类似4.标志寄存器传送。