第3章 8086/8088指令系统 mov ax,12h call display Jmp 1234h.

Slides:



Advertisements
Similar presentations
22.3 实际问题与一元二次方程(1).
Advertisements

输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第10章 DOS功能调用与BIOS中断调用.
1.1 计算机系统简介 1.2 计算机的基本组成 1.3 计算机硬件的主要技术指标 1.4 本书结构.
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
第五章 微处理器总线操作与时序 三、总线时序 一、 8086/8088引脚 二、最小模式和最大模式.
汇编语言与接口技术 教师:范新民.
第三章 80 x86的指令系统和寻址方式 3.1 指令概述 x86的寻址方式 ( ※ ) 3.3 程序占有的空间和执行的时间
 指令系统  寻址方式 第3章 80x86的指令系统和寻址方式 一组指令的集合 指令 与数据有关的寻址方式 与转移地址有关的寻址方式
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
微型计算机技术 教 学 指 导(三) 太原广播电视大学 郭建勇.
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
逆向工程-汇编语言
微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日.
/8088指令系统 为便于理解指令的形式和功能, 对指令中操作数符号的约定如下: 大小写字母无区别
第6章 DMA传输 6.1 DMA传输原理 6.2 DMA控制器8237A A的编程使用 欢迎辞.
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
第四章 典型CPU及指令系统举例.
第2章 汇编语言与汇编程序 ——8086/8088指令系统 mov ax,12h call display Jmp 1234h.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第3章 80x86汇编语言程序设计(上) 时间不够的情况下只讲16位汇编 注:本章中,用此颜色和字型说明的文字只适用于32位汇编.
第3章 寻址方式 罗文坚 中国科大 计算机学院
第8章 寻址方式与指令系统.
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
微机原理及应用 主讲:郑海春.
7.1 机器指令 7.2 操作数类型和操作类型 7.3 寻址方式 7.4 指令格式举例 7.5 RISC 技术.
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第3章 80x86汇编语言程序设计(上) 时间不够的情况下只讲16位汇编 注:本章中,用此颜色和字型说明的文字只适用于32位汇编.
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
微型计算机原理及应用.
第五章 微处理器.
8086 指令系统特点 可变长指令:指令格式比较复杂。
computer organization principle
1.3 微型计算机的结构和工作原理.
逆向工程-汇编语言
CPU结构和功能.
第3章 MCS-51单片机指令系统 3.1 指令概述 3.2 寻址方式 3.3 MCS-51系列单片机的指令系统.
第二章 80x86计算机组织 x86微处理器 2.2 基于微处理器的计算机系统构成 2.3 中央处理机 2.4 存储器
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
教师:王晓甜 8086CPU 指令系统 教师:王晓甜
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第二章 8086微处理器. 第二章 8086微处理器 微处理器的基本结构 8086微处理器的主要特性和内部结构 8086CPU的工作模式和引脚信号 8086的存储器管理 8086的总线操作和时序.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第九章 微处理器外部结构和总线操作时序.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
第3章 指令系统和寻址方式 3.1指令系统概述 /8086CPU的寻址方式 3.3 指令的机器码表示方法(略)
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
单片机应用技术 项目一 循环彩灯装置 第5讲 MCS-51单片机指令系统及指令格式 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第四章 8086/8088的指令系统 第一节 寻址方式 一、立即寻址 二、寄存器寻址 三、直接寻址 四、寄存器间接寻址 五、变址寻址
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
第8章 并行接口芯片 并行接口一般具有两个或两个以上的8位I/O接口。各个口的工作方式可由程序分别确定或改变,使用灵活,便于和各种外部设备连接。因此,又称可编程的外部接口(PPI) 目前各主要微处理器厂商都有自己的PPI产品,但它们的功能基本类似.
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
Presentation transcript:

第3章 8086/8088指令系统 mov ax,12h call display Jmp 1234h

主要内容: 指令系统的一般概念 对操作数的寻址方式 六大类指令的操作原理 操作码的含义 指令对操作数的要求 指令执行的结果

3.1 概述 8088/8086指令系统: (1)指令向后兼容(x86系列) (2)应用广泛,资料易于寻找 3.1 概述 指令——控制计算机完成指定操作的命令 机器指令——指令的二进制代码形式。例如:CD21H 汇编指令——助记符形式的指令。例如:INT 21H 指令系统——CPU所有指令及其使用规则的集合 8088/8086指令系统: (1)指令向后兼容(x86系列) (2)应用广泛,资料易于寻找

指令按功能分为六大类(92种) (1)数据传送类; (2)算术运算类; (3)逻辑运算和移位; (4)串操作; (5)控制转移类; (6)处理器控制。 参见 表3-1 8086/8088 CPU 常用指令一览表 P94

3.1.1 指令的基本构成 目的 源 操作码 [操作数], [操作数] 说明要执行的是什么操作 操作对象,可以有0个、1个或2个

指令举例: MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC [BX] HLT

部分8088/8086常用指令 指令类型 助记符 数 据 传 送 数据传送 MOV,PUSH/POP,XCHG等 地址传送 LEA,LDS,LES 输入输出 IN,OUT 算 术 运 加法 ADD,ADC,INC 减法 SUB,SBB,DEC,NEG,CMP 乘/除法 MUL,IMUL,DIV,IDIV 逻辑 AND,OR,NOT,XOR,TEST 移位 SHL/SHR/SAR,ROL/ROR,RCL/RCR 串操作 MOVS,CMPS,SCAS,LODS,STOS 控制转移 JMP,JXX,LOOP,CALL/RET,INT/IRET

8088/8086的操作数分为4类 立即数只能用作源操作数,如 操作数 数据(立即数) 操作数 地址: 寄存器(名称)、存储器单元(地址) I/O接口的端口(地址) 1、立即数(常数)源操作数就是参加操作的数据本身,它们可以是8位或16位。取值范围如下表: 8位 16位 无符号数 00H-FFH(0-255) 0000H-FFFFH(0-65535) 带符号数 80H-7FH(-128~127) 8000H-7FFFH(-32768~32767) 立即数只能用作源操作数,如 MOV AX,0FA00H ;正确 MOV 8000H,DX ;错误

2、寄存器操作数 表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。 放在8个通用寄存器或4个段寄存器中的操作数

只能存放字操作数 段寄存器存放当前操作数的段基地址 SI DI BP SP CS DS ES SS

3、存储器操作数 Flags 标志寄存器: 仅有个别指令可用它作为操作数 IP 不能用指令指针寄存器: 它作为操作数, 顺序执行时它自动加1,跳转执行时自动会跳转 3、存储器操作数 表示当前参加运算的数存放在存储器的某1/2/4个单元中 存储单元个数 类型 1 2 4 字节 字 双字 存储器操作数 一般不允许两个操作数同时为存储器操作数

存储单元的物理地址 = 段基地址×16 + 偏移地址 若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。 表3.3 段寄存器使用的一些基本约定P96 8086规定了访问存储器段的规则: 此规则定义了段地址寄存器和偏移地址寄存器的组合方式,其默认规则如下表: 默认段地址 偏移地址 用于访问 CS IP 指令 SS SP、BP (可超越) 堆栈中的数据 DS(可超越) BX、DI、SI、8位或16位数 数据段中的数据 ES 串指令的DI 目标串操作数

存储单元的物理地址 = 段基地址×16 + 偏移地址 存储器操作数的偏移地址(也称有效地址EA)要用“[EA]”方括号括起来, 它可以通过不同的寻址方式由指令给出; 存储器操作数的段基地址(也称段头地址)一般省去,按隐含规则确定它们,也可直接给出进行段超越。 例如 若(BX)=2000H, (SI)=0A00H, (DI)=2A00H, 则以下指令的结果是一样的: MOV AL, [2A00H] ;隐含段头为DS,直接寻址 MOV AL, [BX+0A00H] ;隐含段头为DS ,寄存器相对寻址 MOV AL, [BX][SI] ;隐含段头为DS,基址-变址寻址 MOV AL, [DI] ;隐含段头为DS,寄存器间接寻址 但 MOV AL, ES:[2A00H] ; 段超越,段头为ES,与前4条不同 地址值或寄存器 注意:存储器数据表示形式:[ ]

4、I/O接口操作数 类型 存储单元个数 一般不允许两个操作数同时为I/O接口操作数 表示当前参加运算的数存放在I/O接口的某1/2个端口中 字节 字 I/O接口操作数 一般不允许两个操作数同时为I/O接口操作数 I/O接口地址为16位,一般采用DX寄存器间接寻址给出;有时I/O接口地址仅用8位,这时可采用直接寻址。 例如:IN AL,[DX]; 括号习惯都省去写为 IN AL,DX OUT [80H],AL;括号习惯都省去写为 OUT 80H,AL 注意:不要理解为:MOV AL, DX 和MOV 80H,AL ,它们完全不同。

3.1.2 指令的执行时间 一条指令的执行时间=∑ 单位用时钟周期数T表示 结论: 1)尽量使用寄存器作为操作数 3.1.2 指令的执行时间 取指令 取操作数 执行指令 传送结果 一条指令的执行时间=∑ 执行 单位用时钟周期数T表示 表3.4 常用指令执行时间 P96-97 表3.5 计算偏移地址EA所需时间 P98 结论: 1)尽量使用寄存器作为操作数 2)若有可能,用移位代替乘除法 3)尽量使用简单的寻址方式

3.2 8086的寻址方式 寻址方式——寻找操作数的方法 寻找操作数的地址(一般指源操作数) 寻找要执行的下一条指令的地址 3.2 8086的寻址方式 寻址方式——寻找操作数的方法 寻找操作数的地址(一般指源操作数) 寻找要执行的下一条指令的地址 在8086指令系统中,操作数所在地址的寻址方式可分为8种: ①立即寻址 ⑤ 寄存器相对寻址 ②直接寻址 ⑥基址-变址寻址 ③寄存器寻址 ⑦相对的基址-变址寻址 ④寄存器间接寻址 ⑧隐含寻址

3.1.2 立即寻址 操作数(为一常数)直接由指令给出 (此操作数称为立即数) 立即寻址只能用于源操作数 例: MOV AX, 1C8FH 3.1.2 立即寻址 操作数(为一常数)直接由指令给出 (此操作数称为立即数) 立即寻址只能用于源操作数 例: MOV AX, 1C8FH MOV BYTE PTR[2A00H], 8FH 错误例: × MOV 2A00H, AX ; 错误!

用途:直接给出操作数据,立即数存放在内存的代码段中 指令操作例:MOV AX,3102H ; AX 3102H 执行后,(AH) = 31H,(AL) = 02H 存储器 AX 立即寻址指令在存储器中的存放形式 AH AL MOV操作码 操作码 代码段 立即数 02H 低8位 代码段 高8位 31H 用途:直接给出操作数据,立即数存放在内存的代码段中

3.2.3 寄存器寻址 操作数放在某个寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段地址无关 例: MOV AX, BX 3.2.3 寄存器寻址 操作数放在某个寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段地址无关 例: MOV AX, BX MOV [3F00H], AX MOV CL, AL 错误例: × MOV AX, BL ; 字长不同 × MOV ES: AX, DX ; 寄存器与段无关

指令操作例:MOV SI,AX ; SI (AX) 指令执行前:(AX)=2233H 指令执行后:(AX)=2233H,(SI)=2233H 用途:操作数存放在寄存器中,根据寄存器名称寻找寄存 器里面的数据。

3.2.2 直接寻址 指令中直接给出存储器操作数的16位偏移地址 或I/O接口仅8位端口地址 存储器默认的段寄存器为DS, 3.2.2 直接寻址 指令中直接给出存储器操作数的16位偏移地址 或I/O接口仅8位端口地址 存储器偏移地址也称为有效地址(EA, Effective Address) 存储器默认的段寄存器为DS, 但也可以显式地指定其他段寄存器——称为段超越前缀 存储器偏移地址也可用符号地址来表示,如ADDR、VAR 例: MOV AX , [2A00H]; 段头隐含为DS MOV DX , ES: [2A00H];段超越 MOV SI , TABLE_PTR; 段头隐含为DS 还有: IN AL,[90H];括号要省去 OUT [85H],AL;括号要省去

. 例:MOV AX,[3102H] ;AL (3102H) , AH (3103H) 如果(DS)=2000H, (23102H) = CDH, (23103H) = ABH 则操作数的物理地址为: 20000H+3102H = 23102H 指令执行后:(AX) = ABCDH 存储器 MOV操作码 代码段 02H 31H AH AL . 数据段 23102H CDH 23103H ABH 用途:用于操作数存放在存储器单元中 或I/O接口地址仅为8位的的端口中

3.2.4 寄存器间接寻址 EA = 操作数的偏移地址(有效地址EA)放在寄存器中 只有SI、DI、BX和BP可作间址寄存器 错误例 : 3.2.4 寄存器间接寻址 操作数的偏移地址(有效地址EA)放在寄存器中 只有SI、DI、BX和BP可作间址寄存器 例: MOV AX, [BX] MOV CL, CS:[DI] IN AL, [DX];括号省去 OUT [DX],AL;括号省去 错误例 : × MOV AX, [DX] × MOV CL, [AX] (BX) (BP) (SI) (DI) EA =

60000 61200 指令操作例:MOV AX,[SI] 44H 33H 6000 1200 DS SI AX 存储器 数据段 若 (DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H 则指令执行后,(AX)=3344H。 44H 33H 6000 1200 DS SI 60000 61200 61200H AX 存储器 数据段 +) 用途:操作数存放在存储器或I/O接口地址为16位的的寻址

3.2.5 寄存器相对寻址 + 位移量 EA = EA=间址寄存器的内容 + 8/16位的位移量 8位 16位 3.2.5 寄存器相对寻址 EA=间址寄存器的内容 + 8/16位的位移量 (BX) (BP) (SI) (DI) 8位 16位 + EA = 位移量 寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之)

MOV AX, [BP+1000H] ; 默认段寄存器为SS 指令操作例:MOV AX,DATA[BX] 例: MOV AX, [BX+8] MOV CX, TABLE[SI] MOV AX, [BP+1000H] ; 默认段寄存器为SS 指令操作例:MOV AX,DATA[BX] 若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H 则物理地址 = 60000H + 1000H + 2A00H = 63A00H 指令执行后:(AX)=5566H (见下页图示)

. DS 60000 BX 1000 + DATA 2A00 . 63A00 63A00H . MOV AX,DATA[BX] 操作码 代码段 BX 1000 00 偏移量低 2A 偏移量高 + DATA 2A00 . 63A00 63A00H 66H 数据段 55H AX AH AL . 用途:操作数存放在存储器地址指定的单元中

3.2.6 基址-变址寻址 + EA = 若操作数的偏移地址: 由基址寄存器(BX或BP)给出 —— 基址寻址方式 3.2.6 基址-变址寻址 若操作数的偏移地址: 由基址寄存器(BX或BP)给出 —— 基址寻址方式 由变址寄存器(SI或DI)给出 —— 变址寻址方式 由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。 基址寄存器 变址寄存器 (BX) (BP) (SI) (DI) + EA = 同一组内的寄存器不能同时出现。

例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI] 用途:操作数存放在存储器地址指定的单元中

指令操作例:MOV AX,[BX][SI] 假定:(DS)=8000H, (BX)=2000H, SI=1000H 则物理地址 = 80000H + 2000H + 1000H = 83000H 指令执行后: (AL)=[83000H] (AH)=[83001H] . DS 80000 操作码 代码段 BX 2000 + SI 1000 . 83000 83000H YY 数据段 XX AX AH AL .

3.2.7 相对的基址-变址寻址 + + 位移量 EA = 在基址-变址寻址的基础上再加上一个相对位移量 注意事项同基址-变址寻址 (BX) (BP) (SI) (DI) 8位 16位 + + EA = 位移量 MOV AX,BASE [SI] [BX] MOV AX,[BX+BASE] [SI] MOV AX,[BX+SI+BASE] MOV AX,[BX] BASE [SI] MOV AX,[BX+SI] BASE 例: 用途:操作数存放在存储器地址指定的单元中

指令操作例:MOV AX,DATA[DI][BX] 若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H 则指令执行后(AH)=[83021H], (AL)=[83020H] . DS 80000 操作码 BX 2000 代码段 DI 1000 + DATA 0200 . 83200 83200H YY 数据段 XX . AX AH AL

使用相对的基址-变址寻址方式可以很方便地访问二维数组。 位移量 数组首地址 (偏移地址) 基址寄存器 数组元素行址 (行位移地址) 变址寄存器 数组元素列址 (行内元素下标) 二维数组例:内存图示(按行存储) 1 8 3 2 5 2 4 0 9 A =

3.2.8 隐含寻址 (AL)×(BL)→AX 用途:操作数存放在寄存器或存储器地址指定的单 元中 3.2.8 隐含寻址 指令操作数是隐含的,在指令中未显式地指明。 例:MUL BL 指令隐含了被乘数AL及乘积AX 类似的指令还有:XLAT、DIV、CBW、MOVS等 (AL)×(BL)→AX 用途:操作数存放在寄存器或存储器地址指定的单 元中

如何寻找指令的地址呢? (1)程序中将要执行的指令的地址由CS:IP指 向; (2)程序的第一条指令的地址(首地址)由操作 系统OS分配产生; (3)一般程序是一条接着一条的顺序执行的,所 以CS:IP自动加1即可实现。 (4)当程序跳转执行时,CS:IP采用直接方式 或间接方式改为跳转到的指令地址。

小结 指令由( )和( )构成 操作码 操作数 如何取得操作数——称为( ) 寻址方式

立即寻址 直接寻址 - 针对M、I/O 寄存器寻址 - 针对R 寄存器间接寻址 - 针对M、I/O 寻址方式可分8种 寄存器相对寻址 - 针对M 基址-变址寻址 - 针对M 基址-变址相对寻址- 针对M 隐含寻址 - 针对R、M

寄存器间接、寄存器相对、基址变址、相对基址变址4种寻址方式的比较: 寻址方式 指令操作数形式 寄存器间接 只有一个寄存器(BX/BP/SI/DI之一) 寄存器相对 一个寄存器加上位移量 基址—变址 两个不同类别的寄存器 相对基址-变址 两个不同类别的寄存器加上位移量