1、汇编语言程序设计全册配套最汇编语言程序设计全册配套最 完整精品课件完整精品课件2 2 汇编语言程序设计汇编语言程序设计 21世纪高职高专新概念教材世纪高职高专新概念教材 汇编语言程序设计汇编语言程序设计 第第1 1章章 基础知识基础知识 第第2 2章章 寻址方式和指令系统寻址方式和指令系统 第第3 3章章 宏汇编语言宏汇编语言 第第4 4章章 程序设计方法程序设计方法 第第5 5章章 输入输出和中断输入输出和中断 第第6 6章章 应用系统开发应用系统开发 第第1章章 基础知识基础知识 1.1 1.1 汇编语言及特点汇编语言及特点 1.2 1.2 数据表示数据表示 1.3 80861.3 808
2、6CPUCPU和寄存器组和寄存器组 1.4 1.4 存储器物理地址的形成存储器物理地址的形成 第第2章章 寻址方式和指令系统寻址方式和指令系统 2.1 寻址方式寻址方式 2.2 数据传送类指令数据传送类指令 2.3 算术运算类指令算术运算类指令 2.4 位操作类指令位操作类指令 2.5 串操作类指令串操作类指令 2.6 控制转移类指令控制转移类指令 2.7 处理机控制类指令处理机控制类指令 第第3章章 宏汇编语言宏汇编语言 3.1 3.1 宏汇编语言格式宏汇编语言格式 3.2 3.2 汇编语句表达式汇编语句表达式 3.3 3.3 伪指令伪指令 3.4 3.4 DOSDOS系统功能调用系统功能调
3、用 3.5 3.5 综合举例综合举例 第4章 程序设计方法 4.1 概述概述 4.2 顺序程序设计顺序程序设计 4.3 分支程序设计分支程序设计 4.4 循环程序设计循环程序设计 4.5 子程序设计子程序设计 4.6 模块化程序设计模块化程序设计 4.7 高级汇编语言技高级汇编语言技 术术 第第5 5章章 输入输出和中断输入输出和中断 5.1 5.1 I/OI/O设备数据传送方式设备数据传送方式 5.2 5.2 中断传送方式中断传送方式 5.3 5.3 BIOSBIOS中断调用方式中断调用方式 5.4 5.4 综合举例综合举例 第第6章章 应用系统开发应用系统开发 6.1 6.1 汽车动画程序
4、开发汽车动画程序开发 6.2 6.2 发声系统程序开发发声系统程序开发 欢迎您使用欢迎您使用 汇编语言程序设计汇编语言程序设计 Thank you very much !Thank you very much ! 中国水利水电出版社 结结 束束 第第1章章 基础知识基础知识 1.1 1.1 汇编语言及特点汇编语言及特点 1.2 1.2 数据表示数据表示 1.3 80861.3 8086CPUCPU和寄存器组和寄存器组 1.4 1.4 存储器物理地址的形成存储器物理地址的形成 开开 始始 1.1 1.1 汇编语言及特点汇编语言及特点 1.1.1 机器语言机器语言 1.1.2 汇编语言汇编语言 1
5、.1.3 高级语言高级语言 1.1.4 汇编语言的特点汇编语言的特点 返回本章首页返回本章首页 1.1.1 机器语言机器语言 计算机能够直接识别的数据是由二进计算机能够直接识别的数据是由二进 制数制数0 0和和1 1组成的代码。机器指令就是用组成的代码。机器指令就是用 二进制代码组成的指令,一条机器指令二进制代码组成的指令,一条机器指令 控制计算机完成一个基本操作。控制计算机完成一个基本操作。 用机器语言编写的程序是计算机惟一用机器语言编写的程序是计算机惟一 能够直接识别并执行的程序,而用其他能够直接识别并执行的程序,而用其他 语言编写的程序必须经过翻译才能变换语言编写的程序必须经过翻译才能变
6、换 成机器语言程序,所以,机器语言程序成机器语言程序,所以,机器语言程序 被称为目标程序。被称为目标程序。 返回本节返回本节 1.1.2 汇编语言汇编语言 为了克服机器语言的缺点,人们采用助记符表示机为了克服机器语言的缺点,人们采用助记符表示机 器指令的操作码器指令的操作码, ,用变量代替操作数的存放地址等,这样用变量代替操作数的存放地址等,这样 就形成了汇编语言。所以汇编语言是一种用符号书写的、就形成了汇编语言。所以汇编语言是一种用符号书写的、 基本操作与机器指令相对应的、并遵循一定语法规则的基本操作与机器指令相对应的、并遵循一定语法规则的 计算机语言。计算机语言。 用汇编语言编写的程序称为
7、汇编源程序。用汇编语言编写的程序称为汇编源程序。 汇编语言是一种符号语言,比机器语言容易理解和汇编语言是一种符号语言,比机器语言容易理解和 掌握,也容易调试和维护。但是,汇编语言源程序要翻掌握,也容易调试和维护。但是,汇编语言源程序要翻 译成机器语言程序才可以由计算机执行。这个翻译的过译成机器语言程序才可以由计算机执行。这个翻译的过 程称为程称为“汇编汇编”,这种把汇编源程序翻译成目标程序的,这种把汇编源程序翻译成目标程序的 语言加工程序称为汇编程序。语言加工程序称为汇编程序。 返回本节返回本节 1.1.3 高级语言高级语言 汇编语言虽然较机器语言直观,但仍汇编语言虽然较机器语言直观,但仍 然
8、烦琐难懂。于是人们研制出了高级程然烦琐难懂。于是人们研制出了高级程 序设计语言。高级程序设计语言接近于序设计语言。高级程序设计语言接近于 人类自然语言的语法习惯,与计算机硬人类自然语言的语法习惯,与计算机硬 件无关,易被用户掌握和使用。件无关,易被用户掌握和使用。目前广目前广 泛应用的高级语言有多种,如泛应用的高级语言有多种,如BASICBASIC、 FORTRANFORTRAN、PASCALPASCAL、C C、C+C+等等。等等。 返回本节返回本节 1.1.4 汇编语言的特点汇编语言的特点 (1 1)汇编语言与处理器密切相关。)汇编语言与处理器密切相关。 (2 2)汇编语言程序效率高。)汇
9、编语言程序效率高。 (3 3)编写汇编语言源程序比编写高级)编写汇编语言源程序比编写高级 语言源程序烦琐。语言源程序烦琐。 (4 4)调试汇编语言程序比调试高级语言)调试汇编语言程序比调试高级语言 程序困难。程序困难。 汇编语言的主要应用场合:汇编语言的主要应用场合: (1 1)程序执行占用较短的时间,或者占)程序执行占用较短的时间,或者占 用较小存储容量的场合。用较小存储容量的场合。 (2 2)程序与计算机硬件密切相关,程序)程序与计算机硬件密切相关,程序 直接控制硬件的场合。直接控制硬件的场合。 (3 3)需提高大型软件性能的场合。)需提高大型软件性能的场合。 (4 4)没有合适的高级语言
10、的场合。)没有合适的高级语言的场合。 返回本节返回本节 1.2 1.2 数据表示数据表示 1.2.1 数值数据数值数据 1.2.2 字符数据字符数据 返回本章首页返回本章首页 1.2.1 数值数据数值数据 数值数据分为有符号数和无符号数。无数值数据分为有符号数和无符号数。无 符号数最高位表示数值符号数最高位表示数值, ,而有符号数最高而有符号数最高 位表示符号。有符号数有不同的编码方位表示符号。有符号数有不同的编码方 式,常用的是补码。式,常用的是补码。 1. 1. 原码原码 最高位表示符号(正数用最高位表示符号(正数用0,0,负数用负数用1 1),), 其他位表示数值位,称为有符号数的原其他
11、位表示数值位,称为有符号数的原 码表示法。码表示法。 【例【例1.11.1】有符号数的原码】有符号数的原码 表示。表示。 X = 4 5 = 0 0 1 0 1 1 0 1 B X X = 4 5 = 0 0 1 0 1 1 0 1 B X 原原 = = 0010110100101101B B X=-45, XX=-45, X原原 =10101101=10101101B B 原码表示简单易懂,但若是两个异号数原码表示简单易懂,但若是两个异号数 相加(或两个同号数相减)相加(或两个同号数相减), ,就要做减法。就要做减法。 为了把减法运算转换为加法运算就引进为了把减法运算转换为加法运算就引进 了
12、反码和补码。了反码和补码。 . . 反码反码 正数的反码与原码相同,符号位用正数的反码与原码相同,符号位用0 0表示,表示, 数值位值不变。负数的反码符号位用数值位值不变。负数的反码符号位用1 1表表 示示, , 数值位为原码数值位按位取反形成,数值位为原码数值位按位取反形成, 即即0 0变变1 1、1 1变变0 0。 【例【例1.21.2】有符号数的反码表示。】有符号数的反码表示。 X=45=00101101B, XX=45=00101101B, X反反 =00101101=00101101B B X=-45, XX=-45, X反反 =11010010=11010010B B 3. 3.
13、补码补码 正数的补码与原码相同,即符号位用正数的补码与原码相同,即符号位用0 0表表 示,数值位值不变。负数的补码为反码示,数值位值不变。负数的补码为反码 加加1 1 形成。形成。 【例【例1.31.3】有符号数的补码表示。】有符号数的补码表示。 X=45=00101101B XX=45=00101101B X补补 =00101101=00101101B B X=-45 XX=-45 X补补 =11010011=11010011B B 4. 4. 符号扩展符号扩展 在数据处理时在数据处理时, ,有时需要把有时需要把8 8位二进制数扩展成位二进制数扩展成1616位二位二 进制数进制数, ,当要扩
14、展的数是无符号数时当要扩展的数是无符号数时, ,可在最高位前扩展可在最高位前扩展 8 8个个0 0。如果要扩展的数是补码形式的有符号数。如果要扩展的数是补码形式的有符号数, ,那么那么, , 就要进行符号位的扩展,符号扩展后,其结果仍是该就要进行符号位的扩展,符号扩展后,其结果仍是该 数的补码。数的补码。 【例【例1.41.4】符号扩展表示。】符号扩展表示。 2121的的8 8位二进制补码为:位二进制补码为:00010101 00010101 符 号 扩 展 后符 号 扩 展 后 2 12 1 的的 1 61 6 位 二 进 制 补 码 为 :位 二 进 制 补 码 为 : 000000000
15、00101010000000000010101。 0001010100010101和和00000000000101010000000000010101都是都是2121的补码。的补码。 5. 5. 数据的表示范围和大小数据的表示范围和大小 n n位二进制数能够表示的无符号整数的范位二进制数能够表示的无符号整数的范 围是围是: : 0 0 I 2n-1I 2n-1 n n位二进制数能够表示的有符号整数的范位二进制数能够表示的有符号整数的范 围是围是: : -2-2( (n-1 n-1) ) I +2 I +2( (n-1 n-1) )-1 -1 6 6十六进制表示十六进制表示 由于二进制数的基数太
16、小,书写和阅读由于二进制数的基数太小,书写和阅读 都不方便都不方便. .而十六进制的基数而十六进制的基数16162 24 4,这,这 样二进制数与十六进制之间能方便地转样二进制数与十六进制之间能方便地转 换。因此,习惯把二进制数改写成十六换。因此,习惯把二进制数改写成十六 进制数,在汇编语言程序设计时尤其如进制数,在汇编语言程序设计时尤其如 此。此。 在书写时,为了区别于十六进制和二进在书写时,为了区别于十六进制和二进 制数,通常在十六进制数后加字母制数,通常在十六进制数后加字母HH。 返回本节返回本节 1.2.2 字符数据字符数据 1 1ASCIIASCII码码 2 2BCDBCD码码 1
17、1ASCIIASCII码码 标准标准ASCIIASCII码用码用7 7位二进制数编码,共有位二进制数编码,共有 128128个。个。 计算机存储器基本单位为计算机存储器基本单位为8 8位,位,ASCIIASCII 码的最高位通常为码的最高位通常为0 0,通信时,最高位用,通信时,最高位用 作奇偶校验位。作奇偶校验位。 ASCII ASCII码表中的前码表中的前3232个和最后个和最后1 1个编码个编码 是不能显示的控制字符,用于表示某种是不能显示的控制字符,用于表示某种 操作。操作。 ASCII ASCII码表中码表中2020HH后的后的9494个编码是可个编码是可 显示和打印的字符,其中包括
18、数码显示和打印的字符,其中包括数码0 09 9, 英文字母,标点符号等。英文字母,标点符号等。 2 2BCDBCD码码 虽然二进制数实现容易虽然二进制数实现容易, ,但不符合人们但不符合人们 的使用习惯的使用习惯, ,且书写阅读不方便,所以在且书写阅读不方便,所以在 计算机输入输出时通常还是采用十进制计算机输入输出时通常还是采用十进制 来表示数,这就需要实现十进制与二进来表示数,这就需要实现十进制与二进 制间的转换。为了转换方便制间的转换。为了转换方便, ,常采用二进常采用二进 制编码的十进制制编码的十进制, ,简称为简称为BCDBCD码。码。 BCDBCD码就是用码就是用4 4位二进制数表示
19、位二进制数表示1 1位位 十进制整数。表示的方法有多种,常用十进制整数。表示的方法有多种,常用 的是的是84218421BCDBCD码,它的表示规律如表码,它的表示规律如表 1.11.1所示。所示。 表1.1 十进制数字的8421BCD码 十进制数字8421BCD码十进制数字8421BCD码 0000050101 1000160110 2001070111 3001181000 4010091001 返回本节返回本节 1.3 80861.3 8086CPUCPU和寄存器组和寄存器组 1.3.1 Intel8086CPU内部结内部结 构构 1.3.2 8086寄存器组寄存器组 1.3.3 标志寄
20、存器标志寄存器 返回本章首页返回本章首页 1.3.1 Intel8086CPU内部内部 结构结构 图1.2 8086CPU内部结构 图图1.2 8086CPU内部结构内部结构 返回本节返回本节 1.3.2 8086寄存器组寄存器组 图图1.3 8086CPU寄存器分组寄存器分组 1通用寄存器通用寄存器 (1 1)数据寄存器)数据寄存器 数据寄存器共有数据寄存器共有4 4个寄存器个寄存器AXAX、BXBX、CXCX、DXDX,用用 来保存操作数或运算结果等信息。来保存操作数或运算结果等信息。 AXAX寄存器称为累加器。使用频度最高,用于算术、逻寄存器称为累加器。使用频度最高,用于算术、逻 辑运算
21、以及与外设传送信息等。辑运算以及与外设传送信息等。 BXBX寄存器称为基址寄存器。常用于存放存储器地址。寄存器称为基址寄存器。常用于存放存储器地址。 CXCX寄存器称为计数器。一般作为循环或串操作等指令寄存器称为计数器。一般作为循环或串操作等指令 中的隐含计数器。中的隐含计数器。 DXDX寄存器称为数据寄存器。常用来存放双字数据的高寄存器称为数据寄存器。常用来存放双字数据的高 1616位,或存放外设端口地址。位,或存放外设端口地址。 变址和指针寄存器包括变址和指针寄存器包括SISI、DIDI、SPSP、BPBP个个1616位寄位寄 存器,主要用于存放某个存储单元的偏移地址。存器,主要用于存放某
22、个存储单元的偏移地址。 SISI是源变址寄存器,是源变址寄存器,DIDI是目的变址寄存器,在字符串是目的变址寄存器,在字符串 操作中,操作中,SISI和和DIDI都具有自动增量或减量的功能。都具有自动增量或减量的功能。 SP SP为堆栈指针寄存器,用于存放当前堆栈段中栈顶为堆栈指针寄存器,用于存放当前堆栈段中栈顶 的偏移地址;的偏移地址;BPBP为基址指针寄存器,用于存放堆栈段为基址指针寄存器,用于存放堆栈段 中某一存储单元的偏移地址。中某一存储单元的偏移地址。 (2)变址和指针寄存器)变址和指针寄存器 2 2段寄存器段寄存器 80868086CPUCPU的个的个1616位的段寄存器分别位的段
23、寄存器分别 称为代码段寄存器称为代码段寄存器CSCS,数据段寄存器数据段寄存器 DSDS,堆栈段寄存器堆栈段寄存器SSSS,附加数据段寄附加数据段寄 存器存器ESES。段寄存器用来确定该段在内存段寄存器用来确定该段在内存 中的起始地址。中的起始地址。 代码段用来存放程序的指令序列。代码段用来存放程序的指令序列。CSCS存存 放代码段的段首址,指令指针寄存器放代码段的段首址,指令指针寄存器IPIP 指示代码段中指令的偏移地址。指示代码段中指令的偏移地址。 3 3指令指针指令指针 80868086CPUCPU中的指令指针中的指令指针IPIP,它总是它总是 保存下一次将要从主存中取出指令的偏保存下一
24、次将要从主存中取出指令的偏 移地址,偏移地址的值为该指令到所在移地址,偏移地址的值为该指令到所在 段段首址的字节距离。在目标程序运行段段首址的字节距离。在目标程序运行 时,时,IPIP的内容由微处理器硬件自动设置,的内容由微处理器硬件自动设置, 程序不能直接访问程序不能直接访问IPIP,但一些指令却可但一些指令却可 改变改变IPIP的值,如转移指令、子程序调用的值,如转移指令、子程序调用 指令等。指令等。 返回本节返回本节 1.3.3 标志寄存器标志寄存器 80868086CPUCPU中有一个很重要的中有一个很重要的1616位标志位标志 寄存器,它包含寄存器,它包含9 9个标志位,主要用于保个
25、标志位,主要用于保 存一条指令执行后,存一条指令执行后,CPUCPU所处状态信息所处状态信息 及运算结果的特征。及运算结果的特征。 1 1条件标志条件标志 2 2状态控制标志状态控制标志 1条件标志条件标志 (1)进位标志)进位标志CF (2)零标志)零标志ZF (3)符号标志)符号标志SF (4)溢出标志)溢出标志 OF (5)奇偶标志)奇偶标志 PF (6)辅助进位标志辅助进位标志AF 2状态控制标志状态控制标志 (1 1)方向标志)方向标志DFDF (2 2)中断允许标志)中断允许标志IFIF (3 3)追踪标志)追踪标志TFTF 返回本节返回本节 1.4 1.4 存储器物理地址的形成存
26、储器物理地址的形成 1.4.1 存储器存储器 1.4.2 存储器单元的地址和内存储器单元的地址和内 容容 1.4.3 物理地址的形成物理地址的形成 返回本章首页返回本章首页 1.4.1 存储器存储器 存储器是计算机的记忆部件,用来存放程序和数存储器是计算机的记忆部件,用来存放程序和数 据。按所在的位置,存储器可以分成主存储器和辅助据。按所在的位置,存储器可以分成主存储器和辅助 存储器。存储器。 主存储器存放当前正在执行的程序和使用的数据,主存储器存放当前正在执行的程序和使用的数据, CPUCPU可以直接存取,它由半导体存储器芯片构成,其可以直接存取,它由半导体存储器芯片构成,其 成本高,容量小
27、,但速度快。成本高,容量小,但速度快。 辅助存储器可用来长期保存大量程序和数据辅助存储器可用来长期保存大量程序和数据, ,CPUCPU 需要通过需要通过I/OI/O接口访问,它由磁盘或光盘构成,其成本接口访问,它由磁盘或光盘构成,其成本 低,容量大,但速度较慢。低,容量大,但速度较慢。 返回本节返回本节 1.4.2 存储器单元的地址和内存储器单元的地址和内 容容 存储单元地址存储单元地址 :80868086系统中,为了标系统中,为了标 识和存取每一个存储单元,给每个存储识和存取每一个存储单元,给每个存储 单元规定一个编号,这就是存储单元地单元规定一个编号,这就是存储单元地 址。址。 存储单元的
28、内容存储单元的内容 :一个存储单元中存放:一个存储单元中存放 的信息称为该存储单元的内容。的信息称为该存储单元的内容。 图图1.41.4表明了存表明了存 储器中部分存储器中部分存 储单元存放信储单元存放信 息情况。从图息情况。从图 1.41.4可看到可看到, ,地地 址为址为3456034560HH 的字节的存储的字节的存储 单元中的内容单元中的内容 是是3434HH,而地而地 址为址为3456134561HH 的字节存储单的字节存储单 元中的内容是元中的内容是 1212HH。 返回本节返回本节 1.4.3 物理地址的形成物理地址的形成 80868086CPUCPU的地址线是的地址线是2020
29、位的,这样最大可寻址位的,这样最大可寻址 空间应为空间应为2 220 20=1 =1MBMB,其物理地址范围从其物理地址范围从0000000000HH FFFFFHFFFFFH。而而80868086CPUCPU寄存器都是寄存器都是1616位的。那么,位的。那么, 这这1 1MBMB空间如何用空间如何用1616位寄存器表达呢?位寄存器表达呢? 根据要求可把根据要求可把1 1MM字节地址空间划成若干逻辑段。字节地址空间划成若干逻辑段。 每个逻辑段必须满足两个条件:一是逻辑段的起始地每个逻辑段必须满足两个条件:一是逻辑段的起始地 址(简称段首址)必须是址(简称段首址)必须是1616的倍数;二是逻辑段
30、的最的倍数;二是逻辑段的最 大长度为大长度为6464KK。按照这两个条件,按照这两个条件,1 1MM字节地址空间字节地址空间 最多可划分成最多可划分成6464KK个逻辑段,最少也要划分成个逻辑段,最少也要划分成1616个逻个逻 辑段。逻辑段与逻辑段可以相连,也可以不连,还可辑段。逻辑段与逻辑段可以相连,也可以不连,还可 以重叠。以重叠。 【例【例1.51.5】各独立段的分配情况示例。】各独立段的分配情况示例。 设设CS=B000HCS=B000H、DS=1CDEHDS=1CDEH、 SS=4200HSS=4200H、ES=0150H,ES=0150H,它们分别为它们分别为 代码段、数据段、堆栈
31、段和附加段的段代码段、数据段、堆栈段和附加段的段 首址。自每个段首址开始,各段均占首址。自每个段首址开始,各段均占 6464KBKB的范围,各段之间互不重叠。如的范围,各段之间互不重叠。如 图图1.51.5所示。所示。 【例【例1.61.6】各段相互重叠情况示例。】各段相互重叠情况示例。 设设CS=0200HCS=0200H、DS=0400HDS=0400H、 SS=0480HSS=0480H,这样代码段、数据段和堆这样代码段、数据段和堆 栈段的物理首地址分别为栈段的物理首地址分别为0200002000HH、 04000H04000H和和0480004800HH。其中代码段占其中代码段占 8
32、8KBKB地址空间,数据段占地址空间,数据段占2 2KBKB,堆栈段堆栈段 占占256256B B,SP=0100HSP=0100H。如图如图1.61.6所示。所示。 图图1.6 各段重叠存储单元分配图各段重叠存储单元分配图 返回本节返回本节 Thank you very much !Thank you very much ! 本章到此结束,谢谢您的光临! 返回本章首页返回本章首页 结结 束束 第第2章章 寻址方式和指令系统寻址方式和指令系统 2.1 寻址方式寻址方式 2.2 数据传送类指令数据传送类指令 2.3 算术运算类指令算术运算类指令 2.4 位操作类指令位操作类指令 2.5 串操作类
33、指令串操作类指令 2.6 控制转移类指令控制转移类指令 2.7 处理机控制类指令处理机控制类指令 开开 始始 80868086CPUCPU的指令系统的基本指令的指令系统的基本指令 包括包括数据传送类指令、算术运算数据传送类指令、算术运算 类指令、位操作类指令类指令、位操作类指令、串操作、串操作 类指令类指令、控制转移类指令、控制转移类指令、处理、处理 机控制类指令。后几节将分别介机控制类指令。后几节将分别介 绍这些指令的语句格式和功能。绍这些指令的语句格式和功能。 80868086CPUCPU的指令的共同的规律的指令的共同的规律 l l 大多数数据传送类指令、算术运算类指令、大多数数据传送类指
34、令、算术运算类指令、 位操作类指令及串操作类指令,其双操作数位操作类指令及串操作类指令,其双操作数 指令有相同的语句格式和操作规定。指令有相同的语句格式和操作规定。 语句格式:语句格式: 标号:标号: 操作符操作符 OPDOPD, OPS OPS ;注释注释 l l 算术运算和位操作类指令的部分单操作数算术运算和位操作类指令的部分单操作数 指令有相同的语句格式和操作规定。指令有相同的语句格式和操作规定。 语句格式:语句格式: 标号:标号: 操作符操作符 OPD OPD ;注释注释 2.1 寻址方式寻址方式 2.1.1 2.1.1 寄存器寻址寄存器寻址 2.1.2 2.1.2 寄存器间接寻址寄存
35、器间接寻址 2.1.3 2.1.3 变址寻址变址寻址 2.1.4 2.1.4 基址加变址寻址基址加变址寻址 2.1.5 2.1.5 立即寻址立即寻址 2.1.6 2.1.6 直接寻址直接寻址 2.1.7 2.1.7 跨段问题跨段问题 返回本章首页返回本章首页 2.1.1 寄存器寻址寄存器寻址 寄存器寻址方式的操作数在指令指明的寄存器寻址方式的操作数在指令指明的 寄存器中。寄存器中。 汇编格式:汇编格式:R R 其中其中R R表示寄存器名。表示寄存器名。 功能:操作数直接存放在寄存器功能:操作数直接存放在寄存器R R中。中。 图形表示:图形表示: R R 指令指令操作数操作数 【例【例2.12.
36、1】 下列程序执行后,下列程序执行后,(AXAX)= =?,(?,(BXBX)= =? MOV AX MOV AX,1234H1234H MOV BX MOV BX,5678H5678H ADD AX ADD AX,BXBX 该程序中该程序中MOVMOV指令为数据传送指令操作符,指令为数据传送指令操作符,ADDADD指令指令 为加法指令操作符,三条指令皆为双操作数指令。第为加法指令操作符,三条指令皆为双操作数指令。第 一、二条指令一、二条指令AXAX、BXBX皆为目的操作数地址,为寄存皆为目的操作数地址,为寄存 器寻址方式。第三条指令中,器寻址方式。第三条指令中,AXAX为目的操作数地址,为目
37、的操作数地址, BXBX为源操作数地址。源地址和目的地址皆为寄存器寻为源操作数地址。源地址和目的地址皆为寄存器寻 址方式。址方式。 图形表示:图形表示: 执行:执行:12341234HAXHAX 5678HBX 5678HBX (AXAX)+ +(BXBX)AXAX 执行后:(执行后:(AXAX)=68ACH=68ACH,(,(BXBX) =5678H=5678H 返回本节返回本节 2.1.2 寄存器间接寻址寄存器间接寻址 寄存器间接寻址方式中,寄存寄存器间接寻址方式中,寄存 器的内容为操作数的偏移地址器的内容为操作数的偏移地址 EAEA,操作数在存储器中。操作数在存储器中。 汇编格式:汇编格
38、式: RR 功能:操作数存放在存储器,功能:操作数存放在存储器, 寄存器寄存器R R存放操作数的偏移地址存放操作数的偏移地址 EAEA。 偏移地址偏移地址EA计算方法如下:计算方法如下: EA= SISI作间址寄存器。 DIDI作间址寄存器。 BX BX作间址寄存器。 BP BP作间址寄存器。 执行指令:执行指令:MOV AX MOV AX ,BP BP 执行后:(执行后:(AXAX)=?=?,(,(BPBP)=?=?,(,(SSSS)=?=?, (20030H20030H)=?=? 图形表示如下:图形表示如下: 【例【例2.2】寄存器和存储器内容分】寄存器和存储器内容分 别为:(别为:(AX
39、)=0,(,(BP) =0030H,(,(SS)=2000H, (20030H)=1234H 返回本节返回本节 2.1.3 变址寻址变址寻址 变址寻址方式操作数的偏移地址变址寻址方式操作数的偏移地址EAEA为寄为寄 存器的内容加位移量,操作数在存储器存器的内容加位移量,操作数在存储器 中。中。 汇编格式:汇编格式:XRXR(X X表示位移量,是表示位移量,是8 8位位 或或1616位二进制补码表示的有符号数)位二进制补码表示的有符号数) 功能:操作数存放在存储器,寄存器功能:操作数存放在存储器,寄存器R R的的 内容加位移量内容加位移量X X为操作数的偏移地址为操作数的偏移地址EAEA。 图形
40、表示如下:图形表示如下: 偏移地址偏移地址EAEA计算方法如下:计算方法如下: 【例【例2.32.3】 设执行前:设执行前: (AXAX)=0040H=0040H,(,(BXBX) =0030H=0030H,(,(DSDS)=2000H=2000H, (20036H20036H)=0050H =0050H 执行指执行指令:令:ADD 6BXADD 6BX,AXAX 执行后:执行后:(AXAX)=?=?,(,(BXBX)=?=?, (DSDS)=?=?,(,(20036H20036H)=?=? 图形表示如下:图形表示如下: 执行:(执行:(20036H)+(AX) 20036H 执行后:(执行后
41、:(AX)=0040H,(,(BX) =0030H,(,(DS)=2000H, (20036H)=0090H。 返回本节返回本节 2.1.4 基址加变址寻址基址加变址寻址 基址加变址寻址方式中,操作数的偏移基址加变址寻址方式中,操作数的偏移 地址地址EAEA是指令中基址寄存器内容、变址是指令中基址寄存器内容、变址 寄存器内容、位移量三项之和,操作寄存器内容、位移量三项之和,操作 数在存储器中。数在存储器中。 汇编格式:汇编格式:X BR+IRX BR+IR 功能:操作数存放在存储器,功能:操作数存放在存储器,BRBR的内容的内容 加加IRIR的内容加位移量的内容加位移量X X是操作数的偏移地是
42、操作数的偏移地 址址EAEA。 图形表示:图形表示: 操作数偏移地址操作数偏移地址EAEA计算方法如下计算方法如下 返回本节返回本节 2.1.5 立即寻址立即寻址 立即寻址方式中,指令操作码和操作数立即寻址方式中,指令操作码和操作数 都在存储器代码段中。都在存储器代码段中。 汇编格式:汇编格式:n n(n n为立即操作数,是用为立即操作数,是用8 8 位或位或1616位二进制补码表示的有符号数)位二进制补码表示的有符号数) 功能:操作数存放在存储器,指令下一功能:操作数存放在存储器,指令下一 单元的内容为立即操作数单元的内容为立即操作数n n。 图形表示:图形表示: 【例【例2.52.5】 【
43、例【例2.52.5】MOV AXMOV AX, 10 10 执行后(执行后(AXAX)= =? 该例中源操作数为立即寻址方式,立即数为该例中源操作数为立即寻址方式,立即数为1010, 存放在指令的下一单元。存放在指令的下一单元。 图形表示:图形表示: 执行:执行:1010AXAX 执行后:执行后:(AXAX)=000AH=000AH 返回本节返回本节 2.1.6 直接寻址直接寻址 汇编格式:含有变量的地址表达式。汇编格式:含有变量的地址表达式。 段寄存器名:段寄存器名: EA EA 。 功能:指令下一字单元的内容是操作数的功能:指令下一字单元的内容是操作数的 偏移地址偏移地址EAEA。 图形表
44、示:图形表示: 【例【例2.62.6】 【例【例2.62.6】寄存器和存储器内容为】寄存器和存储器内容为:(AXAX)=1212H=1212H, BUFBUF为数据段定义的变量,其偏移地址是为数据段定义的变量,其偏移地址是20002000HH, (DSDS)=3000H=3000H,(,(32000H32000H)=4545H=4545H。 执行指令执行指令:MOV AX MOV AX ,BUFBUF 执行后:(执行后:(AXAX)=?=? 图形表示:图形表示: 执行:(执行:(3200032000HH)AXAX 执行后:(执行后:(AXAX)=4545H=4545H 返回本节返回本节 2.1
45、.7 跨段问题跨段问题 按前述规定:若选用按前述规定:若选用BPBP作间址基址寄存器、变址寄存作间址基址寄存器、变址寄存 器或基址寄存器,则操作数在堆栈段,操作数的物理器或基址寄存器,则操作数在堆栈段,操作数的物理 地址地址PAPA由堆栈段寄存器由堆栈段寄存器SSSS的内容左移的内容左移4 4位与偏移地址位与偏移地址EAEA 相加后形成;否则,操作数在数据段,操作数的物理相加后形成;否则,操作数在数据段,操作数的物理 地址地址PAPA由数据段寄存器由数据段寄存器DSDS的内容左移的内容左移4 4位与偏移位与偏移EAEA相加相加 后形成。该规定为系统默认状态。当要否定默认状态,后形成。该规定为系
46、统默认状态。当要否定默认状态, 到非约定段寻找操作数时,必须用跨段前缀指明操作到非约定段寻找操作数时,必须用跨段前缀指明操作 数的段寄存器名。数的段寄存器名。 汇编格式:段寄存器名:操作数地址。汇编格式:段寄存器名:操作数地址。 功能:段寄存器名指明操作数属哪个段。功能:段寄存器名指明操作数属哪个段。 【例【例2.72.7】跨段前缀示例。】跨段前缀示例。 MOVMOVAXAX,DSDS:BP BP MOVMOVCXCX,SSSS:SI SI 该例中,该例中,DSDS:,:,SSSS:均为跨段前缀,此均为跨段前缀,此 时默认状态无效,操作数的物理地址时默认状态无效,操作数的物理地址PAPA 由段
47、寄存器内容左移由段寄存器内容左移4 4位加偏移位加偏移EAEA形成。形成。 上述上述2 2条指令的源操作数物理地址分别为:条指令的源操作数物理地址分别为: PA1 =PA1 =(DSDS)左移左移4 4位位+BPBP PA2 =PA2 =(SSSS)左移左移4 4位位+SISI 返回本节返回本节 2.2 数据传送类指令数据传送类指令 2.2.1 2.2.1 通用数据传送指令通用数据传送指令 2.2.2 2.2.2 堆栈操作指令堆栈操作指令 2.2.3 2.2.3 标志寄存器传送指标志寄存器传送指 令令 2.2.4 2.2.4 地址传送指令地址传送指令 2.2.5 2.2.5 输入输出指令输入输
48、出指令 返回本章首页返回本章首页 2.2.1 2.2.1 通用数据传送指令通用数据传送指令 1 1传送指令传送指令MOVMOV 2 2数据交换指令数据交换指令XCHGXCHG 3 3查表转换指令查表转换指令 XLATXLAT 1 1传送指令传送指令MOVMOV 语句格式:语句格式:MOV OPDMOV OPD,OPSOPS 功能:将源操作数传送入目的地功能:将源操作数传送入目的地 址,源地址内容不变。即(址,源地址内容不变。即(OPSOPS) OPDOPD。 下图下图2.12.1描述了描述了MOVMOV指令在传送数指令在传送数 据时允许传送的路径及类型。据时允许传送的路径及类型。 图图2.1
49、MOV指令所允许的数据传送路径及类型指令所允许的数据传送路径及类型 【例【例2.82.8】存储器与寄存器间数据传送。存储器与寄存器间数据传送。 MOV AXMOV AX,BUF BUF ;BUFBUF是变量,源操作数为直接寻是变量,源操作数为直接寻 址址 MOV BHMOV BH,DIDI ;源操作数为寄存器间接寻址源操作数为寄存器间接寻址 MOV DIMOV DI,ESES:3SI 3SI ;源操作数为变址寻址,使用跨段源操作数为变址寻址,使用跨段 前缀前缀 MOV BPMOV BP,3BX+SI3BX+SI;源操作数为基址加变址寻址源操作数为基址加变址寻址 MOV BUFAMOV BUFA
50、,DLDL ;BUFABUFA是一字节变量是一字节变量 MOV BPMOV BP,AXAX;使用使用SSSS段寄存器段寄存器 MOV DSMOV DS:BPBP,DLDL;使用跨段前缀使用跨段前缀 MOV BUFMOV BUF,DSDS;BUFBUF是个字变量是个字变量 MOV ES MOV ES ,BUFBUF 2 2数据交换指令数据交换指令XCHGXCHG 语句格式:语句格式:XCHG OPDXCHG OPD,OPSOPS 功能:将源地址与目的地址中的内容互换。即(功能:将源地址与目的地址中的内容互换。即(OPDOPD) OPSOPS,(,(OPSOPS)OPDOPD。 【例例2.92.9