1 / 159

微型计算机原理

及接口技术. 微型计算机原理. 授课教师: 周茂霞. 第 3 章. 微型计算机指令系统. 教学重点. 重点掌握常用指令 功能 及 应用 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移指令 中断指令 处理器控制指令. 计算机的指令系统就是指该计算机能够执行的全部指令的集合 每种计算机都有它支持的指令集合 16 位 8086 指令系统是 Intel 80x86 系列微处理器指令系统的基础. 什么是指令系统. Intel 8086 指令系统共有 117 条基本指令 ,可分成 6 个功能组 . ① 数据传送类指令

efuru
Télécharger la présentation

微型计算机原理

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. 及接口技术 微型计算机原理 授课教师: 周茂霞

  2. 第 3章 微型计算机指令系统

  3. 教学重点 重点掌握常用指令功能及应用 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移指令 中断指令 处理器控制指令

  4. 计算机的指令系统就是指该计算机能够执行的全部指令的集合计算机的指令系统就是指该计算机能够执行的全部指令的集合 每种计算机都有它支持的指令集合 16位8086指令系统是Intel 80x86系列微处理器指令系统的基础 什么是指令系统

  5. Intel 8086指令系统共有117条基本指令,可分成6 个功能组. ① 数据传送类指令 ② 算术运算类指令 ③ 位操作类指令 ④ 串操作类指令 ⑤ 控制转移类指令 ⑥ 处理机控制类指令 8086指令系统概述 如何学习

  6. 指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式 指令支持的寻址方式——该指令中的操作数可以采用何种寻址方式 指令对标志的影响——该指令执行后是否对各个标志位有影响,以及如何影响 其他方面——该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等 学习指令的注意事项

  7. 教学提示 全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键 逐个展开指令

  8. 数据传送是计算机中最基本、最重要的一种操作数据传送是计算机中最基本、最重要的一种操作 传送指令也是最常使用的一类指令 传送指令把数据从一个位置传送到另一个位置 除标志寄存器传送指令外,均不影响标志位 3.3.1 数据传送类指令(Data Transfer)

  9. 提供方便灵活的通用传送操作指令 MOV PUSH POP XCHG XLAT 3.3.1 数据传送类指令(Data Transfer) 一、 通用传送指令

  10. 3.3.1 数据传送类指令(Data Transfer) 1. 基本传送指令MOV(movement) MOV 指令格式及操作: MOV DST ,SRC ;(DST) (SRC) DST——目的操作数可以是寄存器操作数或存储器操作数 SRC——源操作数可以是寄存器操作数或存储器操作数, 也可以是立即数。 功能:?

  11. 3.3.1 数据传送类指令(Data Transfer) 1. 基本传送指令MOV MOV 功能特点: (1)可进行8位或16位的数据操作 (2)适用于各种寻址方式 (3)源操作数与目的操作数类型必须一致 (4)立即数不能做为目的操作数,也不能直接送段寄存器。 (5)存储器之间不能直接传送 (6)CS不能作为目的操作数

  12. 例2.1:立即数传送 mov AX,0000H ;AX←0000H,字传送,AX,清零 mov AL,16H ;AL←16H,字节传送 mov [SI],16H ;[SI]←16H,字节传送,16H送由SI 寄存器寻址的内存单元。

  13. 例3.2:寄存器传送 mov AX,BX ;AX←BX,字传送 mov AH,AL ;AH←AL,字节传送 mov DS,AX ;DS←AX,字传送 mov [DX],AL ;[DX]←AL,字节传送 CS 不能做目的操作数,

  14. MOV 3.3.1 数据传送类指令(Data Transfer) 注意:不能用一条MOV指令实现以下传送 (1)存储单元之间不能直接传送: MOV MEM2,MEM1;(x) MOV AX,MEM1; MOV MEM2,AX;

  15. MOV 3.3.1 数据传送类指令(Data Transfer) 注意:不能用一条MOV指令实现以下传送 (2)立即数不能直接传送到段寄存器 MOV DS,1234H;(x) MOV AX,1234H; MOV DS,AX;

  16. MOV 3.3.1 数据传送类指令(Data Transfer) 注意:不能用一条MOV指令实现以下传送 (3)段寄存器之间不能直接传送 MOV ES,DS;(x) MOV AX,DS; MOV ES,AX;

  17. MOV [例3.1]已知变量BUFFER1对应的偏移地址为1000H, BUFFER2对应的偏移地址为2000H,DS=2500H。 编写程序将BUFFER1存放的16位数据传送到BUFFER2单元。 ;源数据快首地址送SI MOV SI,OFFSET BUFFER1 MOV DI,OFFSET BUFFER2 MOV AL,[SI] MOV [DI],AL MOV AL,[SI+1] MOV [DI+1],AL; HLT ;目标数据快首地址送DI ;源数据快第一个字节送AL ;AL内容送目标首地址 ;下一个字节数据传送

  18. MOV 3.3.1 数据传送类指令(Data Transfer) [例3.1]已知变量BUFFER1对应的偏移地址为1000H, BUFFER2对应的偏移地址为2000H,DS=2500H。 编写程序将BUFFER1存放的16位数据传送到BUFFER2单元。 MOV SI,OFFSET BUFFER1;源数据快首地址送SI MOV DI,OFFSET BUFFER2;目标数据快首地址送DI MOV AX,[SI];源数据字送AX MOV [DI],AX;AX内容送目标首地址 HLT p128

  19. MOV 3.3.1 数据传送类指令(Data Transfer) [例3.1]已知变量BUFFER1对应的偏移地址为1000H, BUFFER2对应的偏移地址为2000H,DS=2500H。 编写程序将BUFFER1存放的16位数据传送到BUFFER2单元。 MOV AX,BUFFER1;源数据字送AX MOV BUFFER2,AX;AX内容送目标首地址 HLT p128

  20. 3.3.1 数据传送类指令(Data Transfer) 2. 堆栈操作指令 PUSH POP (1)堆栈的概念 堆栈区是内存的堆栈段,该段起始地址的高16位放在SS中。堆栈区也是数据区,它是内存开辟的特殊区域,用以存放寄存器或存储器暂时不用的数据。堆栈是按照“后进先出”原则组织起来的特殊区域,进行特殊的操作,存放一些特殊信息。堆栈在内存所处的区域为堆栈段,其地址由堆栈寄存器SS指明,偏移地址由SP的内容决定,该指针总是指向堆栈区顶端,即栈顶。与逻辑段一样,可以在1MB的存储空间浮动,一个堆栈段的深度为64KB。

  21. main sub1 sub2 sub3 B C A 3.3.1 数据传送类指令(Data Transfer) 引入堆栈:以三层子程序嵌套为例,逐级进入子程序时,A、B、C三点都有断点和现场需要保护,顺序为A→B→C;当子程序sub3执行结束,逐级返回时, 最后被保护的C点数据应最先恢复,最先保护的A点数据应最后恢复。为此,通常在内存中开辟一段区域,结合软硬件技术,使其具有保护数据和后进先出的功能。此为堆栈。

  22. 3.3.1 数据传送类指令(Data Transfer) 8086堆栈管理:8086使用段寄存器SS和指针寄存器SP管理堆栈,SS决定了堆栈区的首地址,SP的初始 值决定了堆栈区的末地址,堆 栈区的最大长度随之而定。数 据入栈时,SP做减量调整,SP 指示的单元称为“栈顶”,即栈 顶向下延伸;SP永远指向刚刚 入栈的数据。数据出栈时,SP 做增量调整,即栈顶向上延伸 SP永远指向将要出栈的数据。 高地址 SS:SP 数据入栈 堆栈区 入栈的数据全部出完,SP恢复初始值。 低地址 数据出栈 SS:0000H

  23. 3.3.1 数据传送类指令(Data Transfer) 8086对堆栈区的操作特点: (1)压栈指令PUSH(写入),出栈指令POP(取出),其操作都是16位的字操作。 (2)堆栈区存放数据时,从高位地址向低位地址方向增长。取数据相反。 (3) SS决定了堆栈区的首地址,SP的初始值决定了堆栈区的末地址。 (4)对堆栈区的操作先进后出。

  24. 3.3.1 数据传送类指令(Data Transfer) (2)堆栈操作命令 压入指令PUSH(PUSH word onto stack) 指令格式及操作 指令功能:首先调整堆栈指针,然后将16位的源操作数送入SP所指的存储单元中。 • PUSH SRC( r16/m16/seg);“r16/m16/seg”作为源操作数,不允许为立即数。 • 堆 栈中的存储单元作为目的操作数,指令操作如下: • ①SP←SP-2,SS:[SP]←src低8位 • ②SS:[SP+1]←src高8位

  25. 3.3.1 数据传送类指令(Data Transfer) 1. 堆栈操作指令 PUSH POP (2)堆栈操作命令 压入指令PUSH(PUSH word onto stack)

  26. 3.3.1 数据传送类指令(Data Transfer) (2)堆栈操作命令 弹出指令POP(POP word off stack) 指令功能:首先将栈顶两个字节16位数据取出,送目的操作数,然后在修改堆栈指针。 指令格式及操作 • POP DST( r16/m16/seg);“r16/m16/seg”作为目的操作数,段寄存器不允许为CS。 • 堆 栈中的存储单元作为目的操作数,指令操作如下: • ①(DST)L←(SP) • ② (DST)H←(SP+1) • ③ Sp SP+2

  27. 使用堆栈指令: ①堆栈操作是字操作指令,不要写出“PUSH AL”等。 ②在“POP”指令中,“POP CS”为非法指令。 ③堆栈中的数据弹出后,数据并没有在堆栈中消失, 除非压入新数据,画图时注意。 ④堆栈操作指令不影响标志。 3.3.1 数据传送类指令(Data Transfer)

  28. 3.3.1 数据传送类指令(Data Transfer) ①用PUSH命令存放数据时,总是以高地址开始,逐渐向低地址增长,而不像其它段从低地址开始行高地址存放数据。 ②堆栈操作按“先进后出”原则。 PUSH AX PUSH CX PUSH DX .. .. .. POP DX POP CX POP AX 堆栈的用途很多例如在调用子程序或发生中断时,用压栈的办法保护断点的地址,当子程序从返回时,可以取出断点地址,以便继续执行子程序,也可以保护有关寄存器的内容。

  29. XCHG DST SRC;(DST) (SRC) 3.3.1 数据传送类指令(Data Transfer) 3. 交换指令 XCHG 指令格式及操作 DST——寄存器或存储器操作数 SRC——寄存器或存储器操作数 指令功能:源操作数与目的操作数(字或字节)相互对换

  30. 3.3.1 数据传送类指令(Data Transfer) 注意交换数据时: ①通用寄存器与通用寄存器 ②通用寄存器与存储器 ③不能在两个存储单元之间 ④段寄存器内容不参加交换

  31. 3.3.1 数据传送类指令(Data Transfer) 3. 交换指令 XCHG 寄存器之间交换 xchg ax,bx;字交换ax=5678h,bx=1234h xchg ah,al ;字节交换ax=7856h

  32. 3.3.1 数据传送类指令(Data Transfer) 寄存器与存储器之间交换 xchg ax,[2000h];字交换; 等同于xchg [2000h],ax xchg al,[2000h] ;字节交换; 等同于xchg [2000h],al

  33. 3.3.1 数据传送类指令(Data Transfer) 二、 累加器专用传送指令 1、输入/输出指令(IN /OUT) 输入指令IN用于从外设端口读数据放累加器AX(字)或AL(字节); 输出指令OUT用于把累加器AX或AL的数据发送到外设端口。 从CPU看无论是从端口接收数据还是向端口发送数据都必须经过AX或AL。所以这是累加器的专用指令。

  34. 3.3.1 数据传送类指令(Data Transfer) • 输入/输出指令(IN /OUT)可以分为两类: • 直接输入/输出指令 • 间接输入/输出指令 • 在此处用符号PORT表示I/O接口的端口地址。 • CPU使用地址总线的低16位A15—A0,对外设端口编号。 • 0000H——00FFH ,也可以用00H——FFH,8位表示

  35. 3.3.1 数据传送类指令(Data Transfer) • (1)直接寻址: • I/O接口地址在0000H——00FFH 范围,输入和输出指令可采用直接寻址方式。端口地址也可以写成00H——FFH,8位表示。 • 指令格式与操作: • 输入指令: • IN AL, PORT;AL (PORT)(端口地址位8位) • IN AX, PORT;AX (PORT)(16位的数据输入指令,PORT • 的内容送AL,端口地址PORT+1的内容送AH。) 指令功能:该指令从端口读入一个字节或字的数据到累加器。

  36. 3.3.1 数据传送类指令(Data Transfer) • 输出指令: • OUT PORT,AL;(PORT)AL • OUT PORT, AX ;(PORT)AX (16位的数据输出指令, • ;AL的内容送PORT,的AH内容送端口地址PORT+1中 。) 指令功能:该指令将字节或字的数据输出到端口中。

  37. 3.3.1 数据传送类指令(Data Transfer) • 例子 • IN AL,80;将80端口的字节数据读入AL • IN AX 70H;将70H、71H端口的值读入到AX • OUT 66 H ,AL; 将AL 1个字节的内容输出到66H端口 • OUT 80H,AX;将AX 1个字的内容输出到80H、81H端口 注释:①“80、70H”从形式上来说是立即数,实际上是端口地 址,因而指令的寻址方式为直接寻址。 ②“MOV”指令中,直接寻址要加中括号,输入输出指令不加。 (MOV AL,[2000H];IN AL,25H)

  38. 3.3.1 数据传送类指令(Data Transfer) • (2)间接寻址: • 使用指令之前要求必须把16位端口的地址先送DX中。 • 指令格式与操作: • 输入指令: • IN AL, DX;AL (DX)(把DX的内容作为端口地址,输入该 ; • ;端口的数据到AL) • IN AX,DX;AX (DX)(16位的数据输入指令,把DX的内容 • ;作为端口地址,从DX、DX+1所指的两个端口读取1个字的数据,DX • ;所读的数据送AL, DX+1读的数据送AH。

  39. 3.3.1 数据传送类指令(Data Transfer) 使用输入/输出指令注意以下三点: (1)只能用累加器作为输入输出的寄存器,其他一律不可以。 (2)用直接寻址时,地址范围0—255(0—FFH)即最多可寻址256个端口对外设端口编号。I/O端口地址在0000H——00FFH ,可以用00H——FFH,8位表示。只有在此范围内的端口,可以使用直接寻址的输入/输出指令。 (3)用间接寻址的输入/输出指令,寻址范围0000H——FFFFH 即(0—65535)65536个端口。

  40. BX+0 XLAT ;AL (BX+AL) 25 16 BX AL 09 04 + 01 AL 00 BX+AL 3.3.1 数据传送类指令(Data Transfer) 2、换码指令XLAT • 换码指令执行前: 在主存建立一个字节量表格,内含要转换成的目的代码 表格首地址存放于BX,AL存放相对表格首地址的位移量 • 换码指令执行后:将AL寄存器的内容转换为目标代码

  41. 3.3.1 数据传送类指令(Data Transfer) 2、换码指令XLAT • 换码指令一般用来实现编码制间的转换,故又称查表转换指令,该指令非常方便的用于无规律代码的转换,如LED显示所用的十六进制数到七段码的转换。

  42. 25 • 16 • 09 • 04 • 01 • 00 3.3.1 数据传送类指令(Data Transfer) 查表示意图 查表步骤(求某数的平方) ①在内存中建立数据表格; ②将表格的首地址送入BX中; ③假定要求“3”的平方,将3送入 寄存器AL中; ④执行指令 XLAT; ⑤执行:AL←[BX+3](DS) 执行结束:AL= 9。 AL中的内容被“换码”! 表格首地址 ××××H

  43. 存储器 “0” “1” “2” “3”“4”“5”“6”“7”“8”“9” 3FH table 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 3.3.1 数据传送类指令(Data Transfer) 2、换码指令XLAT Data segment Table db 3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH Data ends : MOV BX,OFFSET TABLE IN AL,20H XLAT OUT 21H,AL HLT 例3.2数字0—9对应的LED七段码的转换是 3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH,并依次放在内存以table开始的区域。当20H端口输入1位10进制数码时,要求转换成LED七段码并送21H端口显示。

  44. 3.3.1 数据传送类指令(Data Transfer) 二、 地址传送传送指令 • 8086/8088CPU提供了3条专用的传送地址的指令,即把地址指针写入寄存器或寄存器对的指令。 • LEA、LDS、LES 1.取偏移地址指令LEA(load effective address) LEA DST,SRC; DST SRC所指单元的偏移地址 DST:16位通用寄存器 SRC:存储器操作数 LEA r16,mem 注意:指令中“r16”常用的寄存器是 BX、BP、SI、DI。 一般不使用其他寄存器。

  45. 3.3.1 数据传送类指令(Data Transfer) 例:设BX=0400H,SI=003CH LEA BP,[2050H];执行后 BP=2050H LEA BP,[SI];执行后 BP=003CH LEA BX,[BX+SI];执行后 BX=043CH LEA BX,BUFFER; 注释:指令中源操作数常用的是变量名,而不是上面例子中例举的形式,如:LEA BX,WORD_VAR。所以,本条指令常被描述为“取变量的偏移地址”,属常用指令

  46. 3.3.1 数据传送类指令(Data Transfer) • LEA 与 MOV 区别 LEA AX,BUFFER1; MOV AX,BUFFER1; MOV AX,OFFSET BUFFER1; OFFSET BUFFER1 ;表示取变量的偏移地址 AX=2312H取地址 AX=0080H取地址多对应单元的内容 设:变量BUFFER1在内存的地址为0080H, [0080H]=12H, [0080H+1]=23H

  47. LDS DST,SRC;DST SRC ;DS ( SRC+2) 3.3.1 数据传送类指令(Data Transfer) 2. LDS(load point using DS) DST:16位通用寄存器 SRC:各种寻址方式存储器操作数(双字长) 指令功能:将源操作数指明的存储器相继4个单元内容(即地址指针其中包括一个大地址,另一个为偏移地址)传送到指定的寄存器和段寄存器中,其中后两个字节放DS,前两个放到指定的寄存器。

  48. 3.3.1 数据传送类指令(Data Transfer)

  49. LES DST,SRC;DST SRC ;ES( SRC+2) 3.3.1 数据传送类指令(Data Transfer) 3. LES(load point using ES) DST:16位通用寄存器 SRC:各种寻址方式存储器操作数(双字长) 指令功能:将源操作数指明的存储器相继4个单元内容(即地址指针其中包括一个大地址,另一个为偏移地址)传送到指定的寄存器和段寄存器中,其中后两个字节放ES,前两个放到指定的寄存器。

More Related