1 / 153

微机原理 第 04 讲

微机原理 第 04 讲. 课 题 8086 的寻址方式( 1 ) 目的任务 ● 理解寻址方式的含义及实质 重点难点 ● 各种寻址方式的区别. 第四章 INTEL 8086/8088 指令系统 4.1 指令格式及寻址方式 4.1.1 8086/8088 的通用指令格式 一条指令的一般格式为: 操作码字段 + 操作数字段。 操作码字段 :指明计算机所要执行的操作(即功 能); 操作数字段 :指出在指令执行过程中所需要的操 作数。. 对有操作数的指令,在执行指令所规定 的操作之前首先要寻找操作数。操作数可放

uta-jarvis
Download Presentation

微机原理 第 04 讲

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 微机原理 第04讲 • 课 题 • 8086的寻址方式(1) • 目的任务 • ●理解寻址方式的含义及实质 • 重点难点 • ●各种寻址方式的区别 德 能 日 新

  2. 第四章 INTEL 8086/8088指令系统 • 4.1指令格式及寻址方式 • 4.1.1 8086/8088的通用指令格式 • 一条指令的一般格式为: • 操作码字段 + 操作数字段。 • 操作码字段:指明计算机所要执行的操作(即功 • 能); • 操作数字段:指出在指令执行过程中所需要的操 • 作数。 德 能 日 新

  3. 对有操作数的指令,在执行指令所规定 • 的操作之前首先要寻找操作数。操作数可放 • 在CPU寄存器中,或内存单元中,或I/O端 • 口内,寻找这些操作数的方式称为寻址方 • 式,即指令中用于说明操作数或操作数所在 • 地址的方法。 德 能 日 新

  4. 4.1.2立即寻址(立即数) • 特点:操作数直接存放在指令中,作为指令 • 的一部分存放在代码段里,这种操作数称为 • 立即寻址。操作数可以是各种数制下的数。 • 一般常用于给寄存器或存储单元赋初值 • (即初始化),立即数只能用于源操作数字 • 段,不能用于目的操作数字段 。立即数可是 • 二进制、十进制、十六进制。 (例1) 德 能 日 新

  5. 4.1.3寄存器寻址 • 特点:操作数在某寄存器中,存取这类操作 • 数在CPU内部进行,所以执行速度快。 • 存放16位操作数的寄存器有:AX, • BX,CX,DX,BP,SP,SI,DI; • 存放8位操作数的寄存器有: AH,AL, • BH,CH,CL,DH,DL。 • CS、DS、SS、ES---------16位的段寄存器 • (例2) 德 能 日 新

  6. 注意:指令指针IP和标志寄存器PSW以及 • 所有标志位的代号CF、ZF、OF等都不能作 • 为寄存器寻址方式的操作数,不允许出现在 • 汇编语言的任何指令中。另外,8088汇编 • 语言还规定,不允许用MOV等具有赋值功 • 能的指令修改CS的值,在8088汇编语言中 • MOV CS, AX不符合语法规则。 德 能 日 新

  7. 4.1.4存储器操作数寻址 • 内存型寻址方式是指参与操作的数据 • 在内存中,因此必须指明操作数究竟在内存 • 的什么地方,即指出内存的逻辑地址。存储 • 器是分段管理的,要找到操作数,必须指明 • 操作数所在的段(段基址由段寄存器指明) • 及段内偏移地址(以有效地址EA的形成方 • 式指出)。 德 能 日 新

  8. 1.直接寻址方式 • 特点:指令中指接给出操作数在段内的偏移 • 量,段基址隐含给出或用段前缀指明。该寻址 • 方式适用于处理单个变量。 • 一般操作数存放在数据段,故操作数的物 • 理地址为: • 物理地址=(DS)× 16 + EA • =(段基址的寄存器)× 16 + 偏移地址 • (例3) 德 能 日 新

  9. 说明: • ※偏移地址(EA)在指令中直接给出。指 • 令中缺省段寄存器说明,段基址在DS段寄存 • 器中;否则在指令中需对段寄存器加以说明。 • 例如:MOV AX,ES:[2300H] • ※可用符号地址代替数值地址,例如: • MOV AX,VALUE ;此时,VALUE 为存放 • 操作数单元的符号地址,即变量名,也可写 • 成:MOV AX,[VALUE];两者等价。 德 能 日 新

  10. 2.寄存器间接寻址 • 特点:操作数有效地址在基址寄存器BP、DI • 中,而操作数则在存储器中。它适用于表格 • 处理,执行完一条指令后,只需修改寄存器 • 内容就可取出表格中的下一项元素。 • a.令中的有效地址(EA)存放在BX,SI,DI • 寄存器中,则操作数在数据段中,即操作数 • 的物理地址为: (BX) • 物理地址=16D×(DS)+ (SI) • (DI) 德 能 日 新

  11. b.若有效地址存放在BP寄存器,则操作数在堆栈段b.若有效地址存放在BP寄存器,则操作数在堆栈段 中,即操作数物理地址为: • 物理地址=(SS)16+(BP) • c.可使用段跨越前缀来取得其他段中的数 • 据,如:MOV AX,ES:[BX] • (例4) • 注意:MOV AX,BX; (AX)← (BX)与前 • 面的 MOV AX,[BX]含义不同。 德 能 日 新

  12. 3.寄存器相对寻址 • 特点:操作数的有效地址是一个基址寄存器或 • 变址寄存器的内容和指令中指定的8位或16位位 • 移量(即偏移量)之和。适用于表格处理,修 • 改基址或变址寄存器的内容来取得表格中的元 • 素。 德 能 日 新

  13. 一般形式: • (BX) • 物理地址=16D×(DS)+(SI)+8/16位位移量 • (DI) • 物理地址=16D×(SS)+(BP)+8/16位位移量 • (例5) 德 能 日 新

  14. 4.1.5 I/O端口寻址 • 1.直接端口寻址方式 • 特点:I/O端口地址以8位立即数方式在指令中直接 • 给出. • 例如: IN AL,PORT; • PORT为寻址端口编号,只能在0~255范围之内。 德 能 日 新

  15. 2.间接端口寻址方式 • I/O地址超过8位时,应放在DX寄存器中,即 • 通过DX间接寻址,所能寻址的端口编号为0~ • 65535。如 OUT DX,AL,表示将AL的内容输 • 出到由(DX)指出的端口中去。 • 在16位PC机中,仅用A9~A0 十条地址线表 • 示I/O端口,所以DX间接寻址的范围为0~ • 1023(即0~3FFH)。 德 能 日 新

  16. 4.2 8086/8088的指令系统 • 目前许多计算机的指令系统包含了几百条指令,十几种寻址方式,这对丰富汇编语言程序设计,提高高级语言的执行效率是有利的。我们称这些计算机为“复杂指令系统计算机:,简称CISC(Complex Instruction Set Computer)。 德 能 日 新

  17. 基本指令集是80X86微机不断发展的指令集的一个基本子集,包括8086/8088指令系统的全部指令。IBM PC/XT微型计算机的微处理器采用的是8088芯片,本节将介绍8088/8086微处理器的指令系统。指令系统是指处理器所能完成的所有指令的集合。它是微处理器设计时就确定了的。所以,对于不同的微处理器,其指令系统中所包含的具体指令是各不相同的。由于微处理器8088与8086的指令系统是完全一样的 ,所以,本节介绍的指令系统同样适用于8086CPU。 德 能 日 新

  18. 8086/8088CPU指令系统可以分成下列几类: • 数据传送指令; • 算术运算指令; • 逻辑运算和移位指令; • 转移和循环控制指令; • 调用和返回指令; • 字符串操作指令; • 处理器控制指令。 德 能 日 新

  19. 学习指令系统着重要掌握指令的基本操作功能,学习指令系统着重要掌握指令的基本操作功能, • 合法的寻址方式以及对标志位的影响。 • 为了便于了解指令的形式和功能,对指令中的操 • 作数符号的约定如下: • OPR:操作数; • DST:在多操作数指令中,表示目标操作数; • SRC:在多操作数指令中,表示源操作数; • SEG:段寄存器; • REG:通用寄存器; • MEM:8位或16位存储器; • DATA:8位或16位立即数。 德 能 日 新

  20. 4.2.1 数据传送指令 • 数据传送类指令是计算机中最基本、最常用、最重要的一类操作。这里讨论的数据传送指令仅指CPU中的寄存器与寄存器或者寄存器与存储器之间的数据传送。这类指令的基本格式及功能说明见表4.1。表中除了SAHF和POPF指令之外,标志位寄存器F的各位均不受影响。指令中出现两个操作数时,目的操作数在前,源操作数在后,并且目的操作数的寻址方式一定不能为立即数和段寄存器CS。 德 能 日 新

  21. 表4-1数据传送类指令的格式和功能 德 能 日 新

  22. 1.通用数据传送指令 • (1)MOV 指令 • 格式: MOV DST, SRC • 操作:(DST)←(SRC),即把源操作 • 数的内容送目的操作数。 • 其中DST代表目的操作数,SRC代表 • 源操作数。 德 能 日 新

  23. 说明: • *MOV 指令不允许两个存储器单元传送数据,即DST • 和SRC 不能同时为存储器操作数,DST 目的操作数不 • 允许使用立即寻址方式(目的操作数是数据送往的地 • 点)。 • *如果目的操作数是使用通用寄存器的寄存器寻址方 • 式,则源操作数可以是立即数、寄存器寻址或内存型 • 寻址方式中的任何一种。 • *MOV 指令也不允许在两个段寄存器之间传送数 • 据。(当目的操作数是段寄存器时,源操作数不能是 • 立即数,也不能是另一个段寄存器,只能是通用寄存器 • 或内存型寻址方式。) • *CS不能做目标操作数。 德 能 日 新

  24. *如果两个操作数都有确定的类型,则两者的类型必*如果两个操作数都有确定的类型,则两者的类型必 • 须相同,即要么都是8位的字节型,要么都是16位的字 • 型。 • *如果两个操作数中只有一个可以确定类型,则另一 • 个操作数的类型按可确定类型的一个操作数同型处 • 理;当一个操作数是寄存器,另一操作数是变量,且 • 两者类型不同时,变量可以临时改变类型,保持与寄 • 存器类型一致。 • *如果目的操作数是寄存器间接寻址或者基址变址寻 • 址方式,源操作数是不超过255的立即数,这时两个操 • 作数的类型都不能确定,需要在目的操作数的前面用 • BYTE PTR或者WORD PTR指明操作是字节型还是字 • 型。 • *对标志位无影响。 德 能 日 新

  25. 下面的各个例子从汇编语言的语法上讲都是 • 正确的,其中buf是已定义的字节型变量。 • MOV AL,BL MOV AL,’3’ • MOV BX,[BX] MOV DX,3 • MOV CL,[buf+BP] MOV CX,[buf+BP] • MOV AX,WORD PTR [buf] MOV DS,AX • MOV BYTE PTR [BX],3 MOV [buf],3 • MOV WORD RTR [SI],3 MOV DS,[BX][DI] 德 能 日 新

  26. 下面的指令是不符合语法规则的: • MOV AL,BX • MOV [BX],[buf] • MOV 3,AL • MOV AX,[DX] • MOV AX,[BL] • MOV DS,CS • MOV CS,DX • MOV AX,IP • MOV BX,WORD PTR AL 德 能 日 新

  27. (2)交换命令 • 格式:XCHG OPR1,OPR2 • 操作:OPR1←→OPR2,即将操作数(OPR1)与 • 操作数(OPR2)进行交换。 • 说明:该指令在使用过程需要注意的几点与MOV指 • 令说明相同。一条交换指令完成的功能相当与三条 • MOV 指令完成的功能。 • MOV CX,AX • XGHG AX,BX;相当于 MOV AX,BX • MOV BX,CX 德 能 日 新

  28. (3)压入堆栈指令 • 格式:PUSH SRC • 操作:(SP)←(SP)-2,((SP)+1), • (SP)←SRC,即SP指针先减2,后按字入 • 栈。注意:堆栈的存取必须以字为单位。堆栈是 • 按“后进先出”的方式工作的一个存储区,只有一 • 个出入口,用一个堆栈指针寄存器SP来指示进 • 出栈操作。SP的工作内容在任何时候都指向当 • 前的栈顶,源操作数SRC除了立即寻址之外的其 • 他存储器操作数寻址方式均可使用。 德 能 日 新

  29. (4)出栈指令 • 格式:POP DST • 操作:(DST)←((SP)+1,(SP)),(SP)←(SP)+2 • 即先出栈,后指针加2,按字取出。目标操作 • 数DST的寻址方式为立即寻址方式之外的所有存 • 储器操作数寻址方式和寄存器寻址方式。 德 能 日 新

  30. (5)有效地址送寄存器指令 • 该指令把存储器操作数的有效地址送到指定的 • 寄存器中。 • 格式: LEA REG,SRC • 操作:(REG)←SRC,即把源操作数(SRC应是 • 存储器操作数)的有效地址送到指定的寄存器中 • (REG)。 • 例1:LEA DX,[BX+SI+0B62H] • 执行前:(BX)=3000H,(SI)=0050H • 执行后:(DX)=3000H+0050H+0B62H=3BA2H(有效地址或偏移地址) • 注意:这里DX 寄存器得到的是偏移地址而不是该存储单元的内容。 德 能 日 新

  31. 例2:(SI)=0500H,(BX)=1000H, • (DS)=2000H • DS:0500H单元存放3412H • DS:1000H单元存放00AAH • MOV AX,[SI];(AX)← [SI],(AX)=1234H • LEA AX,[SI]; (AX)← EA, (AX)=0500H • MOV DI,[BX]; (DI)← [BX],(DI)=AA00H • LEA DI,[BX]; (DI)← [BX],[DI]=1000H 德 能 日 新

  32. (6)指针送寄存器和DS指令 • 格式:LDS REG,SRC • 操作:(REG) (SRC),(DS)← (SRC+2),即把源操作数指定的4 个相继字节的内容作为一 • 个地址指针送到由指令指定的寄存器和DS寄存器。 • REG为16位寄存器名。 • 例3:(DS)=9000H,(90012H)=0150H, (90014H)=4000H • 执行:LDS SI,[12H] • 源操作数物理地址=9000H×16d+0012H=90012H, • 即将90012H开始的4个单元内容送到SI 和DS中。 • 执行后:(SI)=0105H,(DS)=4000H, 德 能 日 新

  33. (7)指针送寄存器和ES指令 • 格式:LES REG,SRC • 操作: (REG)← (SRC) • (ES)← (SRC+2) • 把源操作数指定的4个相继字节的内容 • 作为一个地址指针送到由指令指定的寄存器 • REG和ES 中。 德 能 日 新

  34. (8)累加器专用传送指令 • 1>输入指令 • 格式I: IN AL ,PORT ;字节输入 • IN AX ,PORT ;字输入 • 操作:(AL)←(PORT), • (AX)←(PORT),从外设读入数据。 • 格式 II: IN AL, DX ;字节输入 • IN AX, DX ;字输入 • 操作:(AL)←[(DX)](字节), • (AX)←[(DX)+1,(DX)](字) 德 能 日 新

  35. 2>输出指令 • 格式I: OUT PORT ,AL ;字节输出 • OUT PORT ,AX ;字输出 • 操作:[PORT] ←(AL)(字节), • [PORT+1,PORT] ←(AX)(字), • 将数据传送给外设。 德 能 日 新

  36. 格式II:OUT DX ,AL ;字节输出 • OUT DX ,AX ;字输出 • 操作:[(DX)] ←(AL)(字节),[(DX)+1,(DX)] ←(AX)(字) • IN/OUT 指令有二种格式,选择哪一种,取决于外部设备端口地址的宽度。格式I指令有二个字节,称长格式,格式II只有一个字节,称短格式。 德 能 日 新

  37. 3>XLAT 换码指令 • 格式:XLAT OPR 或 XLAT • 操作:(AL)←[(BX)+(AL)],将AL中的当前内容转换为某一种代码。 • 在使用这条指令前,先建立一个字节表格,OPR为表格首地址,应存入BX寄存器中,待转换的代码应放在AL寄存器,该代码是相对于表格首地址的位移量,再根据(BX)+(AL)所求得的地址读取所要的代码,并存入AL 中。该指令常用于查表,根据元素在表格中的位置查表求元素的值。 德 能 日 新

  38. 2.标志传送指令 • (1)LAHF指令 • 格式:LAHF • 操作:(AH)←(PSW的低字节),即标志寄存 • 器(PSW)的低字节传送到AH寄存器中。 • (2)SAHF指令 • 格式:SAHF • 操作:(PSW的低字节)←(AH),即将AH 寄 • 存器的内容传送到标志寄存器的低字中。 • 该指令影响状态标志SF、ZF、AF、PF和CF 。 德 能 日 新

  39. (3)PUSHF指令 • 格式:PUSHF • 操作:(SP)←(SP)-2, • [(SP)+1,(SP)]←(PSW),标志寄存器的 • 内容入栈。 • (4)POPF指令 • 格式:POPF • 操作:(PSW)←[(SP)+1,(SP)], • (SP)←(SP)+2,标志寄存器的内容出栈。该 • 指令影响标志寄存器的所有标志位。数据传送指令 • 除了SAHF 和POPF 两条外,执行结果都不影响标 • 志位。 德 能 日 新

  40. 4.2.2算术运算类指令 寄存器 通用寄存器 通用寄存器 立即数 立即数 存储器 通用寄存器 ± ± ± ± ± 通用寄存器 存储器 • 算术运算指令大多数为双操作数指令,其中加 ,减运算操作的操作数如图4-1所示。 图4-1 加减运算的操作数 德 能 日 新

  41. 1.加法指令 • (1)ADD 加法指令 • 格式: ADD DST, SRC • 操作: (DST)←(DST)+(SRC),完成两个操作数相加,结果传送到目的操作数中。加法运算不改变源操作数的值。 德 能 日 新

  42. 在汇编语言中,涉及到有关寄存器中或内 • 存中存放的数据的计算时,不能像高级语言那 • 样写一个简明的表达式就可以了,也没有任何 • 内部函数,而必须一步步写出计算的过程,这 • 是汇编语言程序篇幅很长的一个原因。 德 能 日 新

  43. 说明: • *ADD 不允许两个存储器单元内容相加,即 • DST和SRC 不能同时为存储器操作数,DST • 目的操作数不允许使用立即寻址方式。 • *ADD指令也不允许在两个段寄存器之间相 • 加。 • *ADD指令本身并不区分相加的两个数是无 • 符号数还是有符号数,因为相加的结果在存 • 储形式上是一样的。 • *对标志位有影响,主要是CF、 ZF 、OF 、 • SF 标志位。 德 能 日 新

  44. 例1:设AX=3AF7H,试确定指令ADD AL,AH执行 • 后AX的值。 • 0F7H+3AH=31H(有进位) • 执行后,AX=3A31H. • ADD指令把两个字节型或字型数据相加,如 • 果最高位向外有进位,在计算加法的结果时会被 • 忽略,但进位情况会在标志位上反映出来;另一 • 方面,AH作为源操作数,其值没有改变,所以指 • 令执行后AX的值是3A31H. 德 能 日 新

  45. (2)ADC带进位加法指令 • 格式:ADC DST,SRC • 操作:(DST)←(DST)+(SRC)+(CF), • 即完成两个操作数及进位(CF)三者相加,结果 • 传送到目的操作数中。 • 说明:与ADD 指令说明相同。 德 能 日 新

  46. 例2:(DX)=0002H,(AX)=0E365H, (BX)=0003H,(CX)=0D024H • ADD AX,CX • ADC DX,BX • 第一条指令执行后(AX)=0B389H,SF=1,ZF=0,CF=1,OF=0 • 第二条指令执行后 (DX)=0006H,SH=0,ZF=0,CF=0,OF=0 德 能 日 新

  47. (3)INC 加1指令 • 格式:INC DST • 操作:(DST)←(DST)+1,即操作数加1。 • 说明:DST单操作数不允许使用立即寻址方 • 式。除了CF标志位之外,对其他标志位均有影 • 响。 德 能 日 新

  48. 2.减法运算指令 • (1)SUB 减法 • 格式:SUB DST ,SRC • 操作:(DST)←(DST)-(SRC),目的操 • 作数与源操作数相减,差传达到目的操作数中。 德 能 日 新

  49. 说明: • SUB指令不允许两个存储器单元内容相减, • 即DST和SRC不能同时为存储器操作数,DST目 • 的操作数不允许使用立即寻址方式。 • SUB指令也不允许在两个段寄存器之间相 • 减。对标志位有影响,主要是CF、ZF、OF、 • SF标志位。 德 能 日 新

  50. 例3:设AX=3AF7H,试确定指令SUB AH,AL • 执行后AX的值。 • 3AH-0F7H=43H • 运算中有借位,执行后,AX=43F7H。如 • 果把操作数当无符号数,相当于58-47=67。 • 这个结果显然与正确值是有偏差的,产生这 • 一现象的原因是,作为无符号数58减247本就 • 不够减,这一现象会在标志位上有所反映。 • 如果把操作数当成有符号数,相当于 • (+58)-(-9)=(+67)。 德 能 日 新

More Related