当前位置: 首页 > >

教案09-计算机硬件技术基础

发布时间:

计算机硬件技术基础第 9 次课
章节 名称 第 3 章 汇编语言程序设计基础 第 2 节 8086/8088 指令系统

目的 要求

1.教学目的:掌握汇编语言指令的分类;掌握数据传送控制指令的格 式及功能。 2.教学要求:了解 8086 指令系统中指令的分类;掌握数据传送指令的 格式、功能及注意事项

重点 难点

重点:数据传送指令的使用 难点:指令的格式、功能,指令对标志位的影响

方法 手段

① 课堂讲授,演示相关程序,通过指令在程序中的具体应用加深学员对 指令的理解。 ② 利用 DEBUG 程序演示程序执行的具体情况,跟踪指令执行过程中相关 寄存器的变化和标志位的变化,加深学员对指令的理解。 方式 变化

课 堂 提 问

MOV AL,TABLE[SI] 指令执行过程中 IP 寄存器

本 次 课 内 容 总 结

本次课我们学*了 80X86 指令系统和数据传送指令,数据传送指令是 汇编语言中非常重要的一部分,使用最多,指令格式也比较多,特别是指 令的使用情况比较难以掌握,需要特别花时间认真理解。

思 考 题 作 业 题

作业:

4、5

参考 资料

《计算机硬件技术基础》第 3 章


上一讲内容回顾:






备注: 备注:

在上一节课当中我们知道了与数据相关的寻址方式和与转移地址相 关的寻址方式,其中数据寻址方式中一般情况下默认段基址是数据段, 关的寻址方式,其中数据寻址方式中一般情况下默认段基址是数据段,但 课 堂 练 在串操作中目的串一般默认是附加段; 在串操作中目的串一般默认是附加段;如果 BP 寄存器参与寻址的时候默 *:寻 是堆栈段,这些特殊情况是应该特别注意的, 是堆栈段,这些特殊情况是应该特别注意的,在做题过程中大家要非常小 与此同时通过上一节课的学*我们也对一些简单的指令有了具体的认 心。与此同时通过上一节课的学*我们也对一些简单的指令有了具体的认 址方式 今天我们就正式的将这些指令进行学*。 识。今天我们就正式的将这些指令进行学*。本章的学*重点大家要放在 指令的功能上,并且要知道指令执行以后对处理器的影响是什么样的。 指令的功能上,并且要知道指令执行以后对处理器的影响是什么样的。 3.3 8088/8086 CPU 的指令系统

3.3.1 80X86 指令系统概述 指令系统是一台计算机所能执行的全部指令的集合。 指令系统是一台计算机所能执行的全部指令的集合。 指令系统的最小指令集合。 8086 指令系统是 80X86 指令系统的最小指令集合。 系列微机的指令系统向下兼容。 80X86 系列微机的指令系统向下兼容。 1. 80X86 指令系统分为以下 6 组: 数据传送指令 串处理指令 算术指令 控制转移指令 逻辑指令 处理机控制与杂项操作指令 在学*汇编指令时, 指令的功能是我们学*和掌握的重点, 但要准确、 在学*汇编指令时, 指令的功能是我们学*和掌握的重点, 但要准确、 有效地运用这些指令,我们还要熟悉系统对每条指令的一些规定或约束 还要熟悉系统对每条指令的一些规定或约束。 有效地运用这些指令,我们还要熟悉系统对每条指令的一些规定或约束。 因此,对指令要掌握以下几个方面内容: 因此,对指令要掌握以下几个方面内容: 指令操作数的寻址方式; 指令操作数的寻址方式; 指令对标志位的影响、标志位对指令的影响; 指令对标志位的影响、标志位对指令的影响; 指令的执行时间,对可完成同样功能的指令, 指令的执行时间,对可完成同样功能的指令,要选用执行时间短的 指令 。 学*指令时 要注意以下几点 2. 学*指令时,要注意以下几点 : 指令的格式:助记符、 指令的格式:助记符、操作数的格式 指令执行的操作 指令执行后的结果。 执行的操作: 指令执行的操作:指令执行后的结果。 对标志位的影响。 对标志位的影响。 程序,学*指令系统。 利用 DEBUG 程序,学*指令系统。 附录 E DEBUG 命令表 的使用方法简介。 DEBUG 的使用方法简介。 3.指令助记符 规定指令执行何种操作。 指令助记符: 3.指令助记符:规定指令执行何种操作。 指令助记符表 指令中操作数的表示: 4. 指令中操作数的表示: 书写指令注意事项: 5. 书写指令注意事项:





DEBUG 程序的 操作方 法

不区分字母的大小写。 不区分字母的大小写。 不添加指令系统中没有的指令,即不自创助记符。 不添加指令系统中没有的指令,即不自创助记符。 注意操作数的范围 0~ 对字节操作指令 0 ~FFH 0~ 255 对字操作指令 0 ~ FFFFH 0 ~ 65535 MOV AL ,260 MOV AX ,70000 MOV AL, 1FFH MOV AL, 2ABCDH 对无操作数指令,不添加操作数。 对无操作数指令,不添加操作数。 STC AL 对单操作数指令,操作数不能是立即数。 对单操作数指令,操作数不能是立即数。 IMUL 6 对双操作数指令 ? 不能两个同为存储器操作数 MOV [ DI ] , [ SI ] ? 目的操作数不能是立即数 ADD 3 , AL ? 两个操作数的类型应相同 SUB AX , BL 定义为字类型存储器变量: 若 value 定义为字类型存储器变量: MOV CL, value 内存操作数的属性应明确。 内存操作数的属性应明确。 MOV [ BX ] ,0 MOV byte ptr [ BX ] , 0 MOV word ptr [ BX ] , 0 MOV [ BX ] , AL MOV [ BX ] , AX A、B、C、D、E、F 开头的十六进制数前面加 0,与 H 结尾的标识符 区别。 区别。 3.3.2 数据传送指令 数据传送指令负责把数据、地址或立即数传送到寄存器、 数据传送指令负责把数据、地址或立即数传送到寄存器、存储器或端 口号寄存器。它相对于高级语言里的赋值语句。 口号寄存器。它相对于高级语言里的赋值语句。 通用数据传送: a) 通用数据传送:MOV PUSH POP 累加器专用传送(输入输出) IN b) 累加器专用传送(输入输出) : OUT XLAT 地址传送: LEA LDS c) 地址传送: LEA LES 标志寄存器传送: d) 标志寄存器传送: LAHF SAHF PUSHF POPF

通过举 例说明 指令中 操作数 的正确 表示形 式。

类型转换指令: e) 类型转换指令:CBW 2. 通用传送指令 . 操作码 MOV PUSH 操作功 通用传送 入栈 能 ⑴通用传送指令 MOV ①从寄存器到寄存器 ②从寄存器到段寄存器 ③从寄存器到存储器 ④从段寄存器到寄存器 ⑤从存储器到寄存器 ⑥从段寄存器到存储器 ⑦从存储器到段寄存器 ⑧从立即数到寄存器 ⑨从立即数到存储器
CS DS、SS、ES

CWD

POP 出栈

PUSHF 标志压栈

POPF 标志出 栈

XCHG 交换

通用寄存器 AX、BX、CX、DX、 SI、DI、BP、SP

立即数

存储器数

图 3.7 MOV 指令的九种形式 指令有以下几条具体规定, 对 MOV 指令有以下几条具体规定,其中有些规定对其它指令也同样有 效。 两个操作数的数据类型要相同, (1)两个操作数的数据类型要相同,要同为 8 位、16 位, BL, 等是不正确的; 如:MOV BL,AX 等是不正确的; 两个操作数不能同时为段寄存器, ES, (2)两个操作数不能同时为段寄存器,如:MOV ES,DS 等; 不能为目的操作数,但可作为源操作数, (3)代码段寄存器 CS 不能为目的操作数,但可作为源操作数, 等不正确, AX, 如:指令 MOV CS, AX 等不正确,但指令 MOV AX,CS 等是正 确的; 确的; 立即数不能直接传给段寄存器, DS, (4)立即数不能直接传给段寄存器, 如:MOV DS,100H 等; (5)立即数不能作为目的操作数,如:MOV 100H,AX 等; 立即数不能作为目的操作数, 100H, IP, 指令的操作数; (6)指令指针 IP,不能作为 MOV 指令的操作数; 两个操作数不能同时为存储单元, (7)两个操作数不能同时为存储单元,

VARA, 如:MOV VARA,VARB 等,其中 VARA 和 VARB 是同数据类型的内存 变量。 变量。 *恢噶 PUSH 及出栈指令 POP 堆栈是一个重要的数据结构,它具有“先进后出”的特点, 堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来 保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。 保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。 指令格式: 指令格式:PUSH Reg/Mem 一个字进栈,系统自动完成两步操作: 一个字进栈,系统自动完成两步操作: SP←SP- (SP) 操作数; (SP SP←SP-2, SP)←操作数; 功 能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指 将寄存器、 段寄存器或存储器中的一个字数据压入堆栈, 针减 2。 ax=3125H。 例:PUSH AX ,其中 ax=3125H。 通过堆栈的变化讲解具体的操作。 通过堆栈的变化讲解具体的操作。 ⑷POP 指令格式: 指令格式:POP Reg/Mem 弹出一个字,系统自动完成两步操作: 弹出一个字,系统自动完成两步操作: 操作数← SP),SP←SP+2; 操作数←(SP),SP←SP+2; 例:POP BX 通过堆栈的变化讲解具体的操作。 通过堆栈的变化讲解具体的操作。 功 能:将栈顶元素弹出送至某一寄存器、段寄存器(除 CS 外)或存储器, 将栈顶元素弹出送至某一寄存器、段寄存器( 或存储器, 堆栈指针加 2。 累加器专用传送指令 2. 累加器专用传送指令 (1)IN 输入指令 输入指令用来从指定的外设寄存器取信息送入累加器。它有几种形式: 输入指令用来从指定的外设寄存器取信息送入累加器。它有几种形式: 长格式: 字节) 长格式: IN AL, PORT (字节) IN AX, PORT (字) 执行操作: AL) (AL PORT) (字节) 字节) 执行操作: AL) ←(PORT) ( AX) PORT) (字 (AX) ←(PORT+1, PORT) 字) ( 短格式: 短格式: IN AL, DX (字节) 字节) IN AX, DX ( 字) 执行操作: AL) (DX) (DX ) 字节) 执行操作: (AL)←( DX) (字节) AX) (DX)+1,(DX)(字 (DX (AX)←( DX)+1,(DX)(字) ) 注意:该指令的作用是从端口中读入一个字节或字, 注意:该指令的作用是从端口中读入一个字节或字,并保存在寄存器 AL 范围之内,那么, 或 AX 中。如果某输入设备的端口地址在 0~255 范围之内,那么,可在指 中直接给出,否则, 令 IN 中直接给出,否则,要把该端口地址先存入寄存器 DX 中,然后在指 来给出其端口地址。 令中由 DX 来给出其端口地址。 例: AL, IN AL, 60H ;从端口 60H 读入一个字节到 AL 中

堆栈要 同指令 队列相 比较

此处介 绍一些 端口的 知识

IN

AX,20H; 20H、 高高低低” AX,20H;把端口 20H、21H 按“高高低低”组成的字读入 AX

(2)OUT 输出指令 输出指令用来把累加器的内容送往指定的外设存储器,它有几种形式: 输出指令用来把累加器的内容送往指定的外设存储器,它有几种形式: 长格式: 字节) 长格式: OUT PORT, AL (字节) OUT PORT, AX (字) 执行操作: PORT) (PORT AL) 字节) 执行操作: PORT)←(AL) ( (字节)
PORT) AX) (字 (PORT+1, PORT)←(AX) 字) ( 短格式: 短格式: OUT DX, AL (字节) 字节) OUT DX, AX (字) 执行操作:(DX ) )← AL) 执行操作:(DX) ←(AL) ( DX) (DX )← AX) (字 ( DX)+1,(DX) ←(AX) 字) (DX)+1,(DX) ) (

(字节) 字节)

注意: 的内容输出到指定端口。 注意:该指令的作用是把寄存器 AL 或 AX 的内容输出到指定端口。如果 范围之内,那么, 某输出设备的端口地址在 0~255 范围之内,那么,可在指令 OUT 中直接给 否则, 出,否则,要把该端口地址先存入寄存器 DX 中,然后在指令中由 DX 来给 出其端口地址。 出其端口地址。 例: 61H,AL; OUT 61H,AL;把 AL 的内容输出到端口 61H 中 20H,AX; 20H、 OUT 20H,AX;把 AX 的内容输出到端口 20H、21H 中 (3)XLAT 换码指令 转换指令有两个隐含操作数 AL。 转换指令有两个隐含操作数 BX 和 AL。 格 式:XLAT OPR 或 XLAT 执行操作: AL) (BX) AL) (BX 执行操作: (AL)←( BX)+(AL) ) 其功能是把 的值作为内存字节数组首地址、 功 能:其功能是把 BX 的值作为内存字节数组首地址、下标为 AL。 AL 的数组元素的值传送给 AL。 BX, BX) 例:MOV BX,offset table ; (BX)=0040H AL, MOV AL,3 XLAT 指令执行后 (AL)=33H AL) 3. 地址传送指令 操作码 操作功能

LEA 取偏址

LDS 取偏址和数据 段值

LES 取偏址和附加数据 段值

取有效地址指令 LEA: 指令 LEA 是把一个内存变量的有效地址送给指定的寄存器。 其指令格 式如下: LEA Reg,Mem 该指令通常用来对指针或变址寄存器 BX、DI 或 SI 等置初值之用。

取段寄存器指令 LDS: 该组指令的功能是把内存单元的一个 “低字” 传送给指令中指定 的 16 位寄存器,把随后的一个“高字”传给相应的段寄存器(DS、ES) 。 其指令格式如下: LDS/LES Reg, Mem BX, 例:LEA BX,[BX+SI+0F62H] SI, LDS SI,[10H] DI, LES DI,[BX] 4. 标志传送指令 指令: 标志送 AH 指令: LAHF 执行操作: AH) (AH 的低字节) 执行操作: AH)←(FLAGS 的低字节) ( 送标志寄存器指令: AH 送标志寄存器指令:SAHF 执行操作: (FLAGS 的低字节)←(AH) 的低字节) AH) 执行操作: 标志进栈指令: 标志进栈指令:PUSHF 执行操作: SP) SP) 执行操作: (SP)←(SP) - 2 (SP SP) )← ( SP)+1, (SP) ←(FLAGS (SP) ) 标志出栈指令: 标志出栈指令:POPF 执行操作: FLAGS) (SP)+1,(SP) (SP 执行操作: (FLAGS)←( SP)+1,(SP) ) (SP)←(SP)+ 2 SP) SP)
Flags OF DF IF TF SF ZF AH SF ZF AF AF PF PF CF CF

5.

类型转换指令指令 类型转换指令指令

CBW AL → AX 执行操作: AL) 执行操作: 若(AL)的最高有效位为 0,则(AH)= 00H 若(AL)的最高有效位为 1,则(AH)= FFH AL) DX,AX) CWD AX → (DX,AX) 执行操作: AX) 执行操作:若(AX)的最高有效位为 0,则(DX)= 0000H AX) 若(AX)的最高有效位为 1,则(DX)= FFFFH AX) 例: (AX)= 0BA45H AX) CBW ; (AX)=0045H DX) AX) CWD ; (DX)=0FFFFH (AX)=0BA45H

3.3.3 小结 80X86 指令系统概述 8086 指令的分类 学*指令系统的方法及注意事项 数据传送指令 通用数据传送指令 地址传送指令 标志传送指令 I/O 指令 类型转换指令 作业: 作业: 4 、5




友情链接: hackchn文档网 营销文档网 爱linux网 爱行业网 时尚网