第三章 指令系统及其寻址方式 3.1 寻址方式 3.2 指令格式 3.3 指令系统.

Slides:



Advertisements
Similar presentations
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
Advertisements

汇编语言程序设计 吴 向 军 中山大学计算机科学系
x86/Pentium指令系统 x86寻址方式 1.比例变址寻址方式 (Scaled Indexed Addressing)
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
§1 指令的构成和操作数的类型 一、指令构成 一条指令由操怍码字段和操作数字段构成。 1、操作码字段 操作码字段表明指令执行何种性质的操作。
第四章 汇编语言 程序设计 任课教师:王晓甜
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
输入/输出及接口 输入/输出的传送方式 中断技术 80x86/Pentium中断系统 8259A可编程中断控制器 中断程序设计
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
第3章 80x86汇编语言程序设计(下).
第3章 80x86汇编语言程序设计(中) 时间不够的情况下只讲16位汇编.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
微机原理与接口技术 第3章 8086/8088指令系统 黄强 深圳大学 信息工程学院.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日.
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
Assembly Language Programming
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第8章 寻址方式与指令系统.
第二部分 PC 微机异步通信适配器的分析和使用 一、PC中的UART 1.INS PC16450/PC16550
第4章 汇编语言程序设计 4.1 程序设计语言概述 4.2 汇编语言的程序结构与语句格式 4.3 汇编语言的伪指令
基本的”防”黑客技术 Basic” ” Hacker Technique
微机原理及应用 主讲:郑海春.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
1.3 微型计算机的结构和工作原理.
條件處理.
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
3.4.5 控制转移指令(Control transfer instructions) (一)、控制转移指令概述
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
3.4.2 算术运算指令(Arithmetic) 算术运算指令内容: 8086/8088提供加、减、乘、除等六种基本算术操作
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
第八章 中断系统.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第3章 80x86的指令系统和寻址方式 § x86的寻址方式 § x86的指令系统
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
Presentation transcript:

第三章 指令系统及其寻址方式 3.1 寻址方式 3.2 指令格式 3.3 指令系统

3.1 寻址方式 3.1.1 指令的书写格式 指令有两种书写格式: * 机器指令:由一串二进制数描述; * 符号指令:用英文字母缩写词描述。 3.1 寻址方式 3.1.1 指令的书写格式 指令有两种书写格式: * 机器指令:由一串二进制数描述; * 符号指令:用英文字母缩写词描述。 符号指令的书写格式如下: 标号: 操作助记符 [目的操作数][,源操作数];注释

几点说明: 标号—表示某一条指令所在存储单元的首址。 标号应由字母打头,后跟字母、数字及特殊字符均可,但不能用关键字。 标号的用法: 1、 标号一般放在子程序(子过程)的第一条指令的开头; 2、标号一般放在转移指令要转去的目的地的 第一条指令的开头。 3、标号一般放在其他符号定义的前面。

操作数 —— 有源操作数和目的操作数,他们之 间用“,” 分隔。 操作数也可有可无。 MOV; ADD; SUB; END。 指令助记符 (操作助记符): 操作数 —— 有源操作数和目的操作数,他们之 间用“,” 分隔。 操作数也可有可无。

一般在指令中包含有操作码和操作数,怎样找到指令中的操作数和操作数所在的地址,这就是寻址方式。 3.1.2 数据寻址方式 一般在指令中包含有操作码和操作数,怎样找到指令中的操作数和操作数所在的地址,这就是寻址方式。 在微机中的操作数有三种存放方式: (1)立即数——包含在本条指令中,即: 存放在代码段中; (2) 操作数存放在CPU的某个寄存器中; (3) 操作数存放在存储器的数据段或堆栈段或附加数据段中。

所以,总的来说,数据寻址方式分为三种: 立即寻址 寄存器寻址 存储器寻址

一、立即寻址 如: MOV EAX,80000000H MOV BX,6688H MOV AX,1234H 立即数只能作为源操作数 操作数直接包含在代码段的指令中。 如: MOV EAX,80000000H MOV BX,6688H MOV AX,1234H 立即数只能作为源操作数 立即寻址主要用来给通用寄存器或存储器 赋值 不允许给段寄存器直接赋值

例3.1 立即寻址

立即寻址过程示意

立即寻址动态示意

16位寄存器:AX、BX、CX、DX、SP、BP、SI、 DI、CS、DS、SS、ES、FS、GS 8 位寄存器:AH、AL、BH、BL、 二、寄存器寻址 操作数在寄存器中。 32位寄存器:EAX、EBX、ECX、EDX、 ESP、EBP、 ESI、EDI 16位寄存器:AX、BX、CX、DX、SP、BP、SI、 DI、CS、DS、SS、ES、FS、GS 8 位寄存器:AH、AL、BH、BL、 CH、CL、DH、DL 如: MOV AX,BX MOV EDI,ESI MOV AL,CL

例3.2 寄存器寻址

EA的计算方法根据采用的寻址方式不同而不 同。 三、存储器寻址 操作数在存储器中,其地址由指令以某种 方式指出。 (一)16位指令模式下: 物理地址=段基址× 10H+ 有效地址EA (二)32位指令模式下: 物理地址=段基址+ 有效地址EA EA的计算方法根据采用的寻址方式不同而不 同。

段基址×10H+基址+变址+偏移量 偏移量:8位或16位 则以DS寄存器内容为段基址; 如果有效地址在BX,SI或DI中, (一)16位指令模式下的存储器寻址 16位指令模式寻址结构由4部分组成: 段基址×10H+基址+变址+偏移量 基址:BX、BP , 变址:SI、DI , 偏移量:8位或16位 如果有效地址在BX,SI或DI中, 则以DS寄存器内容为段基址; 如果有效地址在BP中,则以SS段寄存器 的内容为段基址。

如果使用段超越(CS:ES:DS:SS:), 前缀操作数可以放在冒号前指定的段。 例如:MOV ES:[DI],AL MOV ES:2000H, AL 其中ES为前缀字节,产生目标码时,它将放在MOV指令的前面, 即: 26 ES: 8805 MOV[DI],AL 亦即:268805 MOV ES:[DI],AL

操作数所在的有效地址EA直接由指令指出。 例2 MOV BL,BLOCK 例3 MOV BX,DATA1 16位指令模式寻址方式: 直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址 1、直接寻址 操作数在存储器单元中。 操作数所在的有效地址EA直接由指令指出。 例1 MOV AX,[3000H] 例2 MOV BL,BLOCK 例3 MOV BX,DATA1

例3.3 直接寻址

直接寻址过程示意

直接寻址动态示意

操作数的有效地址在BX、BP或SI、DI中,EA可表示为 例1 MOV AX,[BX] 例2 MOV DL,[SI] 2、寄存器间接寻址 操作数的有效地址在BX、BP或SI、DI中,EA可表示为 例1 MOV AX,[BX] 例2 MOV DL,[SI]

例3.4 寄存器间接寻址

寄存器间接寻址过程示意

寄存器间接寻址动态示意

操作数在存储单元中,其有效地址EA可表示为 3、寄存器相对寻址 操作数在存储单元中,其有效地址EA可表示为 例1 : MOV AL,[BX+4000H] 亦可写成: MOV AL,4000H[BX] 例2 : MOV AX,[BP+2000H]

例3.6 寄存器相对寻址

寄存器相对寻址过程示意

寄存器相对寻址动态示意

操作数在存储单元中,其有效地址EA可表示为 4、基址变址寻址 操作数在存储单元中,其有效地址EA可表示为 例1 MOV AX,[BX+SI] 或写成: MOV AX,[BX][SI] 例2 MOV AX,[BX+DI] 例3 MOV AX,[BP+SI] 例4 MOV AX,[BP+DI]

例3.7 基址变址寻址

基址变址寻址过程示意

基址变址寻址动态示意

操作数在存储单元中,其有效地址EA可表示为 5、相对基址变址寻址 操作数在存储单元中,其有效地址EA可表示为 例1: MOV AX,[BX+SI+1500H] 或写成 : MOV AX,1500[BX][SI] 例2 : MOV AX,[BP+DI+1000H]

例3.8 相对基址变址寻址

相对基址变址寻址过程示意

相对基址变址寻址动态示意

EBP时,默认段寄存器SS存放段选择符,否则, 默认DS存放段选择符。也可使用段超越前缀来 指定。 比例因子为1,2,4,8。偏移量为8位 (二) 32位指令模式下的存储器寻址 32位指令模式寻址结构由5部分组成: 段址+基址+变址﹡比例因子+偏移量 其中基址寄存器或变址寄存器可以是除ESP 以外的任何32位通用寄存器。当基址寄存器为 EBP时,默认段寄存器SS存放段选择符,否则, 默认DS存放段选择符。也可使用段超越前缀来 指定。 比例因子为1,2,4,8。偏移量为8位 或32位。

当偏移量为32位时,段内可寻址范围为: -231~+231-1字节空间。 32位寻址方式如下图: × + 比例因子 1,2,4,8 描述符 选择符 基 址 寄 存 器 × 偏 移 量 CS SS DS ES FS GS 物理基址 段限 访问权限 变址寄存器 + 线性 地址 +

1、直接寻址有两种书写格式 (1)、指令中直接写出操作数所在存储单元的32位有效地址(EA),注意:段超越前缀不能省略,否则,会出现寻址错误。 如:MOV EAX,DS:[11224488H] (2)、用变量名代表存储单元的有效地址 如:把数据段中以BUF命名的双字单元的内容送到EAX。 MOV EAX,DS:BUF MOV EAX,BUF

2、寄存器间接寻址,操作数的有效地址由EA(EAX、EBX、ECX、EDX、ESI、EDI、EBP)指定。 如:MOV EBX,UBF MOV EAX,[EBX] 3、相对基址寻址,操作数的有效地址由EA(EAX、EBX、ECX、EDX、ESI、EDI、EBP)+ 偏移量(8、32)指定。 如:MOV EAX,NUM ;NBM有效地址 MOV EDX,[EAX+80H]

4、变址寻址,有两种格式 1、有比例因子的变址寻址 如:MOV EBX,[ESI×4+80H] 2、无比例因子的变址寻址 MOV EBX,[ESI+80H] 5、基址加变址寻址,有两种格式 (1)、有比例因子的基址加变址寻址 如:MOV EAX,[EBP+ESI×4+80H]

(2)、无比例因子的基址加变址寻址 如:MOV EAX,[EBP+ESI+80H]

3.1.2 程序地址寻址方式 带符号的相对偏移量,程序目标地址为当 前IP值加上相对偏移量作为偏移地址。 相对寻址为段内寻址,指令中给出 3.1.2 程序地址寻址方式 一、相对寻址 相对寻址为段内寻址,指令中给出 带符号的相对偏移量,程序目标地址为当 前IP值加上相对偏移量作为偏移地址。 类 型 指 令 相对偏移量 转移范围 SHORT JMP 1 -128~127 NEAR(16位) JMP/CALL 2 -32768~32767 NEAR(32位) 4 -2147483648~ ﹢2147483647

地址 机器码 助记符 例如: 1D24:0100 8BF7 MOV DI,SI 1D24:0102 EB02 JMP SHORT NEXT 地址 机器码 助记符 1D24:0100 8BF7 MOV DI,SI 1D24:0102 EB02 JMP SHORT NEXT 1D24:0104 8ACA MOV CL,DL 1D24:0106 8AC3 NEXT: MOV AL,BL

二、 直接寻址 直接寻址是指指令中直接给出转移指令的目标地址。在段间转移中,指令中给出目标段地址或代码段的段描述符。 例如: ·COD CODE1 ;代码段定义 地址 机器码 助记符 1D24:0010 8BF7 MOV DI,SI 1D24:0012 EA0A00251D JMP FAR PTR NEXT ·CODE CODE2 ;代码段定义 1D25:000A 8ACA NEXT:MOV CL,DL

BUF——双字类型。在BUF所指的存储单元中存放着CODE2段中标号NEXT的段基址和偏移地址(1D25:0008)。 三、间接寻址 间接寻址 分段内和段间间接寻址,指令中以间接方式给出转移指令的目标地址,通常存放在数据段。采用(E)BP寻址,指令目标地址放在堆栈段。使用段超越前缀,也可以存放在其他段。 下面的例子为段间间接转移 指令。 BX中存放的是符号地址BUF的偏移地址 BUF——双字类型。在BUF所指的存储单元中存放着CODE2段中标号NEXT的段基址和偏移地址(1D25:0008)。

·CODE CODE1 ·CODE CODE2 1D26:0000 0800251D BUF DD NEXT 地址 操作数 ·DATA 1D26:0000 0800251D BUF DD NEXT ·CODE CODE1 地址 机器码 1D24:0010 BB0000 MOV BX,OFFSET DATA1 1D24:0013 FF2F JNP FAR PTR [BX] ; ·CODE CODE2 1D25:0008 8ACA NEXT:MOV CL,DL EXIT

CS:1D24 1D24:0010 BB 00 FF 2F 8A CA 08 25 1D MOV BX,OFFSET DATA1 IP:0010 DX:0000 JMP FAR PTR [BX] DS:1D26 1D25:0008 MOV CL,DL 1D26:0000 NEXT偏移地址 IP:0008 数据段 CS:1D25 NEXT段地址

3.1.3 堆栈地址寻址方式 用途:暂存数据,自动保护中断断点、调用过程 断点等,堆栈的存取方式是: 采用先进后出规则。 使用PUSH 指令将数据压入堆栈, 使用POP指令数据弹出堆栈。 字数据进栈步骤: 1、(E)SP-1→(E)SP 2、 高8位→堆栈 3、(E)SP-1→(E)SP 4、低8位→堆栈

字数据出栈步骤: 1、栈顶内容→目标寄存器或目标单元的低8位 2、(E)SP+1→(E)SP 3、栈顶内容→目标寄存器或目标单元的高8位 4、(E)SP+1→(E)SP

堆栈操作示意

思考题 (1)MOV AL,[1234H] (2)MOV EDX,[BX] (3)MOV CL,[BX+100H] 1、 设DS=2000H,SS=3000H,BP=0200H,SI=4000H,BUF=1000H,EAX=00001000H,EBX=00002000H,假设按16位实模式操作,确定下列每条指令访问内存的物理地址,并且指出源操作数及目的操作数的寻址方式。 (1)MOV AL,[1234H] (2)MOV EDX,[BX] (3)MOV CL,[BX+100H] (4)MOV [SI],EBX (5)MOV AH,BUF[BX+SI] (6)MOV EAX,[BP+1234H]

3.2 80X86指令格式 指令基本格式: 标号可有可无; 助记符必有,如:ADD ,MOV,IN,OUT。 操作数: 源操作数 可有可无。 [标号:] 助记符 目的操作数,源操作数;注释 标号可有可无; 助记符必有,如:ADD ,MOV,IN,OUT。 操作数: 源操作数 可有可无。 目的操作数

2、存储器操作数:需要通过寄存器间接寻址, 来到操作数所在存储单元的 地址。 立即数 8位:AH,AL,BH,BL,CH,CL,DH,DL 1、 通 用 寄存器: 16位:AX,BX,CX,DX,SI,DI,SP,BP 32位:EAX,EBX,ECX,EDX,ESI,EDI, ESP,EBP 2、存储器操作数:需要通过寄存器间接寻址, 来到操作数所在存储单元的 地址。

16位间接寻址的寄存器有:BX,BP,SI,DI; 32位间接寻址的寄存器有:EAX,EBX,ECX, EDX,ESI,EDI, EBP。 3、存储器操作数缺省数据类型: 8位指令操作为:字节类型; 16位指令操作为:字类型; 32位指令操作为:双字型,

在使用中如要改变地址表达式的类型,可使用PTR伪指令来定义。 如: 字节型 BYTE PTR [Reg] 字 型 WORD PTR [ Reg] 双字型 DWORD PTR [Reg] 如: INC WORD PTR [BX] 4、 段寄存器操作数(Seg),为16位的段寄存器: CS,DS,ES,SS,FS,GS。

5、立即数(imm):只能作为源操作数,其数据类型由目的操作数来决定。如果采用十六进制表示立即数,当大于9时,A~F的数必须在前面加“0”,后面加“H”。 对指令的分析应注意以下4点: (1)、指令的功能; (2)、适用于指令的寻址方式; (3)、指令对标志位的影响; (4)、指令长度和执行时间。

3.3 80X86指令系统 按功能分类: 数据传送指令 算术运算指令 逻辑运算指令 控制转移类指令 串操作指令 输入/输出指令 处理器控制指令 中断指令与DOS功能调用

3.3.1 数据传送指令 数据传送指令包括通用数据传送、地址传送指令、标志寄存器传送指令、符号扩展指令和扩展传送指令等。 通用数据传送指令 堆栈操作指令 地址传送指令 标志寄存器传送指令 查表指令 符号扩展指令

一、通用数据传送指令 1、传送指令格式: MOV Dest, Source 数据传送的路径方向于图示: ③ ② 立即数 ① 存储器 ⑤ ④ 通用 寄存器 ⑧ ⑥ CS 、DS、 ES、SS ⑨ ⑦

①、MOV REG ,REG;寄存器到寄存器 ②、 MOV REG ,IMM;立即数到寄存器 ③、 MOV MEM,IMM;立即数到存储器 ④、 MOV MEM,REG;寄存器到存储器 ⑤、 MOV REG ,MEM;存储器到寄存器 ⑥、 MOV SEGREG,REG;( CS除外) ⑦、 MOV REG, SEGREG;( 含CS) ⑧、 MOV SEGREG,MEM; (CS除外) ⑨、 MOV MEM, SEGREG;( 含CS)

如:MOV AL,CL MOV BX,[SI] MOV EAX,EBX MOV AX,0D56BH MOV EAX,[EBX+ESI]

2、交换指令 交换操作数的数据类型:字节型、字型、双字型。允许通用寄存器之间,通用寄存器与存储器之间交换数据。 格式: XCHG DEST,SRC 如:XCHG EAX,EBX;32位交换 XCHG AX,[SI];存储器与寄存器交换 XCHG AL,DL;8位交换 两操作数中不允许出现立即数 两操作数不允许同时为存储器操作数 两操作数数据类型必须一致

功能:取出 DS:[BX+ AL] 中的1个字节送给 AL ,或者取出DS:[EBX+AL]中的1个 字节送给AL。 3、字节交换指令 格式: BSWAP 32位寄存器 功能:将 位31 ~ 位24 与 位7 ~ 位0 交换, 位23 ~ 位 16 与位15 ~ 位8交换 4、 查表指令 格式: XLAT 表头变量名 功能:取出 DS:[BX+ AL] 中的1个字节送给 AL ,或者取出DS:[EBX+AL]中的1个 字节送给AL。

例如:字形编码:0——F,对应的表头为: MOV DS, 数据段基址 MOV BX, OFFSET TAB MOV AL, NUM TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH, DB 07H,7FH,6FH,77H,7CH,39H,5EH, DB 79H,71H NUM DB X X ;0 ~ 15 中的任一数所在表中的地址 MOV DS, 数据段基址 MOV BX, OFFSET TAB MOV AL, NUM XLAT TAB

3、扩展传送指令 MOVSX DEST,SRC MOVZX DEST,SRC 如 : MOV BL,80H MOVSX AX,BL ; AX=FF80H MOVZX AX,BL ;AX=0080H * 目的操作数为通用寄存器(16位或32位) * 源操作数长度必须小于目的操作数长度,为通用寄存器或存储器操作数(8位或16位)

使用MOV指令应注意: 立即数不允许直接送段寄存器,且立即数不能做目的操作数 源操作数和目的操作数不允许同时为存储器操作数 源操作数和目的操作数不允许同时为段寄存器 两操作数的数据类型要一致 传送操作不影响标志位 不允许对CS、(E)IP传送数据

二、堆栈操作指令 堆栈是人为定义的一块内存空间,用来暂存 数据的。堆栈能自动保护中断断点和现场以及调 用子过程的断点和现场等。对数据的存取按照 “先进后出”的规则进行。 堆栈的栈底在高端地址单元,栈顶为低端地 址。 当数据进栈后,栈顶向低端地址下浮; 当数据出栈后,栈顶向高端地址上浮。

一个16位或32位数据进栈的规律是: 高位字节压入高地址单元,低位字节压入低地址单元。 一个16位或32位数据出栈的规律是: 低位字节弹到目标操作数低位,高位字节弹到目标操作数高位。 栈顶位置由SP/ESP指出。

1、压栈指令 : PUSH SRC 如: PUSH AL PUSH AX PUSH EAX PUSH DS PUSH [SI] PUSH DWORD PTR [SI] PUSH 1234H PUSH 80H

2、出栈指令: POP DEST 如: POP 80H POP 1234H POP DWORD PTR [DI] POP [DI] POP DS POP [EAX] POP AX POP AL

(3)、16位标志寄存器进栈/出栈指令 (4)、32位标志寄存器进栈/出栈 (5)、8个16位通用寄存器进栈/出栈指令 PUSHF ;先PS-1→SP,16位标志压入SS:[SP] POPF ;先弹出16位标志到FLAGS,SP+2 →SP (4)、32位标志寄存器进栈/出栈 PUSHFD;先ESP -4→ESP,32位标志压入SS:[ESP] POPFD; 先弹出4字节标志到EFALGS,ESP+4 →ESP (5)、8个16位通用寄存器进栈/出栈指令 FUSHA ;先SP - 16 →SP, 然后把AX,BX,CX, DX,SP,BP,SI,DI的内容依次压栈, 进栈的SP值是调整前的值。

(6)、8个32位通用寄存器进栈出栈指令 PUSHAD ; 先ESP—32→ESP,把EAX,EBX, ECX,EDX,ESP,EBP,ESI,EDI 依次压入堆栈, 进栈的ESP值是调整 前的值。 POPAD ;先从堆栈弹出32字节( EDI ,ESI , EBP ,ESP ,EDX, ECX, EBX, EAX)。 然后 ,ESP+ 32→ESP。

三、地址传送指令 格式: LEA DEST,SRC *DEST为16位或32位通用寄存器 *SRC为16位或32位存储器操作数 例1:LEA BX,[SI+1005H] 若SI=1000H 则BX=? 例2:LEA DI,BLOCK MOV DI,BLOCK 有何区别?

四、标志寄存器传送指令 格式1:LAHF SAHF 格式2:PUSHF POPF 格式3: PUSHFD POPFD *SAHF、POPF、POPFD影响标志位

五、查表指令 格式: XLAT 指令规定:表格存于数据段中 表首偏移地址→BX 表内偏移量→AL 查找结果→AL 所找单元的物理地址: (DS)×10H+(BX)+(AL)

例:试编程将内存中以BLOCK为起始地址的编码表中顺序号为3的编码送AL寄存器。 查表指令应用举例 例:试编程将内存中以BLOCK为起始地址的编码表中顺序号为3的编码送AL寄存器。 LEA BX,BLOCK MOV AL, 3 XLAT 结果:AL内容为4FH

六、符号扩展指令 针对带符号数,按带符号数扩展。 1、CBW 功能:AL(8位)→AX(16位) 2、CWD 功能:AX(16位)→DX:AX(32位) 3、CWDE 功能:AX(16位)→EAX(32位) 4、CDQ 功能:EAX(32位)→EDX:EAX(64位)

3.3.2 算术运算指令 加法指令 减法指令 加1减1指令 比较指令 乘法指令 除法指令 BCD算术运算指令

算术运算类指令特点 影响标志位 操作数不允许为段寄存器 不允许两个操作数同为存储器操作数 若无特别规定,操作数类型必须一致 目的操作数不允许为立即数 当操作数类型不明确时必须使用PTR伪指令

一、加法指令 格式(1) ADD DEST,SRC 功能:源操作数+目的操作数→目的操作数 格式(2) ADC DEST,SRC 功能:源操作数+目的操作数+CF→目的操作数 例:32F2H+A020H=? MOV AX,32F2H 或 MOV AX,32F2H MOV BX,0A020H MOV BX,0A020H ADD AX,BX ADD AL,BL ADC AH,BH

二、减法指令 格式(1) SUB DEST,SRC 功能:目的操作数-源操作数→目的操作数 格式(2) SBB DEST,SRC 功能:目的操作数-源操作数-CF→目的操作数 *SUB、SBB指令与ADD、ADC一样,影响标志位OF、SF、ZF、AF,PF,CF

三、加1减1指令 加1指令 INC DEST 功能:目的操作数+1→目的操作数 减1指令 DEC DEST 功能:目的操作数-1→目的操作数 *不影响CF,影响OF、SF、ZF、AF、PF 例:INC BX INC BYTE PTR [BX] DEC EAX DEC WORD PTR[SI]

四、比较指令 格式 CMP DEST,SRC 功能:目的操作数-源操作数 (1)若目、源为无符号数 CF=0 则目≧源 (若ZF=1,则目=源) CF=1 则目﹤源 (2)若目、源为带符号数 ①若目、源为同号数(OF=0) 若均为正,SF=0 则目≧源(若ZF=1,则目=源) SF=1 则目﹤源 若均为负 ,SF=0 则目≧源(若ZF=1,则目=源)

②若目、源为异号数(OF=0或1) 若目为正,源为负 则目﹥源 若此时 SF=0 则OF=0 若此时 SF=1 则OF=1 若目为负,源为正 则目﹤源 若此时 SF=1 则OF=0 若此时 SF=0 则OF=1 综合起来,若目、源为带符号数 OF⊕SF=0 则目≧源 OF⊕SF=1 则目﹤源

五、交换相加指令 六、求补指令 格式 XADD DEST,SRC 功能:目的操作数+源操作数→目的操作数 且原目的操作数→源操作数 影响标志位OF、SF、ZF、AF、PF、CF 六、求补指令 格式 NEG DEST 功能:求目的操作数的相反数的补码

七、乘法指令 格式 MUL SRC (针对无符号数) IMUL SRC (针对带符号数) 隐含规定: 另一乘数因子在累加器中(AL/ AX / EAX) 结果为乘积,乘积隐含在(AX/DX:AX/EDX:EAX) ↑ ↑ ↑ 字节乘 字乘 双字乘 *若乘积高位为0,则CF=0,OF=0 若乘积高位含有效数据,则CF=1,OF=1 对其它标志位无定义

例:计算存于下列内存中的两个无符号数的乘积 1234H×2345H=?结果放RESULT单元 LEA BX,BLOCK MOV AX,[BX] MUL WORD PTR [BX+4] MOV RESULT,AX MOV RESULT+2,DX 结果为02820404H CF=1,OF=1

八、除法指令 格式 DIV SRC (针对无符号数) IDIV SRC (针对带符号数) 隐含规定: 被除数隐含在 ( AX/DX:AX/ EDX:EAX) 商隐含在 ( AL/ AX / EAX) 余数隐含在 ( AH/ DX / EDX) ↑ ↑ ↑ 字节除 字除 双字除 *当除数为0或商溢出时会产生中断 *被除数必须是除数的双倍长度,否则,需要进行高位扩展 无符号数高位扩展为全0,带符号数按符号扩展指令扩展

九、组合型BCD算术运算指令 组合BCD码也称压缩格式的BCD码,用一个字节存储2位BCD码。 该类指令使用场合: 当参与运算的十进制数以其组合BCD码形式存放,加减时,计算机会当作二进制数来运算,其结果一定不是理想要得的组合型BCD码结果,这时,必须用组合型BCD算术运算指令加以调整,即将二进制结果调整为BCD码表示形式。 加法调整指令一般紧跟在ADD或ADC之后,减法调整指令一般紧跟在SUB或SBB之后。

1、组合型BCD加法调整指令 格式 DAA 功能:AL(二进制和)→组合BCD码 例:26+68=? 分析:用组合BCD码存放时,两个数应分别为26H和68H,理想结果应该为94H。编程如下: MOV AL,26H MOV BL,68H ADD AL,BL ;AL=8EH DAA ;AL=94H

2、组合型BCD减法调整指令 格式 DAS 功能:AL(二进制差)→组合BCD码 例:65-56=? MOV AL,65H MOV BL,56H SUB AL,BL ;AL=0FH DAS ;AL=09H

十、非组合型BCD算术运算指令 非 组合BCD码也称非压缩格式的BCD码,用一个字节存储1位BCD码,高4位无意义。 3635H即0011011000110101B表示的数是65 由于0~9的ASCII码为30H~39H,机器采用一个字节存放一位ASCII码,所以,ASCII码是一种非组合型BCD码。 非组合型BCD调整指令有加、减、乘、除四种调整指令。

1、非组合型BCD加法调整指令 格式 AAA 功能:AL(二进制和)→非组合BCD码 例:5+9=? 分析:用非组合BCD码存放时,两个数应分别为05H和09H,理想结果应该为0104H。编程如下: MOV AL,05H MOV BL,09H ADD AL,BL ;AL=0EH AAA ;AX=0104H

功能:AL(二进制乘积)→非组合BCD码 4、非组合型BCD除法调整指令 格式 AAD 功能:AX(两位非组合BCD码)→二进制数 格式 AAS 功能:AL(二进制差)→非组合BCD码 3、非组合型BCD乘法调整指令 格式 AAM 功能:AL(二进制乘积)→非组合BCD码 4、非组合型BCD除法调整指令 格式 AAD 功能:AX(两位非组合BCD码)→二进制数 *AAD指令必须放在除法指令之前进行。 其他调整指令都是先运算后调整。

思考题 判断下列指令是否正确,若有错误,请指出原因,并改正。 (1)MOV BL,OFFSET BLOCK (2)LEA DI,[BX+SI] (3)PUSH AL (4)POP CS (5)MOV ES,DS (6)MOV AX,[SI+DI] (7)MOV [BX+BP],AX (8)ADD AX,F000H (9)MOV [BX],[SI] (10)MOV AH,DX (11)INC [BX] (12)XCHG AX,2000H (13)MOV AX,[BX+DX] (14)ADD [BX],BX (15)MOV AX,DI+SI (16)MOV EAX,[ECX*4+80H]

3.3.3 逻辑运算指令 包括:逻辑指令、移位指令、位操作指令 该类指令特点: 影响标志位 操作数不允许为段寄存器 3.3.3 逻辑运算指令 包括:逻辑指令、移位指令、位操作指令 该类指令特点: 影响标志位 操作数不允许为段寄存器 不允许两个操作数同为存储器操作数 若无特别规定,操作数类型必须一致 目的操作数不允许为立即数 当操作数类型不明确时必须使用PTR伪指令

一、逻辑指令 AND AL,00001111B 1、逻辑与指令 格式 AND DEST,SRC 功能:目的操作数∧源操作数→目的操作数 *常用来使目的操作数的某些位被屏蔽(即清0) 例:MOV AL,00111001B 若要使AL中高4位清0,低4位不变,怎么办? AND AL,00001111B

2、逻辑或指令 OR AL,11000000B 格式 OR DEST,SRC 功能:目的操作数∨源操作数→目的操作数 *常用来使目的操作数的某些位置1 例:MOV AL,00001001B 若要使AL中最高2位置1,低6位不变,怎么办? OR AL,11000000B

3、逻辑异或指令 XOR AL,10000001B 格式 XOR DEST,SRC 功能:目的操作数⊕源操作数→目的操作数 *①常用来使目的操作数的某些位变反 例:MOV AL,00001001B 若要使AL中D7、D0位变反,其它位不变 *②对寄存器操作数清0 例 XOR DS,DS *③测试一操作数与另一操作数是否相等 例 XOR AL,BL 若ZF=1,则AL=BL XOR AL,10000001B

TEST AL,10000000B 若ZF=0,则D7=1 4、逻辑非指令 格式 NOT DEST 功能:目的操作数按位取反→目的操作数 5、测试指令 格式 TEST DEST,SRC 功能:目的操作数∧源操作数 *常用来测试目的操作数的某位的状态(是0还是1) 或者用来测试目的操作数的某些位是否同时为0 例:若要测试AL中D7位为0还是为1,怎么办? TEST AL,10000000B 若ZF=1,则D7=0 若ZF=0,则D7=1

逻辑指令对标志位的影响 NOT 指令不影响标志位 AND、OR、XOR、TEST 指令影响标志位SF、ZF、PF,并且使CF=0,OF=0,对AF未定义

二、移位指令 1、移位分类 算术移位(A) 左移(L) 移位指令有:SAL、SAR、SHL、SHR ROL、ROR、RCL、RCR 非循环(S) 左移(L) 逻辑移位(H) 右移(R) 小循环移位(O)左移(L) 循环 (R) 右移(R) 大循环移位(C)左移(L) 移位指令有:SAL、SAR、SHL、SHR ROL、ROR、RCL、RCR

2、移位指令格式 DEST:表示目的操作数,(寄存器或存储器)OPRD:表示移位的次数,可以是立即数,也可 以由CL间接指定移位次数。 SAL DEST,OPRD SAR DEST,OPRD SHL DEST,OPRD SHR DEST,OPRD ROL DEST,OPRD ROR DEST,OPRD RCL DEST,OPRD RCR DEST,OPRD

3、移位示意图1(非循环移位) (a)SAL/SHL; (b)SAR; (c)SHR

4、移位示意图2(循环移位) (a)ROL; (b) ROR; (c)RCL; (d)RCR

5、对标志位的影响 SAL SHL 影响OF、SF、ZF、PF、CF SHR SAR ROL ROR 影响CF、OF RCL RCR

XOR AH,AH SAL AX,1 MOV BX,AX MOV CL,2 ;AH=0 ;AX=2X SAL AX,CL ;BX=2X 设一个字节数据X存放在AL 寄存器中,试分析下列程序段的功能。 XOR AH,AH SAL AX,1 MOV BX,AX MOV CL,2 SAL AX,CL ADD AX,BX ;AH=0 ;AX=2X ;BX=2X ; ;AX=4×(2X)=8X ;AX=8X+2X=10X 功能:10X→AX

三、位操作指令 1、位测试和设置指令 BT DEST,SRC (指定位送CF) BTC DEST,SRC (指定位送CF,该位取反) BTR DEST,SRC (指定位送CF,该位清0) BTS DEST,SRC (指定位送CF,该位置1) 如 MOV AX,1234H ;AX=0001001000110100B MOV CX,5 BT AX,CX ;CF=1,AX=1234H BTC AX,CX ;CF=1,AX=1214H BTS AX,CX ;CF=0,AX=1234H BTR AX,CX ;CF=1,AX=1214H

2、位扫描指令 BSF DEST,SRC BSR DEST,SRC 如 MOV AX,1234H ;AX=0001001000110100B 功能:从低位开始扫描SRC,若所有位为0,则ZF=0,否 则ZF=1,且将第一个出现1的位号存入DEST中。 BSR DEST,SRC 功能:从高位开始扫描SRC,若所有位为0,则ZF=0,否 则ZF=1,且将第一个出现1的位号存入DEST中。 如 MOV AX,1234H ;AX=0001001000110100B BSF BX,AX ;ZF=1,BX=0002H BSR DX,CX ;CF=1,AX=000CH

3、位标志指令 CLC (CF=0) STC (CF=1) CLD (DF=0) STD (DF=1) CLI (IF=0) STI (IF=1) 4、条件设置字节指令 格式:SETCOND DEST 功能:测试条件(COND)若为真,则将DEST置01H,否则置00H。见P87的表3.3

3.3.4 控制转移类指令 该类指令不影响标志位。 无条件转移指令 条件转移指令 循环控制指令

一、无条件转移指令 TARGET:目标标号 REG:通用寄存器 1、段内直接转移 JMP TARGET 2、段内间接转移 JMP REG JMP NEAR PTR [REG] 3、段间直接转移 JMP FAR PTR TARGET 4、段间间接转移 JMP FAR PTR [REG]

二、条件转移指令 JO TARGET ;OF=1,即溢出转 1、单标志位条件转移指令 JNO TARGET ;OF=0,不溢出转移 JS TARGET ;SF=1,结果为负转移 JNS TARGET ;SF=0,结果为正转移 JC TARGET ;CF=1,有进位转移 JNC TARGET ;CF=0,无进位则转移 JP TARGET ;PF=1,为偶转移 JNP TARGET ; PF=0,为奇转移 JE/JZ TARGET ;ZF=1,等于或为零转移 JNE/JNZ TARGET ;ZF=0,等于或非零转移

例:在不改变AL值的同时,检测AL 中1的个数,且存放在BL中。 .MODEL TINY .CODE .STARTUP MOV BL,0 MOV DL,8 AGAIN: ROL AL,1 JNC NEXT INC BL NEXT: DEC DL JNZ AGAIN .EXIT END

2、无符号数比较条件转移指令 助记符: J→转移 A→高于 B→低于 E→等于 N→不 指令: JA/JNBE TARGET ;高于/不低于等于转移 JAE/JNB TARGET ;高于等于/不低于转移 JB/JNAE TARGET ;低于/不高于等于转移 JBE/JNA TARGET ;低于等于/不高于转移

3、带符号数比较条件转移指令 J→转移 G→大于 L→小于 E→等于 N→不 JG/JNLE TARGET ;大于/不小于等于转移 JGE/JNL TARGET ;大于等于/不小于转移 JL/JNGE TARGET ;小于/不大于等于转移 JLE/JNG TARGET ;小于等于/不大于转移 4、测试CX条件转移指令 JCXZ TARGET ;CX=0 转移 JECXZ TARGET ;ECX=0 转移

使用条件转移指令应注意: *条件转移指令一般跟在CMP指令或TEST指令之后,根据其影响的标志位来决定是否产生转移。 *当条件满足时,转移到目标标号去执行,否则,顺着程序往下执行。

例3.65 假设AL中带符号数X为某值,试编程将求出的符号函数值f(x)存放在AH中。 .MODEL TINY .CODE .STARTUP CMP AL,0 JGE BIG MOV AL,0FFH JMP DONE BIG: JE DONE MOV AL,1 DONE: MOV AH,AL .EXIT END

三、循环控制指令 格式:LOOPCC TARGET 功能:(E)CX—1→ (E)CX,不影响标志位,且测试条件‘CC’成立,则转移到TARGET处执行. LOOP ; CX—1→ CX,若CX≠0则循环 LOOPW ;同上 LOOPD ; ECX—1→ ECX,若ECX≠0则循环 LOOPE/LOOPZ ; CX—1→ CX,若CX≠0且ZF=1则循环 LOOPEW/LOOPZW ;同上 LOOPED/LOOPZD ; ECX—1→ ECX,若ECX≠0且ZF=1则循环 LOOPNE/LOOPNZ ; CX—1→ CX,若CX≠0且ZF=0则循环 LOOPNEW/LOOPNZW ;同上 LOOPNED/LOOPNZD ; ECX—1→ ECX,若ECX≠0且ZF=0则循环

例3.68 找出以ARRAY为首地址的100个字数组中的第一个非0项,送AX寄存器中. .MODEL SMALL .DATA ARRAY DW 0, 0, 0, 0, 1010H, … ;(100个字) .CODE .STARTUP MOV CX, 64H LEA BX, ARRAY MOV SI, 0FFFEH ZERO: INC SI INC SI CMP WORD PTR [BX+SI], 0 LOOPZ ZERO JCXZ A1 MOV AX, [BX+SI] A1: NOP .EXIT END

3.3.5 串操作指令 几个概念: 串 串元素 串操作 有关隐含约定: ①寻址: 以DS:(E)SI寻址源串, 以ES:(E)DI寻址目的串 3.3.5 串操作指令 几个概念: 串 串元素 串操作 有关隐含约定: ①寻址: 以DS:(E)SI寻址源串, 以ES:(E)DI寻址目的串 每次串操作后, (E)SI和(E)DI自动指向下一串元素 ②地址移动方向: 当DF=0时, (E)SI和(E)DI的修改为增量 当DF=1时, (E)SI和(E)DI的修改为减量 ③ (E)SI和(E)DI初始赋值 若DF=0, 赋首偏移地址 若DF=1, 赋末偏移地址

一、重复前缀指令 REP REPE/Z REPNE/REPNZ 二、方向标志指令 CLD ; (DF=0) STD ; (DF=1) 说明:在串操作指令之前若加上REP,则执行一次串操作后不仅自动修改(E)SI和(E)DI ,而且执行(E)CX—1→( E)CX ,若(E)CX≠0,再次重复串操作,直到(E)CX=0为止。 REPE/Z 说明: (E)CX—1→( E)CX,若(E)CX≠0且ZF=1,则重复 REPNE/REPNZ 说明: (E)CX—1→( E)CX,若(E)CX≠0且ZF=0,则重复 二、方向标志指令 CLD ; (DF=0) STD ; (DF=1)

[REP] MOVSB/MOVSW/MOVSD 三、串传送指令 [REP] MOVSB/MOVSW/MOVSD 功能:将DS:(E)SI的内容复制到ES:(E)DI中 例3.69 将以SRC开头的100个字节传送到以DEST开头的单元中. .MODEL SMALL .DATA MOV CX,100 SRC DB 1,2,3, …;(100个字节) LEA SI, SRC DEST DB 100 DUP(?) LEA DI, DEST .CODE CLD .STARTUP REP MOVSB MOV AX,@DATA .EXIT MOV ES,AX END

[REPE/Z] [REPNE/NZ]CMPSB/CMPSW/CMPSD 四、串比较指令 [REPE/Z] [REPNE/NZ]CMPSB/CMPSW/CMPSD 功能:将DS:(E)SI的内容-ES:(E)DI的内容 例3.70 .MODEL SMALL .DATA LEA DI, DEST SRC DB ‘A B C D E F G H’ CLD DEST DB ‘A B C E F F F E’ REPE CMPSB SUT DB ? JZ EQUL .CODE MOV BH,0 .STARTUP JMP DONE MOV AX,@DATA EQUL:MOV BH, 0FFH MOV ES,AX DONE:MOV SUT,BH MOV CX, 8 .EXIT LEA SI, SRC END

[REPE/Z] [REPNE/NZ]SCASB/SCASW/SCASD 五、串扫描指令 [REPE/Z] [REPNE/NZ]SCASB/SCASW/SCASD 功能:将AL或AX或EAX的内容-ES:(E)DI的内容 例3.70 .MODEL SMALL MOV AL,’C’ .DATA CLD DEST DB ‘A B C D E F ’ REPNE SCASB ADDR DW ? JZ EQUL .CODE MOV DI,0 .STARTUP JMP DONE MOV AX,@DATA EQUL:DEC DI MOV ES,AX DONE:MOV ADDR,DI MOV CX, 6 .EXIT LEA DI, DEST END

LODSB/LODSW/LODSD 六、串装入指令指令 功能:将DS:(E)SI所指的串元素装入AL或AX或EAX中 七、串存储指令指令 [REP]STOSB/STOSW/STOSD 功能:将AL或AX或EAX中的内容存入ES:(E)DI所指的目的串单元中

3.3.6 输入/输出指令 一、输入/输出指令 几个概念: I/O端口 输入 输出 有关约定: ①操作数 3.3.6 输入/输出指令 一、输入/输出指令 几个概念: I/O端口 输入 输出 有关约定: ①操作数 两操作数分别是端口地址内容和累加器(AL或AX或EAX)内容。 ②寻址: 直接寻址(8位端口地址,0~255) 间接寻址(16位端口地址,由DX指定,寻址64K) ③ 端口地址数据长度 每个端口数据长度均为8位

1、输入指令 IN DEST,SRC 其中,DEST可以是AL或AX或EAX SRC可以是8位端口地址或DX 如:IN AL,80H IN AX,80H IN EAX,80H MOV DX,6000H IN AL,DX IN AX,DX IN EAX,DX

2、输出指令 OUT DEST,SRC 其中,DEST可以是8位端口地址或DX SRC可以是AL或AX或EAX 如:OUT 80H, AL OUT 80H,AX OUT 80H, EAX MOV DX,6000H OUT DX,AL OUT DX,AX OUT DX,EAX

二、串输入/输出指令 外设端口与存储器单元之间传送数据 1、串输入指令 [REP] INSB/INSW/INSD 功能:将DX指定的端口地址的内容→ES:(E)DI。每输入一次,(E)DI自动修改。加前缀可重复传送。 如: … MOV AX,@DATA MOV ES,AX MOV CX,100 CLD LEA DI,BLOCK MOV DX,6000H REP INSB …

2、串输出指令 [REP] OUTSB/OUTSW/OUTSD 功能:将DS:(E)SI → DX指定的端口地址。每输入一次,(E)SI自动修改。加前缀可重复传送。 如: … MOV CX,100 CLD LEA SI,BLOCK MOV DX,6000H REP OUTSB …

3.3.7 处理器控制指令 1、空操作 NOP 2、处理器等待指令 WAIT 3、处理器暂停指令 HLT

3.3.8 中断指令与DOS功能调用 一、中断指令 1、软中断指令 INT n 其中,n为中断类型码,是一个8位的立即数 2、中断返回指令 IRET IRETD

二、DOS功能调用 总入口:INT 21H DOS功能调用步骤: (1)入口参数→指定的寄存器 (2)功能号→AH (3)INT 21H 常用功能子程序 功能号 键盘输入单字符 01H 键盘输入字符串 0AH 输出单字符 02H 输出字符串 09H 返回操作系统 4CH DOS功能调用步骤: (1)入口参数→指定的寄存器 (2)功能号→AH (3)INT 21H (4)取出口参数

1、键盘输入单字符 例: MOV AH,01H INT 21H 键入的字符以ASCII码形式存于AL中。 2、输出单字符 例: MOV DL,’A’ MOV AH,02H INT 21H 入口参数事先要存入DL中。 3、返回操作系统 MOV AH,4CH

3、键盘输入字符串 例 .MODEL SMALL .DATA BUF DB 20, ?, 20 DUP (?) .CODE .STARTUP MOV DX,OFFSET BUF MOV AH, 0AH INT 21H .EXIT END 键入的字符串以ASCII码形式存于BUF第3个字节开始的内存单元中。第一个字节存字符串最大字节数,第二字节由系统送入实际键入的字节数。

4、输出字符串 例 .MODEL SMALL .DATA BUF DB ‘Hi,good luck!’,’$’ .CODE .STARTUP LEA DX, BUF MOV AH, 09H INT 21H .EXIT END 要输出的字符串必须以’$’作为结束标志。

例3.66 编程实现把BX中的二进制数用十六进制形式显示出来。 .MODEL TINY .CODE .STARTUP MOV CH,4 AGAIN: MOV CL,4 ROL BX,CL NEXT:MOV DL,AL MOV AL,BL MOV AH,2 AND AL,0FH INT 21H OR AL,30H DEC CH CMP AL,3AH JNZ AGAIN JB NEXT .EXIT ADD AL,07H END