1 / 74

微机原理

在此幻灯片插入公司的徽标 从“插入”菜单 选择图片 找到徽标文件 单击“确定” 重新设置徽标大小 单击徽标内任意位置。徽标外部出现的方框是“调整控点” 使用这些重新设置对象大小 如果在使用尺寸调整控点前按下 shift 键,则对象改变大小但维持原比例。. 微机原理. 制作者: 张幸. 第三章 8086寻址和指令系统. 8086指令系统具有灵活的指令格式、很强 的寻址能力、能处理多种数据类型 本章讨论8086寻址能力 ,指令系统. 第一节 8086寻址方式. 一、基本概念 二、指令寻址方式. 一、基本概念. 1. 指令 机器指令

agalia
Download Presentation

微机原理

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. 在此幻灯片插入公司的徽标 • 从“插入”菜单 • 选择图片 • 找到徽标文件 • 单击“确定” • 重新设置徽标大小 • 单击徽标内任意位置。徽标外部出现的方框是“调整控点” • 使用这些重新设置对象大小 • 如果在使用尺寸调整控点前按下 shift 键,则对象改变大小但维持原比例。 微机原理 制作者: 张幸

  2. 第三章 8086寻址和指令系统 8086指令系统具有灵活的指令格式、很强 的寻址能力、能处理多种数据类型 本章讨论8086寻址能力 ,指令系统

  3. 第一节 8086寻址方式 一、基本概念 二、指令寻址方式

  4. 一、基本概念 1.指令 • 机器指令 以二进制代码(机器码)表示指令 直接,不易读懂 • 汇编指令 以符号形式表示指令 易读,需要翻译(汇编)

  5. 2.指令成分 • 操作码:操作的性质 表示指令应完成的具体操作 以助记符的形式表示 • 操作数:操作的对象

  6. 3.指令操作数 • 双操作数 OPR DEST,SRC • 单操作数 OPR DEST • 无操作数 OPR(隐含操作数)

  7. 操作数就在指令中 操作数在CPU的Register中 操作数在Memory中 二、指令寻址方式 寻址方式:CPU寻找操作数或送操作结果的方式。 操作数可能存放的场所

  8. 8086 的寻址方法有: 立即寻址、存储器寻址、串操作寻址 I/O端口寻址、程序转移寻址

  9. 1.立即寻址:指令中直接给出操作数的数值。 如: MOV AL,26H MOV CX,2A50H 立即寻址速度快,一般用于给寄存器或存储器赋 初值

  10. 2.寄存器寻址:操作数存放在指令规定的寄 存器中。 如:MOV DX,AX 寄存器寻址机器码字节最短,执行速度最快

  11. 3.直接寻址:指令直接给出操作数的偏移地 址。(存储器寻址方式) • 直接寻址方式: MOV AX,[2000H] • 段超越前缀: MOV AX,ES:[500] • 符号地址: AREA1 DW 100 MOV AX,AREA1

  12. (BX) (SI) 段寄存器DS (即操作数在数据段) (DI) (BP) 段寄存器SS(即操作数在堆栈段) EA= 4.寄存器间接寻址:操作数的有效地址EA存 放在基址或变址寄存器。 MOV AX,[SI] (DS):(SI)→AX MOV AX,[BP] (SS):(BP)→AX

  13. (BX) (SI)段寄存器DS(即操作数在数据段) (DI) (BP) 段寄存器SS (即操作数在堆栈段) +disp EA= +disp 5.寄存器相对寻址:操作数的有效地址EA是 8位或16位的偏移量加基址或变址寄存器 如: MOV BX,COUNT[SI] 注:偏移量可以是负数

  14. BX 默认段DS BP 默认段SS (BX) (SI) (BP ) (DI) + 6.基址变址寻址:操作数的有效地址EA是基址存 器(BX或BP)加变址寄存器(SI或DI)。 EA= 如: MOV AX,[BX][SI] MOV AX,[BX+SI]

  15. BX 默认段DS BP 默认段SS (BX) (SI) 8位偏移量 (BP ) (DI) 16为偏移量 + + 7.相对基址变址寻址:操作数的有效地址EA是8位 或16位的偏移量加基址寄存器(BX或BP)和变 址寄存器(SI或DI)。 EA= 如: MOV AX, MASK[BX][SI] MOV AX,[MASK+BX+SI]

  16. 其它: • 隐含寻址 • I/O端口寻址 • 一条指令几种寻址方式 • 转移类寻址

  17. 8.I/O端口寻址 • 直接端口寻址:指令中直接给出外设端口地址 如: IN AL,63H OUT 64H,AL • 间接端口寻址:指令DX寄存器为外设端口地址 如: MOV DX,213H IN AL,DX 注: 直接端口寻址范围(0~FFH) 间接端口寻址范围(0~FFFFH)

  18. 转移指令寻址方式 • 段内直接寻址 立即短转移 JMP SHORT PROG_S (8位立即数) 立即近转移 JMP NEAR PTR PRON_N(16位立即数) • 段内间接寻址 以存储器或寄存器作为转移目标地址 寄存器: JMP BX 存储器: JMP WORD PTR [BX] • 段间直接寻址 JMP FAR PTR PROG _F • 段间间接寻址 JMP DWORD PTR[BX]

  19. 第二节 8086指令系统 • 指令系统是汇编语言程序设计基础 • 汇编语言不如高级语言容易掌握 • 学习要点:功能、寻址方式、对PSW影响 • 8086指令系统分6类:数据传送、算术运算、逻辑和移位、字符串处理、转移类指令、处理机控制类。

  20. 指令名称 操作码 操作数 例 传送字或字节 MOV 目标,源 MOV ARRAY[SI],AL 把字压入堆栈 PUSH 源 PUSH AX 把字弹出堆栈 POP 目标 POP AX 交换字节或字 XCHG 目标,源XCHG AX,BX 字节翻译 XLAT 译码表 XLAT ASCII-TAB 一、数据传送指令 1、通用传送指令

  21. 立即数 通用寄存器 存储器 段寄存器 MOV指令完成把1字节或1字内容从源操作数传送到目的操作数 格式: MOV 目标,源 • 立即数不能做目的操作数 • 无存储器间直接传送 • 不能给CS、IP直接赋值 • 不能用立即数对段寄存器赋值

  22. 例: MOV AL,‘B’ MOV DX,OFFSET ARRAY MOV AL,AREA1 MOV AREA2,AL AREA1 14 3B AREA2 00 00 00 ARRAY 00

  23. 2000:0000 30 减1 21 SP 00 25 2000:0040 栈底 • PUSH 进栈指令 格式: PUSH 源 若BX=2500H DS=2130H SP=0040H SS=2000H 执行 PUSH BX PUSH DS • 源操作数可以是通用寄存器、段寄存器、存储器。 • 压栈时必须是字 • 先压高字节、再压低字节,且SP减1 执行后 SP=003CH

  24. 2000:0000 30 2000:003C 21 加1 00 SP 25 2000:0040 栈底 • POP 出栈指令 格式: POP 目的 若:SP=003CH SS=2000H 执行 POP DS POP BX • 目的操作数可以是通用寄存器、段寄存器、存储器。 • 弹栈时必须是字 • 先弹低字节、再弹高字节,且SP加1 执行后 SP=0040H DS=2130H BX=2500H

  25. XCHG 交换指令 格式:XCHG 目的,源 例:XCHG AX,[BX+200H] 若:AX=2000H,DS=3000H BX=1800H,(31A00H)=1995H 。 执行后: AX=1995H (31A00H)=2000H 注:源、目的可以是寄存器, 可以是存储器,但不能都是存储器

  26. XLAT 指令 格式:XLAT 或XLAT 表 该指令采用隐含寻址 表有效地址EA=BX+AL,查表后内容送AL 例:把0~9的十进制数转换成七段码 TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H MOV AL,5 MOV BX,OFFSET TABLE XLATTABLE

  27. 2、输入/输出指令 IN 累加器,端口 OUT 端口,累加器 如果端口地址在0000H~00FFH,可用直接或间接寻址 如果端口地址不在0000H~00FFH,只能用间接寻址 MOV DX,210H(间接) IN AL,DX IN AX,21H (直接) IN AL,210H ()

  28. 名称 操作码 操作数 举例 装入有效地址 LEA 目,源 LEA BX,[DI] 指针装入DS LDS 目,源 LDS BX,TABLE[SI] 指针装入ES LES 目,源 LES DI,ARRAY[BX] 这三条指令用于传送地址码, 源操作数必须是存储器, 目的操作数除段寄存器的16位寄存器。 3、地址目标传送指令 例: 若:DI=0100H,DS=2000H, (20106H)=1234H,(20108H)=5678H 则: LEA BX,6[DI] BX=0106H LDS BX,6[DI] BX=1234H DS=5678H

  29. 4、标志传送指令 LAHF 标志装入AH 将标志SF,ZF,AF,PF,CF送AH的7,6,4,2,0 SAHF AH内容装入标志 将AH的7,6,4,2,0送标志SF,ZF,AF,PF,CF PUSHF 压标志 POPF 弹标志

  30. 传送指令对标志影响: 除 POPF SAHF 两条指令,其余指令均不影 响标志

  31. 二、算术运算指令 • 8086算术运算指令共有20条,分4组 • 8086的4组指令为加法、减法、乘法、除法 • 8086可处理四种类型的数:无符号、带符号、压缩BCD码、非压缩BCD码 8086四种类型数的解释 二进制 十六进制 无符号数 带符号数 非压缩BCD 压缩BCD 00000111 07 7 7 7 7 10001001 89 137 -119 无效 89 11000101 C5 197 -59 无效 无效

  32. 1、加法指令 ADD 目的,源 目的源+目的 ADC 目的,源 目的源+目的+CF INC 目的 目的目的+1 AAA DAA 说明:源操作数为立即数、通用寄存器、存储器 目的操作数为通用寄存器、存储器 源、目不能都是存储器 算术运算指令影响标志

  33. 例: ADD AL,18H ADC BL,AL ADC AX,DX ADD AL,COST[BX] INC BL INC CX INC BYTE PTR[BX] INC WORD PTR[BX]

  34. DAA加法的十进制调整指令,适用压缩BCD码 调整原则: 若AL低4位>9或AF=1 则ALAL+6,进行低字节调整 若AL高4位>9或CF=1 则ALAL+60H,进行高字节调整,使CF=1 例1、AL=38(BCD) BL=15(BCD),求两数之和 ADD AL,BL ;AL=4BH DAA ;AL=53H(BCD)CF 0 例2、AL=88(BCD) BL=49(BCD),求两数之和 ADD AL,BL ;AL=0D1H DAA ;AL=37H,CF=1

  35. 使用AAA、DAA指令注意: 仅对AL调整,运算必须是字节,且结果存在AL中 参加运算的数必须合法,即压缩或非压缩BCD码 紧跟在ADD、ADC、INC指令后面

  36. 2、减法指令 SUB 目的,源 目的目的-源 SBB 目的,源 目的目的-源-CF DEC 目的 目的目的-1 NEG 目的 目的0-目的 CMP 目的,源 源-目的 AAS DAS 说明:源操作数为立即数、通用寄存器、存储器 目的 通用寄存器、存储器 源、目不能都是存储器 算术运算指令影响标志

  37. 3、乘法指令 采用字节乘还是字乘 取决于原操作数 MUL 源 IMUL 源 AAM 说明: *乘法指令只给出一个源操作数,另一源操作数, 目的操作数采用隐含寻址 *乘法指令可字节与字节乘,可字与字乘 字节乘 :AX AL*源 字乘:DX AX AX*源 *源操作数可选寄存器、存储器(说明字还是字节) *乘法影响标志CF,OF

  38. 例1: MUL DL MUL CX MUL BYTE PTR[SI] MUL WORD PTR[BX] 例2: AL=55H,BL=14H MUL BL 执行后AX=06A4H CF=1,OF=1 例3: AL=-28H,BL=59H IMUL BL 执行后AX=F98CH,CF=1,OF=1

  39. 乘法的ASCII调整: AAM 把AL/10商在AH,余数在AL 例: MOV AL,09H MOV BL,06H MUL BL ;AL=36H AAM ;AH=05H,AL=04H

  40. 4、除法指令 DIV 源 IDIV 源 AAD CBW CWD 说明: *除法指令只给出一个源操作数,另一源操作数, 目的操作数采用隐含寻址 *除法可完成字节或字除,取决于源操作数 *字节除 商AL,余数AH AX/源(字节) 字除 商AX,余数DX DXAX/源(字) *源操作数可选寄存器、存储器(说明字还是字节) *除法指令对标志无影响,但超过范围,产生中断

  41. 例1:完成两个无符号数7A86H,04H相除 MOV AX,7A86H MOV BL,04H DIV BL 超过范围,产生除法中断 MOV DX,0 MOV AX,7A86H MOV BX,04H DIV BX 例2:-38/3的商和余数 MOV AX,-38 MOV CH,03H IDIV CH MOV AL,-38 MOV CH,03H CBW IDIV CH AL=-13 AH=1 AL=-12 AH=-2 ? OR

  42. 符号扩展: CBW AL 符号扩展 AX CWD AX 符号扩展 DX,AX

  43. 除法的ASCII调整: AAD ALAH*10+AL,AH 0 在做除法前先除 例:完成非压缩BCD码37除5 MOV AX,0307H MOV BL,05H AAD ;AL=25H DIV BL ;AL=7(商)AH=2(余数)

  44. 三、逻辑运算与移位指令 1 、逻辑运算指令 名称 操作码 操作数 功能 非 NOT 目的 目的  目的 与 AND 目的,源 目的  目的源 或 OR 目的,源 目的  目的源 异或 XOR 目的,源 目的  目的源 测试 TEST 目的,源 目的源

  45. 与指令用来清除或保留操作数中某些位 • 或指令用来保留或使操作数某些位置1 • 异或指令可使某些位取反,某些位不变 • 测试指令完成的功能是与,但不回送结果 • 逻辑运算指令对标志影响: NOT 指令不影响标志,其余指令根据结果置 SF,ZF,PF 、CF与OF 清0、AF 不确定。

  46. 2 、移位与循环指令 逻辑左移 SHL 目的,计数值 算术左移 SAL 目的,计数值 逻辑右移 SHR 目的,计数值 算术右移 SAR 目的,计数值 循环左移 ROL 目的,计数值 循环右移 ROR 目的,计数值 带进位循环左移 RCL 目的,计数值 带进位循环右移 RCR 目的,计数值

  47. M 0 CF L SHL/SAL SHR SAR ROL ROR RCL RCR CF M L 0 L CF M CF CF CF CF

  48. 逻辑左移 无符号乘2 逻辑右移 无符号除2 算术左移 带符号乘2 算术右移 带符号除2 • 移位: • 循环指令用于按位检测,又能恢复原值场所 • 8086循环和移位指令一次可移1位,也可移多位(CL) • 操作数形式: • 对标志影响: 目的操作数 可选用存储器、寄存器 计数值 选1或CL AF无定义、PF,SF,ZF根据结果定、OF 移一位,根据结果定;移多位,不确定

  49. 例 1: MOV AL,10000101B MOV CL,03H ;右移三位=除8 SHR AL,CL ;AL=10H=16 例2: MOV AL,10000000B MOV CL,03H SAR AL,CL ;AL=F0H=-16

  50. 用移位指令和循环指令可完成多精度数移位 例1:完成 AX,BX左移一位 SHL BX,1 RCL AX,1 例2: 完成AX,BX 右移一位(无符号数) SHR AX,1 RCR BX,1

More Related