《计算机微机原理指令》由会员分享,可在线阅读,更多相关《计算机微机原理指令(159页珍藏版)》请在金锄头文库上搜索。
1、1本章内容3.1 基本数据类型 3.2 8086的指令格式 3.3 8086指令的操作数寻址方式 3.4 8086的通用指令总结23.1 基本数据类型字节 字 双字 四字 双四字注意基本数据类型在内存中的字节顺序33.1.1字、双字、四字和双四字的对齐当数据对齐时,对字来说,地址要被2整除,对双 字、四字和双四字来说,地址要被4、8和16整除。应该将数据的地址对齐,以取得较高的存取速度80X86处理器能够访问任何有效地址的数据 类型,而不需要对齐数据。但对于不对齐不对齐地 址的数据,处理器访问时,需要额外的访问需要额外的访问 存储器时间。存储器时间。43.1.2 数字数据类型(1)无符号整数范
2、围从0到2n 1,其中,n为整数的位数。(2)符号整数用补码表示,范围从-2n-1到2n-1 1-1。其中,n为整数 的位数。53.2 8086的指令格式标号: 助记符 参数1, 参数2 ;注释 各部分之间至少用 一个空格作为间隔带方括号部分表示任选项助记符:说明计算机要执行哪种操作,用英文单词的缩 写表示。 参数:指令执行的参与者,即各种操作的对象。参数1是目的操作数,参数2是源操作数BACK 63.3 8086指令的操作数寻址方式寻找操作数存放地址的方式称为寻址方式。注意操作数的表达方法,为展开8086指令系统 做好准备7操作数存放位置指令中寄存器存储器I/O端口8传送指令MOV(move
3、)的格式MOV dest,src;destsrc MOV指令的功能是将源操作数src传送至目的操 作数dest,例如: MOV AL,05H;AL05H MOV BX,AX;BXAX MOV AX,SI;AXDS:SI MOV AX,BP+06H;AXSS:BP+06H MOV AX,BX+SI;AXDS:BX+SI91、立即数寻址方式操作数直接存放在指令中操作数直接存放在指令中。操作数称为立。操作数称为立 即操作数。即操作数。MOV CL, 5MOV AX, 3100H10立即寻址注意问题* 只能用于源操作数字段112、寄存器寻址方式 操作数存放在寄存器中,指令指定寄存器号。对 16位操作数
4、,寄存器可以是AX、BX、CX、DX 、SI、DI、SP、BP、DS、CS、ES、SS等。对8 位操作数,寄存器可以是AL、AH、BL、BH、 CL、CH、DL和DH等。如:MOV AX,BX123、直接寻址方式有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越 前缀改变MOV AX,2000H;AXDS:2000HMOV AX,ES:2000H;AXES:2000H 表示其中 为偏移地址段超越前缀即偏移地址直接寻址直接寻址13AX (AccumulatorAccumulator) 累加器 BX (BaseBase) 基址寄存器 CX (CountCount) 计数寄存器 DX
5、(DataData) 数据寄存器 SI (Source IndexSource Index)是源变址寄存器 DI (Destination IndexDestination Index)是目的变址寄存器 SP (Stack PointerStack Pointer)为堆栈指针寄存器 BP (Base PointerBase Pointer)为基址指针寄存器通用寄存器的名称与符号数据寄存器指 针 寄 存 器144、寄存器间接寻址方式操作数存放在存储器中,而操作数的地址的16 位偏移量可在BX、BP或SI、DI寄存器中。1、选择BX、SI、DI作为间址寄存器,则 操作数在数据段中,所以用DS寄存器
6、的内容作为段地址。操作数的物理地址为:物理地址=(DS)左移4位+(BX) (SI) (DI)例 1 MOV AX, BX寄存器间接寻址15寄存器间接寻址(续)2、选择BP作为间址寄存器,则操作数在堆栈段中 ,所以用SS寄存器的内容作为段地址。操作数的 物理地址为:物理地址=(SS)左移4位 +(BP)例2 MOV AX,BP 说明:指令中也可指定段超越前缀来取得其他段中的 数据。如:16MOV AX,ES:BX 源操作数的物理地址为:(ES)左移4位 +(BX)MOV AX,DS:BP 源操作数的物理地址为:(DS)左移4位 +(BP)17以下情况不能段超越程序的指令序列必须安排在代码段 程
7、序使用的堆栈一定在堆栈段 串操作的目的区必须是附加段185、寄存器相对寻址方式有效地址是寄存器内容与有符号8位或16位位移 量(补码表示)之和,寄存器可以是BX、BP或 SI、DI有效地址BX/BP/SI/DI8/16位位移量 段地址对应BX/SI/DI寄存器默认是DS,对应BP 寄存器默认是SS;可用段超越前缀改变19寄存器相对寻址指令MOV AX,SI+06H;AXDS:SI+06H MOV AX,BP+06H;AXSS:BP+06H寄存器相对寻址206、基址加变址寻址方式有效地址由基址寄存器(BX或BP)的内容加上变址 寄存器(SI或DI)的内容构成:有效地址BX/BPSI/DI段地址对
8、应BX基址寄存器默认是DS,对应BP基址寄 存器默认是SS;可用段超越前缀改变注意:必须一个是基址寄存器,另一个是变 址寄存器,不能两个都是基址寄存器,也不能 两个都是变址寄存器21基址加变址寻址指令MOV AX,BX+SI;AXDS:BX+SIMOV AX,BP+DI ;AXSS:BP+DIMOV AX,DS:BP+DI ;AXDS:BP+DI基址加变址寻址227、相对基址变址寻址方式有效地址是基址寄存器(BX/BP)、变址寄 存器(SI/DI)与一个8位或16位位移量之和 :有效地址BX/BPSI/DI8/16位位移量段地址对应BX基址寄存器默认是DS,对应 BP基址寄存器默认是SS;可用
9、段超越前缀改 变注意:必须一个是基址寄存器,另一个是变 址寄存器,不能两个都是基址寄存器,也不能 两个都是变址寄存器23相对基址变址寻址指令MOV AX,BX+DI+06H; AXDS:BX+DI+06H相对基址加变址寻址24多种表达形式同一寻址方式可以写成不同的形式: MOV AX,BXSI ;等同于 MOV AX,BX+SI MOV AX,COUNTSI ;等同于 MOV AX,SI+COUNT MOV AX,WNUMBXSI ;等同于 MOV AX,WNUMBX+SI ;等同于 MOV AX,BX+SI+WNUM注意:位移量写在的左边25寻址方式总结(1)7种寻址方式归纳为3大类:立即方
10、式:立即数寄存器方式:寄存器操作数l 存储器方式(直接寻址、寄存器间接寻址、 寄存器相对寻址、基址加变址寻址、相对基 址加变址寻址):存储器操作数26寻址方式总结(2) 对于存储器方式,有效地址可以由以下三种成分组成 : 位移量(Displacement)是存放在指令中的一个8 位或16位数,但它不是立即数,而是一个地址。 基址(Base)是存放在基址寄存器(BX或BP)中 的内容。 变址(Index)是存放在变址寄存器(SI或DI)中 的内容。 有效地址的计算可用下式表示:EA = 基址 + 变址 + 位移量 它们任意组合使用,可得到不同的寻址方式。27寻址方式总结(3)没有指明时,一般的数
11、据访问在DS段;使用 BP访问主存,则在SS段默认的情况允许改变,需要使用段超越前缀指 令;8086指令系统中有4个: CS:;代码段超越,使用代码段的数据 SS: ;堆栈段超越,使用堆栈段的数据 DS: ;数据段超越,使用数据段的数据 ES: ;附加段超越,使用附加段的数据BACK 283.4 8086的通用指令16位8086指令系统是Intel 80x86系列微 处理器指令系统的基础29学习指令的注意事项指令的功能该指令能够实现何种操作。通常指 令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式该指令中的操作数可以采 用何种寻址方式指令对标志的影响该指令执行后是否对各个标 志位有
12、影响,以及如何影响(参见P425)其他方面该指令其他需要特别注意的地方,如 指令执行时的约定设置、必须预置的参数、隐含 使用的寄存器等30指令遵循的规则两个操作数的类型要一致两个操作数不能都是存储器只有MOV、PUSH、POP指令允许以段寄 存器作为操作数目的操作数不能是立即数和CS单操作数指令中的操作数不能是立即数313.4.1数据传送指令数据传送是计算机中最基本、最重要 的一种操作传送指令把数据从一个位置传送到另 一个位置只有这种通用传送指令(除了XCHG 以外),才是惟一的允许以段寄存器 作为操作数的指令。321、MOV(MOVE)指令执行操作:(OPRD1)(OPRD2)格式:MOV
13、OPRD1,OPRD2目的源此指令不影响标志位33MOV指令举例mov al,4 ;al4,字节传送 mov ax,bx;axbx,字传送 mov dx,bp;dxss:bp342、交换指令XCHG(exchange)XCHG OPRD1,OPRD2执行操作: OPRD1 OPRD2数据传送指令不影响标志位35XCHG指令数据交换方向寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据不能在存储器与存储器之间对换数据段寄存器不能作为操作数段寄存器不能作为操作数通用寄存器 AX,BX,CX,DX BP,SP,DI,SI存储器数据交换方向如下:也可以是8 位寄存器3
14、6xchg ax,bx xchg ah,al xchg ax,2000h xchg al,2000hXCHG指令举例XCHG AX, DL XCHG BX, 0100H这些都是错误指令!373、堆栈操作指令 堆栈是以“后进先出”方式工作的一个存储区(内存区), 堆栈操作必须在堆栈段中进行,其段地址由堆栈段寄存 器SS确定。 它的一端固定,另一端浮动,固定的一端叫栈底,浮 动的一端叫栈顶。 堆栈只有一个出入口,即当前栈顶;用堆栈指针寄存 器SP指定,SP的内容是栈顶的偏移地址。 进栈指令和出栈指令都必须根据当前SP的内容来确定 进栈或出栈的单元,而且必须及时修改SP的值,使SP 的内容指向当前的
15、栈顶。 栈顶是地址较小的一端38堆栈操作指令堆栈只有两种基本操作:进栈和出栈 ,对应两条指令PUSH和POP堆栈操作的单位是字字指令不影响标志位39入栈指令PUSH (Push word onto the stack)执行操作:(SP) (OPRD的高字节)(SP)(SP)-1(SP)-1(SP) (OPRD的低字节)(SP) 指令执行后,(SP)=(SP)-2 说明: OPRD可以使用除立即数以外的任何一种寻址 方式.这是错误指令PUSH 1234HPUSH r16/m16/segpush ax push 2000h40出栈指令POP(Pop word from the stack)执行操作:(OPRD的低字节)(SP) (SP)(SP)+1 (OPRD的高字节)(SP) (SP)(SP)+1注意: POP指令不允许使用立即数和CS 寄存器POP 1234HPOP CS这些都是错误指令POP r16/m16/segpop ax pop 2000h41PUSH指令举例 例 PUSH