微枫原回米 课程目标 微机原理是学习和掌握微机硬件知识和汇编语言程序设计的入门课程: 微型计算机的基本工作原理 汇编语言程序设计 微型计算机接口技术 目的:建立微型计算机系统的整体概念,形成微机系统软硬件开发的初步能 力 教学内容 第一章基础知识 第二章微型计算机基础 第三章8086/8088CPU的指令系统 第四章汇编语言程序设计 第五章存储器系统 第六章输入输出和中断技术 第七章常用数字接口电路 第八章模拟量的输入输出 教材 李伯成,侯伯亨,张毅坤主编,微机原理与接口技术,西安电子科技大学出版社 微机原理与接口实验指导书,西安交大 课程情况 教学:60(4*15) 考试:出勤10%,作业30%,期末考试60% 第1章基础知识 主要内容: ●各种常用记数制和编码以及它们 相互间的转换; ●二进制数的算术运算和逻辑运算; 符号数的表示及补码运算 二进制数运算中的溢出问题 §1.1概述 电子计算机的发展 ●电子管计算机(1946-1956) ●晶体管计算机(1957-1964) 中小规模集成电路计算机(1965-1970) 超大规模集成电路计算机(1971-今) 电子计算机按其性能分类: 大中型计算机/巨型计算机( Mainframe Computer) 小型计算机( Minicomputer) 微型计算机( Microcomputer)
课程目标 微机原理是学习和掌握微机硬件知识和汇编语言程序设计的入门课程: 微型计算机的基本工作原理 汇编语言程序设计 微型计算机接口技术 目的:建立微型计算机系统的整体概念,形成微机系统软硬件开发的初步能 力。 教学内容 第一章 基础知识 第二章 微型计算机基础 第三章 8086/8088 CPU 的指令系统 第四章 汇编语言程序设计 第五章 存储器系统 第六章 输入输出和中断技术 第七章 常用数字接口电路 第八章 模拟量的输入输出 教材 李伯成,侯伯亨,张毅坤主编,微机原理与接口技术,西安电子科技大学出版社。 微机原理与接口实验指导书,西安交大 课程情况 教学:60(4*15) 考试:出勤 10%,作业 30%,期末考试 60% 第 1 章 基础知识 主要内容: ⚫ 各种常用记数制和编码以及它们 相互间的转换; ⚫ 二进制数的算术运算和逻辑运算; ⚫ 符号数的表示及补码运算; ⚫ 二进制数运算中的溢出问题 §1.1 概 述 ⚫ 电子计算机的发展: ⚫ 电子管计算机(1946-1956) ⚫ 晶体管计算机(1957-1964) ⚫ 中小规模集成电路计算机(1965-1970) ⚫ 超大规模集成电路计算机(1971-今) ⚫ 电子计算机按其性能分类: ⚫ 大中型计算机/巨型计算机(Mainframe Computer) ⚫ 小型计算机(Minicomputer) ⚫ 微型计算机(Microcomputer)
单片计算机( Single-Chip Microcomputer) ●微型计算机的核心:微处理器(中央处理器CPU) §12计算机中的数制 ●特点; 表示方法 相互间的转换 常用记数制 十进制符合人们的习惯 二进制便于物理实现 十六进制便于识别、书写 ●八进制 如何区分不同进位记数制的数字 在数字后面加一个字母进行区分: 二进制:数字后面加B,如1001B 八进制:数字后面加O,如10010 十进制:一般不加,如1001 十六进制:数字后面加H,如1001H 在明显可以区分其记数制的情况下,可以省略数字后面的字母 非十进制数到十进制数的转换 按相应进位计数制的权表达式展开,再按十进制求和。 例:1010B=(?)10 13FAH=(?)10 2.十进制到非十进制数的转换 十进制 进制的转换: 整数部分:除2取余 小数部分:乘2取整 ●十进制→十六进制的转换: 整数部分:除16取余; 小数部分:乘16取整。 以小数点为起点求得整数和小数的各个位 3.二进制与十六进制间的转换 用4位二进制数表示1位十六进制数 例:1010001001.10=P)H 0l0II0001001.1100 8 注意:位数不够时要补0 §1.3无符号二进制数的运算 无符号数 算术运算 有符号数 逻辑运算 无符号数的运算 算术运算 包括:加法运算减法运算乘法运算除法运算
⚫ 单片计算机(Single-Chip Microcomputer) ⚫ 微型计算机的核心:微处理器(中央处理器 CPU) ⚫ §1.2 计算机中的数制 ⚫ 了解 ⚫ 特点; ⚫ 表示方法; ⚫ 相互间的转换。 一、常用记数制 ⚫ 十进制——符合人们的习惯 ⚫ 二进制——便于物理实现 ⚫ 十六进制——便于识别、书写 ⚫ 八进制 如何区分不同进位记数制的数字 在数字后面加一个字母进行区分: ⚫ 二进制:数字后面加 B, 如 1001B ⚫ 八进制:数字后面加 O, 如 1001O ⚫ 十进制:一般不加, 如 1001 ⚫ 十六进制:数字后面加 H , 如 1001H ⚫ 在明显可以区分其记数制的情况下,可以省略数字后面的字母 ⚫ . 非十进制数到十进制数的转换 按相应进位计数制的权表达式展开,再按十进制求和。 例:10110010B = (?)10 13FAH = (?)10 2. 十进制到非十进制数的转换 ⚫ 十进制 → 二进制的转换: 整数部分:除 2 取余; 小数部分:乘 2 取整。 ⚫ 十进制 → 十六进制的转换: 整数部分:除 16 取余; 小数部分:乘 16 取整。 以小数点为起点求得整数和小数的各个位。 3. 二进制与十六进制间的转换 ⚫ 用 4 位二进制数表示 1 位十六进制数 例: 10110001001.110 = (?)H 0101 1000 1001.1100 5 8 9 . C 注意:位数不够时要补 0 §1.3 无符号二进制数的运算 无符号数 算术运算 有符号数 逻辑运算 一、无符号数的运算 算术运算 包括: 加法运算 减法运算 乘法运算 除法运算
规则 加法:1+1=0(有进位) 减法:0-1=1(有借位), 乘除法 个数乘以2相当于该数左移一位;除以2则相当于该数右移1位 00001011×0100=00101100E ●0000101l1÷0100=00000010B…11B 即:商=000000B 余数=0000001B 2.无符号数的表示范围 个n位的无符号二进制数X,其表示范围为 0≤X≤2n-1 若运算结果超出这个范围,则产生溢出。 (或者说运算结果超出n位,则产生溢出) 判别方法:运算时,当最高位向更高位有进位(或借位)时则产牛溢出。 第2章 微型计算机基础 主要内容: 微型机的构成及工作原理 8088/8086CPU的结构及工作原理 系统总线 §2.1微型机的基本结构 掌握: ●微机系统的基本组成 ●微型机的工作原理 ●微机8088的存储器组织 、微型计算机系统组成 微型计算机系统的三个层次 微处理器( Microprocessor 微型计算机( Microcomputer ●微微处理器简称CPU,是计算机的核心,主要包括: 运算器ALU 控制器CU 寄存器组 Registers ●CPU实现了运算功能和控制功能 型计算机系统( Microcomputer System) 硬件系统级—微型计算机 以微处理器为核心,配上只读存储器(ROM、读写存储器(RAM)、输入/ 输出(O)接口电路及系统总线等部件,就构成了微型计算机 ●将CPU、存储器、IO接口、总线等集成在一片超大规模集成电路芯片上, 称为单片微型计算机,简称单片机。 系统级:
1. 规则 ⚫ 加法:1+1=0(有进位), … ⚫ 减法:0-1=1(有借位), … ⚫ 乘除法:… 一个数乘以 2 相当于该数左移一位;除以 2 则相当于该数右移 1 位。 ⚫ 00001011×0100=00101100B ⚫ 00001011÷0100=00000010B…11B 即: 商=00000010B 余数=00000011B 2. 无符号数的表示范围 一个 n 位的无符号二进制数 X,其表示范围为 0 ≤ X ≤ 2 n -1 若运算结果超出这个范围,则产生溢出。 (或者说运算结果超出 n 位,则产生溢出) 判别方法:运算时,当最高位向更高位有进位(或 借位)时则产生溢出。 第 2 章 微型计算机基础 主要内容: ⚫ 微型机的构成及工作原理 ⚫ 8088/8086 CPU 的结构及工作原理 ⚫ 系统总线 §2.1 微型机的基本结构 掌握: ⚫ 微机系统的基本组成 ⚫ 微型机的工作原理 ⚫ 微机 8088 的存储器组织 一、微型计算机系统组成 微型计算机系统的三个层次 微处理器(Microprocessor) 微型计算机(Microcomputer) ⚫ 微微处理器简称 CPU,是计算机的核心,主要包括: 运算器 ALU 控制器 CU 寄存器组 Registers ⚫ CPU 实现了运算功能和控制功能 型计算机系统(Microcomputer System) 硬件系统级——微型计算机 ⚫ 以微处理器为核心,配上只读存储器(ROM)、读写存储器(RAM)、输入/ 输出(I/O)接口电路及系统总线等部件,就构成了微型计算机。 ⚫ 将 CPU、存储器、I/O 接口、总线等集成在一片超大规模集成电路芯片上, 称为单片微型计算机,简称单片机。 系统级:
以微型计算机为中心,配以相应的外围设备以及控制微型计算机工作的软 件,就构成了完整的微型计算机系统 微型计算机如果不配有软件,通常称为裸机 软件分为系统软件和应用软件两大类 主机硬件系统 计算机的控制中心,提供运算、判断能力 构成:ALU、CU、 Registers(p29) 例: Intel8088/8086、PIIl、P4、 Celeron AMDK7( Athlon、 Duron) CPU的位数:4位、8位、16位、32位、64位 是指一次能处理的数据的位数 主机硬件系统——存储器 存放程序和数据的记忆装置 用途:存放程序和要操作的各类信息(数据、文字、图像 内存:ROM、RAM 特点:随机存取,速度快,容量小 外存:磁盘、光盘、半导体盘、 特点:顺序存取块存取,速度慢,容量大 有关内存储器的几个概念 内存单元的地址和内容 内存容量 内存的操作 内存的分类 内存单元的地址和内容 内存包含有很多存储单元(每个内存单元包含8bit),为区分不同的内存单元, 对计算机中的每个内存单元进行编号,内存单元的编号就称为内存单元的地址。 内存容量 即内存单元的个数,以字节为单位。 ●注意:内存空间与内存容量的区别 内存容量:实际配置的内存大小。 例:某微机配置2条128MB的 SDRAM内存条,其内存容量为256MB内存空 间:又称为存储空间、寻址范围,是指微机的寻址能力,与CPU的地址总线宽 度有关 内存操作 读:将内存单元的内容取入CPU,原单元内容不改变; 写:CPU将信息放入内存单元,单元中原内容被覆盖 刷新:对CPU透明,仅动态存储器有此操作 内存的读写的步骤为 CPU把要读写的内存单元的地址放到AB上 若是写操作,CPU紧接着把要写入的数据放到DB上 CPU发出读写命令 数据被写入指定的单元或从指定的单元读出到DB 若是读操作,CPU紧接着从DB上取回数据
⚫ 以微型计算机为中心,配以相应的外围设备以及控制微型计算机工作的软 件,就构成了完整的微型计算机系统。 ⚫ 微型计算机如果不配有软件,通常称为裸机 ⚫ 软件分为系统软件和应用软件两大类 ⚫ 主机硬件系统——CPU ⚫ 计算机的控制中心,提供运算、判断能力 ⚫ 构成:ALU、CU、Registers(p29) 例:Intel 8088/8086、PIII、P4、Celeron AMD K7(Athlon、Duron) CPU 的位数:4 位、8 位、16 位、32 位、64 位 是指一次能处理的数据的位数 主机硬件系统——存储器 ⚫ 存放程序和数据的记忆装置 ⚫ 用途:存放程序和要操作的各类信息(数据、文字、图像、。。。) ⚫ 内存:ROM、RAM 特点:随机存取,速度快,容量小 ⚫ 外存:磁盘、光盘、半导体盘、… 特点:顺序存取/块存取,速度慢,容量大 有关内存储器的几个概念 ⚫ 内存单元的地址和内容 ⚫ 内存容量 ⚫ 内存的操作 ⚫ 内存的分类 内存单元的地址和内容 内存包含有很多存储单元(每个内存单元包含 8bit),为区分不同的内存单元, 对计算机中的每个内存单元进行编号,内存单元的编号就称为内存单元的地址。 内存容量: ⚫ 即内存单元的个数,以字节为单位。 ⚫ 注意:内存空间与内存容量的区别 内存容量:实际配置的内存大小。 例:某微机配置 2 条 128MB 的 SDRAM 内存条,其内存容量为 256MB 内存空 间:又称为存储空间、寻址范围,是指微机的寻址能力,与 CPU 的地址总线宽 度有关 内存操作 读:将内存单元的内容取入 CPU,原单元内容不改变; 写:CPU 将信息放入内存单元,单元中原内容被覆盖; 刷新:对 CPU 透明,仅动态存储器有此操作 内存的读写的步骤为: CPU 把要读写的内存单元的地址放到 AB 上 若是写操作, CPU 紧接着把要写入的数据放到 DB 上 CPU 发出读写命令 数据被写入指定的单元或从指定的单元读出到 DB 若是读操作, CPU 紧接着从 DB 上取回数据
内存储器的分类 读写存储器(RAM) 可读可写 易失性,临时存放程序和数据 只读存储器(ROM) 工作时只能读 非易失性,永久或半永久性存放信息 ●接口的功能 提供驱动外设的电压或电流 匹配计算机与外设之间的信号电平、速度、信号类型、数据格式等; 缓存发给外设的数据、控制命令和外设提供的运行状态信息; DMA控制和中断控制。 连接多个功能部件的一组公共信号线 ●地址总线AB:用来传送CPU输出的地址信号,确定被访问的存储 单元、IO端口。地址线的根数决定了CPU的寻址范围。 CPU的寻址范围=2n,n地址线根数 数据总线DB:在CPU与存储器、IO接口之间数据传送的公共通 路。数据总线的条数决定CPU一次最多可以传送的数据宽度 控制总线CB:用来传送各种控制信号 央处理器 们主板 光驱 电源箱 内存条 8088CPU的两种工作模式 8088可工作于两种模式: 最小模式和最大模式 最小模式为单处理机模式,控制信号较少,一般可不必外接总线控制器 最大模式为多处理机模式,控制信号较多,CPU必须通过总线控制器与 总线相连 引脚定义的方法可大致分为: 每个引脚只传送一种信息(RD等); 引脚电平的高低不同的信号(IOM等) CPU工作于不同方式有不同的名称和定义( WRLOCK等)
内存储器的分类 ⚫ 读写存储器(RAM) ◼ 可读可写 ◼ 易失性,临时存放程序和数据 ⚫ 只读存储器(ROM) ◼ 工作时只能读 ◼ 非易失性,永久或半永久性存放信息 ⚫ 接口的功能 ⚫ 提供驱动外设的电压或电流; ⚫ 匹配计算机与外设之间的信号电平、速度、信号类型、数据格式等; ⚫ 缓存发给外设的数据、控制命令和外设提供的运行状态信息; ⚫ DMA 控制和中断控制。 ⚫ 连接多个功能部件的一组公共信号线 ⚫ 地址总线 AB:用来传送 CPU 输出的地址信号,确定被访问的存储 单元、I/O 端口。地址线的根数决定了 CPU 的寻址范围。 CPU 的寻址范围 = 2n, n-地址线根数 ⚫ 数据总线 DB:在 CPU 与存储器、I/O 接口之间数据传送的公共通 路。数据总线的条数决定 CPU 一次最多可以传送的数据宽度。 ⚫ 控制总线 CB:用来传送各种控制信号 8088CPU 的两种工作模式 ⚫ 8088 可工作于两种模式: ⚫ 最小模式和最大模式 ⚫ 最小模式为单处理机模式,控制信号较少,一般可不必外接总线控制器。 ⚫ 最大模式为多处理机模式,控制信号较多,CPU 必须通过总线控制器与 总线相连。 引脚定义的方法可大致分为:: ⚫ 每个引脚只传送一种信息(RD 等); ⚫ 引脚电平的高低不同的信号(IO/M 等); ⚫ CPU 工作于不同方式有不同的名称和定义(WR/LOCK 等);
分时复用引脚(AD7~AD0等) 引脚的输入和输出分别传送不同的信息(RQGT等)。 8088是工作在最小还是最大模式由MNMX端状态决定:MNMX=0时工 作于最大模式,反之工作于最小模式。 数据信号线ODB)与地址信号线(AB) AD7~AD0:三态,地址数据复用线。ALE有效时为地 址的低8位。地址信号有效时为输出,传送 数据信号时为双向。 A19~A16:三态,输出。高4位地址信号,与状态信号 S6-S3分时复用。 Al5~A8:三态,输出。输出8位地址信号。 WR:三态,输出。写命令信号 RD:三态,输出。读命令信号 IOM:三态,输出。指出当前访问的是存储器还是I/O接 口。高:I/O接口,低:内存 DEN:三态,输出。低电平时,表示DB上的数据有效 RESET:输入,为高时,CPU执行复位; ALE:三态,输出。高:AB地址有效 DIR:三态,输出。数据传送方向,高:CPU输出,低:CPU输入 算术逻辑单元(运算器) 8个通用寄存器 1个标志寄存器 EU部分控制电路 功能:执行指令 从指令队列中取指令代码 译码 在ALU中完成数据的运算 运算结果 的特征保存在标志寄存器 FLAGS中 ●功能: 从内存中取指令送入指令预取队列 负责与内存或输入输出接口之间的数据传送 ●在执行转移程序时,BIU使指令预取队列复位,从指定的新地址取指令, 并立即传给执行单元执 含14个16位寄存器,按功能可分为三类 8个通用寄存器 4个段寄存器 个控制寄存器 数据寄存器(AX,BX,CX,DX) 地址指针寄存器(SP,BP) 变址寄存器(SI,DI) 8088含4个16位数据寄存器,它们又可分为8个8位寄存器,即: ●AX AH, AL ●BX bH, BL CX CH, CL
⚫ 分时复用引脚(AD7 ~ AD0 等) ; ⚫ 引脚的输入和输出分别传送不同的信息(RQ/GT 等)。 ➢ 8088 是工作在最小还是最大模式由 MN/MX 端状态决定:MN/MX=0 时工 作于最大模式,反之工作于最小模式。 数据信号线(DB)与地址信号线(AB): ⚫ AD7~AD0:三态,地址/数据复用线。ALE 有效时为地 址的低 8 位。地址信号有效时为输出,传送 数据信号时为双向。 ⚫ A19 ~ A16 : 三 态 , 输 出 。 高 4 位 地 址 信 号 , 与 状 态 信 号 S6-S3 分时复用。 ⚫ A15~A8 :三态,输出。输出 8 位地址信号。 ⚫ WR: 三态,输出。写命令信号; ⚫ RD: 三态,输出。读命令信号; ⚫ IO/M:三态,输出。指出当前访问的是存储器还是 I/O 接 口。高:I/O 接口,低:内存 ⚫ DEN:三态,输出。低电平时,表示 DB 上的数据有效; ⚫ RESET:输入,为高时,CPU 执行复位; ⚫ ALE: 三态,输出。高:AB 地址有效; ⚫ DT/ R:三态,输出。数据传送方向,高:CPU 输出,低:CPU 输入 算术逻辑单元(运算器) 8 个通用寄存器 1 个标志寄存器 EU 部分控制电路 ⚫ 功能: 执行指令 从指令队列中取指令代码 译码 在 ALU 中完成数据的运算 运算结果 的特征保存在标志寄存器 FLAGS 中。 ⚫ 功能: ⚫ 从内存中取指令送入指令预取队列 ⚫ 负责与内存或输入/输出接口之间的数据传送 ⚫ 在执行转移程序时,BIU 使指令预取队列复位,从指定的新地址取指令, 并立即传给执行单元执行。 ⚫ 含 14 个 16 位寄存器,按功能可分为三类 8 个通用寄存器 4 个段寄存器 2 个控制寄存器 数据寄存器(AX,BX,CX,DX) 地址指针寄存器(SP,BP) 变址寄存器(SI,DI) ⚫ 8088 含 4 个 16 位数据寄存器,它们又可分为 8 个 8 位寄存器,即: ⚫ AX AH,AL ⚫ BX BH,BL ⚫ CX CH,CL
●DX DH, DL 常用来存放参与运算的操作数或运算结果 ●AX:累加器。多用于存放中间运算结果。所有 I/O指令必须都通过AX与接口传送信息 BX:基址寄存器。在间接寻址中用于存放基地址: CX:计数寄存器。用于在循环或串操作指令中存 放循环次数或重复次数 ●DX:数据寄存器。在32位乘除法运算时,存放 高16位数;在间接寻址的IO指令中存放 I/O端口地址。 ●SP:堆栈指针寄存器,其内容为栈顶的 偏移地址; BP:基址指针寄存器,常用于在访问内 存时存放内存单元的偏移地址。 作为通用寄存器,二者均可用于存放数据; 作为基址寄存器,BX通常用于寻址数据段;BP则通常用于寻址堆栈段。 BX一般与DS或ES搭配使用 SI:源变址寄存器 DI:目标变址寄存器 变址寄存器常用于指令的间接寻址或变址寻址。特别是在串操作指令中, 用SI存放源操作数的偏移地址,而用DI存放目标操作数的偏移地址。 于存放逻辑段的段基地址(逻辑段的概念后面将要介绍) CS:代码段寄存器 代码段用于存放指令代码 DS:数据段寄存器 ES:附加段寄存器 数据段和附加段用来存放操作数 SS:堆栈段寄存器 堆栈段用于存放返回地址,保存寄存器内容, 传递参数 ●IP:指令指针寄存器,其内容为下一条 要执行的指令的偏移地址 ● FLAGS:标志寄存器 ●状态标志:存放运算结果的特征 ●控制标志:控制某些特殊操作 6个状态标志位(CF,SF,AF,PF,OF,ZF) 3个控制标志位(F,TF,DF 8088:20根地址线,可寻址220(1MB)个存储单元 CPU送到AB上的20位的地址称为物理地址 内存中一个按FLLO方式操作的特殊区域。 每次压栈和退栈均以WORD为单位。 存放堆栈段地址,SP存放段内偏移,SSSP构成了堆栈指针。 堆栈用于存放返回地址、过程参数或需要保护的数据。 常用于响应中断或子程序调用
⚫ DX DH,DL 常用来存放参与运算的操作数或运算结果 ⚫ AX:累加器。多用于存放中间运算结果。所有 I/O 指令必须都通过 AX 与接口传送信息; ⚫ BX:基址寄存器。在间接寻址中用于存放基地址; ⚫ CX:计数寄存器。用于在循环或串操作指令中存 放循环次数或重复次数; ⚫ DX:数据寄存器。在 32 位乘除法运算时,存放 高 16 位数;在间接寻址的 I/O 指令中存放 I/O 端口地址。 ⚫ SP:堆栈指针寄存器,其内容为栈顶的 偏移地址; ⚫ BP:基址指针寄存器,常用于在访问内 存时存放内存单元的偏移地址。 ⚫ 作为通用寄存器,二者均可用于存放数据; ⚫ 作为基址寄存器,BX 通常用于寻址数据段;BP 则通常用于寻址堆栈段。 ⚫ BX 一般与 DS 或 ES 搭配使用 ⚫ SI:源变址寄存器 ⚫ DI:目标变址寄存器 ⚫ 变址寄存器常用于指令的间接寻址或变址寻址。特别是在串操作指令中, 用 SI 存放源操作数的偏移地址,而用 DI 存放目标操作数的偏移地址。 于存放逻辑段的段基地址(逻辑段的概念后面将要介绍) CS:代码段寄存器 代码段用于存放指令代码 DS:数据段寄存器 ES:附加段寄存器 数据段和附加段用来存放操作数 SS:堆栈段寄存器 堆栈段用于存放返回地址,保存寄存器内容, 传递参数 ⚫ IP:指令指针寄存器,其内容为下一条 要执行的指令的偏移地址 ⚫ FLAGS:标志寄存器 ⚫ 状态标志:存放运算结果的特征 ⚫ 控制标志:控制某些特殊操作 6 个状态标志位(CF,SF,AF,PF,OF,ZF) 3 个控制标志位(IF,TF,DF) ⚫ 8088:20 根地址线,可寻址 220(1MB)个存储单元 ⚫ CPU 送到 AB 上的 20 位的地址称为物理地址 ⚫ 内存中一个按 FILO 方式操作的特殊区域。 ⚫ 每次压栈和退栈均以 WORD 为单位。 ⚫ SS 存放堆栈段地址,SP 存放段内偏移,SS:SP 构成了堆栈指针。 ⚫ 堆栈用于存放返回地址、过程参数或需要保护的数据。 ⚫ 常用于响应中断或子程序调用
控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令 (1)无条件转移指令-JMP 本指令无条件转移到指定的目标地址以执行从该地址开始的程序段。根据设置 CS、IP的方法,JMP指令分成4种情况。 ①段内直接转移: JMP disp 指令中给出的8/16位的位移量加到IP。CS保持不变。 ②段内间接转移: JMP reg/mem reg/mem中的16位偏移地址送IP。CS保持不变。 ③段间直接转移 JMP segment offset 指令中给出的16位的段和16位的偏移地址送到CS和IP。 ④段间间接转移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP。 转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于IP 的位移量: 位移量转移范围 汇编语言中格式 8位-128~+127 JMP SHORTOPRD 16 6Z-32768+32767 JMP NEAR PTR OPRD 例:JMP0120H 直接转向0120H JMP SHORTLP 转向LP JMP NEAR PTR BBB:转向BBB 由于是段内转移,故转移后CS内容保持不变 转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于IP 的位移量: 位移量转移范围 汇编语言中格式 8位-128~+127 JMP SHORTOPRD 1667 -32768+32767 JMP NEAR PTR OPRD 例:JMP0120H 直接转向0120H JMP SHORTLP ;转向LP JMP NEAR PTR BBB 转向BBB 由于是段内转移故转移后CS内容保持不变 转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如: MP DWORD PTRISI 设指令执行前DS)4000H,(SI)=1212H (41212H=1000H,(41214H)4AO0H 则指令执行后(P=1000HCS)=4AO0H 于是转到4B000H处开始执行指令 例中的 DWORD PTR表示转移地址是一个双字 例2:在8000H开始的长度为1000字节的字符串中查找S,若找到,把其 偏移地址记录在ADDR中,否则ADDR单元置为 OFFFFH。 MOV DI 8000H
控制转移指令分为: – 转移指令 – 循环控制指令 – 调用和返回指令 – 中断指令 (1) 无条件转移指令 - JMP 本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置 CS、IP 的方法,JMP 指令分成 4 种情况。 ① 段内直接转移: JMP disp 指令中给出的 8/16 位的位移量加到 IP。CS 保持不变。 ② 段内间接转移: JMP reg/mem reg/mem 中的 16 位偏移地址送 IP。CS 保持不变。 ③ 段间直接转移 JMP segment:offset 指令中给出的 16 位的段和 16 位的偏移地址送到 CS 和 IP。 ④ 段间间接转移 JMP mem32 mem32 中的 16 位的段和 16 位的偏移地址送到 CS 和 IP。 转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于 IP 的位移量: 位移量 转移范围 汇编语言中格式 8 位 -128~+127 JMP SHORT OPRD 16 位 -32768~+32767 JMP NEAR PTR OPRD 例:JMP 0120H ;直接转向 0120H JMP SHORT LP ;转向 LP JMP NEAR PTR BBB ;转向 BBB 由于是段内转移,故转移后 CS 内容保持不变 转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于 IP 的位移量: 位移量 转移范围 汇编语言中格式 8 位 -128~+127 JMP SHORT OPRD 16 位 -32768~+32767 JMP NEAR PTR OPRD 例:JMP 0120H ;直接转向 0120H JMP SHORT LP ;转向 LP JMP NEAR PTR BBB ;转向 BBB 由于是段内转移,故转移后 CS 内容保持不变 转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如: JMP DWORD PTR[SI] 设指令执行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到 4B000H 处开始执行指令。 例中的 DWORD PTR 表示转移地址是一个双字。 例 2:在 8000H 开始的长度为 1000 字节的字符串中 查找’S’,若找到,把其 偏移地址记录在 ADDR 中,否则 ADDR 单元置为 0FFFFH。 MOV DI, 8000H
MOV CX. 1000 MOV ADDR, OFFFFH GOON: SCASB LOOPNZ GOON JNZ DONE DEC MOV ADDR DI dONE HLT 子程序的段地址和偏移地址直接由CALL指令给出。 格式: CALLfar pr0 c far proc为远过程的地址 指令的操作为 口CS内容压栈 口IP内容压栈 口CS←段地址 口IP←偏移地址 例:CALL2000H:100H CALL TIMER TMER为远过程 子程序的段和偏移地址为存储器的连续4个单元中的内容。 格式: CALL men32 指令的操作为 SP←(SP}2 (SP)SP)←(CS)CS压栈 CS←mem32+2) SP←(SP}2 (SP)1SP)←(IP)IP压栈 IP←mem32 例: CALL DWORD PTRD 调用地址在[DI,[DH+1,pDI}+2,[DH+3四个存储单元中。低字内容为偏移地 址高字内容为段地址。 段内返回指令RET的操作为: 恢复子程序执行前IP的内容 段间返回指令RET的操作为: 恢复子程序执行前IP和CS的内容 另有一种带立即数的返回指令“RETn”,其中n为偶数,表示从栈顶弹出地 址后另外丢弃的字节数 例:RET4;返回后再丢弃栈顶的4个字节 8086/8088CPU在程序中允许安排一条中断指令来引起一个中断过程这种中断 叫内部中断,或叫软中断。被中断的指令地址处称为“断点”。有关中断的详细情 况将在第六章讨论 中断指令共有三条 (1)NTn执行类型n的中断服务程序,N=0~255
MOV CX, 1000 MOV AL, ’S’ MOV ADDR, 0FFFFH GOON: SCASB LOOPNZ GOON JNZ DONE DEC DI MOV ADDR,DI DONE: HLT 子程序的段地址和偏移地址直接由 CALL 指令给出。 格式:CALL far_proc ;far_proc 为远过程的地址 指令的操作为: CS 内容压栈 IP 内容压栈 CS←段地址 IP←偏移地址 例:CALL 2000H:1000H CALL TIMER ;TIMER 为远过程 子程序的段和偏移地址为存储器的连续 4 个单元中的内容。 格式:CALL mem32 指令的操作为: SP←(SP)-2 ((SP)+1,(SP))←(CS) ;CS 压栈 CS←(mem32+2) SP←(SP)-2 ((SP)+1,(SP))←(IP) ;IP 压栈 IP←(mem32) 例:CALL DWORD PTR[DI] 调用地址在[DI],[DI]+1,[DI]+2,[DI]+3 四个存储单元中。低字内容为偏移地 址,高字内容为段地址。 段内返回指令 RET 的操作为: 恢复子程序执行前 IP 的内容。 段间返回指令 RET 的操作为: 恢复子程序执行前 IP 和 CS 的内容。 另有一种带立即数的返回指令 “ RET n ”,其中 n 为偶数,表示从栈顶弹出地 址后另外丢弃的字节数。 例:RET 4 ;返回后再丢弃栈顶的 4 个字节 8086/8088 CPU 在程序中允许安排一条中断指令来引起一个中断过程,这种中断 叫内部中断,或叫软中断。被中断的指令地址处称为“断点”。有关中断的详细情 况将在第六章讨论。 中断指令共有三条: (1)INT n 执行类型 n 的中断服务程序,N=0~255
(2NTO执行溢出中断的中断服务程序 (3ⅠRET从中断服务程序返回调用程序 1标志操作指令 用来设置标志位的状态 (1)CF设置指令 CLC0→CF STC1→CF CMC CF变反 (2)DF设置指令 CLD0→DF(串操作的指针移动方向从低到高) STD1→DF(串操作的指针移动方向从高到低) (3)IF设置指令 0→IF(禁止ⅠNTR中断) STI 1→IF(开放INTR中断) 汇编语言程序设计 操作数可能放在存储器中这就涉及操作数的地址。程序中遇到转移指令或调用 指令,也需要知道转移地址,若采用具体地址就很不方便,一旦有错,改动也很麻 烦。于是人们采用标号或符号来代替地址例: LPI: mov ax, VAR 汇编语言——指令助记符符号地址,标号,伪指令等语言元素的集合以及这 些元素使用的规则 用汇编语言编写的程序叫汇编语言源程序 个基本的汇编语言程序框架如下: stack SEGMENT para ' stack DB100DUP(‘sack) stack ENDS SEGMENT 数据、变量在此定义 ENDS code SEGMENt ASSUME CS: code. DS: data. ES: data start Mov AX. data MOV DS. AX MOV ES. AX 此处加入你自己的程序段 MOV AL. 40 INT code ENds end start
(2)INTO 执行溢出中断的中断服务程序 (3)IRET 从中断服务程序返回调用程序 1.标志操作指令 用来设置标志位的状态。 (1)CF 设置指令 CLC 0→CF STC 1→CF CMC CF 变反 (2)DF 设置指令 CLD 0→DF (串操作的指针移动方向从低到高) STD 1→DF (串操作的指针移动方向从高到低) (3)IF 设置指令 CLI 0→IF (禁止 INTR 中断) STI 1→IF (开放 INTR 中断) 汇编语言程序设计 操作数可能放在存储器中,这就涉及操作数的地址。程序中遇到转移指令或调用 指令,也需要知道转移地址,若采用具体地址就很不方便,一旦有错,改动也很麻 烦。于是人们采用标号或符号来代替地址,例: LP1: mov ax,VAR … loop LP1 汇编语言——指令助记符,符号地址,标号,伪指令等语言元素的集合以及这 些元素使用的规则。 用汇编语言编写的程序叫汇编语言源程序。 一个基本的汇编语言程序框架如下: stack SEGMENT PARA ‘stack‘ DB 100 DUP(‘stack’) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data start: MOV AX, data MOV DS, AX MOV ES, AX MOV AL, 4CH INT 21H code ENDS END start