《微机原理ppt课件》由会员分享,可在线阅读,更多相关《微机原理ppt课件(94页珍藏版)》请在金锄头文库上搜索。
1、微机原理及应用微机原理及应用 吴丽娟吴丽娟第第5章章86系列微型计算机的指令系统系列微型计算机的指令系统5.2传送类指令传送类指令5.4串操作指令串操作指令5.5控制类指令控制类指令5.186系列汇编语言及指令的格式与寻址方式系列汇编语言及指令的格式与寻址方式5.3数据操作类指令数据操作类指令2024/7/271微机原理及应用微机原理及应用 吴丽娟吴丽娟 指指令令是是让让计计算算机机完完成成某某种种操操作作的的命命令令, 指指令令的的集集合合称称作作指指令令系系统统, 不不同同系系列列计计算算机机有有不同的指令系统。不同的指令系统。 指令的符号用规定的英文字母组成指令的符号用规定的英文字母组成
2、, 称为助记符。称为助记符。 指指令令进进行行编编程程能能够够充充分分开开发发计计算算机机硬硬件件资资源源, 它它的的程程序序目目标标代代码码短短、运运行行速速度度快快, 因因此此, 指令语言是面向机器的语言指令语言是面向机器的语言, 在自动控制、智能化仪器仪表、监测等领域应用广泛。在自动控制、智能化仪器仪表、监测等领域应用广泛。2024/7/272微机原理及应用微机原理及应用 吴丽娟吴丽娟5.1 86系列汇编语言及指令的格式与寻址方式系列汇编语言及指令的格式与寻址方式5.1.1 86系列汇编语言指令语句格式系列汇编语言指令语句格式 任任何何一一种种汇汇编编语语言言的的指指令令语语句句都都是是
3、与与机机器器指指令令一一一一对对应应的的, 它它通通过过汇汇编编程程序序将将其其翻翻译译成成机机器器指指令令代代码码 (目目标标代代码码), 让让CPU执执行行某某种种操操作作。86系系列列汇汇编编语语言言指指令令语语句句格格式式如如图图 5.1 所所示示。图图中中由由前前向向后后的的箭箭头头表表示示是是可可选选项项, 由由后后向向前前的的箭箭头头表表示示是是重重复复项项, 圆圆头头方方框框表表示示是是语语句句中中的关键字。的关键字。2024/7/273微机原理及应用微机原理及应用 吴丽娟吴丽娟(1) 标标号号是是给给该该指指令令所所在在地地址址取取的的名名字字, 必必须须后后跟跟冒冒号号“:
4、”, 它它可可以以缺缺省省, 是是可可供供选选择择的的标标识识符。符。86系列汇编语言中可使用的标识符必须遵循下列规则:系列汇编语言中可使用的标识符必须遵循下列规则:标识符由字母标识符由字母(az, AZ)、数字、数字(09)或某些特殊字符或某些特殊字符(, , ?)组成。组成。第第一一个个字字符符必必须须是是字字母母(az, AZ)或或某某些些特特殊殊的的符符号号(, , ?), 但但“?”不不能能单单独独作作标标识识符。符。标识符有效长度为标识符有效长度为31个字符个字符, 若超过若超过31个字符个字符, 则只保留前面的则只保留前面的31个字符为有效标识符。个字符为有效标识符。2024/7
5、/274微机原理及应用微机原理及应用 吴丽娟吴丽娟 下面是有效的标识符:下面是有效的标识符:START:MYCODE:ALPHA:NUM1:LOOP1:X: ?MORE350:BETA1:DELAYIS: 下面是无效的标识符:下面是无效的标识符:4LOOP:MAINA/B:BETA*:START3:GAMA1:NUM+1:?:ONE*TWO:2024/7/275微机原理及应用微机原理及应用 吴丽娟吴丽娟(2) 指指令令助助记记符符是是指指令令名名称称的的代代表表符符号号, 它它是是指指令令语语句句中中的的关关键键字字, 不不可可缺缺省省, 它它表表示示本本指指令令的的操操作类型作类型, 必要时
6、可在指令助记符的前面加上一个或多个必要时可在指令助记符的前面加上一个或多个“前缀前缀”, 从而实现某些附加操作。从而实现某些附加操作。(3) 操操作作数数是是参参加加本本指指令令运运算算的的数数据据, 有有些些指指令令不不需需要要操操作作数数, 可可以以缺缺省省;有有些些指指令令需需要要两两个个操操作数作数, 这时必须用逗号这时必须用逗号(, )将两个操作数分开;有些操作数可以用表达式来表示。将两个操作数分开;有些操作数可以用表达式来表示。(4) 注注释释部部分分是是可可选选项项, 允允许许缺缺省省, 如如果果带带注注释释则则必必须须用用分分号号(;)开开头头, 注注释释本本身身只只用用来来对
7、对指指令令功功能加以说明能加以说明, 给阅读程序带来方便给阅读程序带来方便, 汇编程序不对它做任何处理。汇编程序不对它做任何处理。2024/7/276微机原理及应用微机原理及应用 吴丽娟吴丽娟5.1.2 86系列系列 CPU的寻址方式的寻址方式 机机器器执执行行指指令令的的目目的的就就是是对对指指定定的的操操作作数数完完成成规规定定的的操操作作, 将将操操作作结结果果存存入入规规定定的的地地方方。因因此此, 如如何何获获得得操操作作数数的的存存放放地地址址及及操操作作结结果果的的存存放放地地址址就就是是一一个个很很关关键键的的问问题题。8086/8088 CPU有有多多种种方方法法来来获获取取
8、操操作作数数的的存存放放地地址址及及操操作作结结果果的的存存放放地地址址, 这这些些方方法法统统称称为为数数据据寻寻址址方式。方式。2024/7/277微机原理及应用微机原理及应用 吴丽娟吴丽娟5.1.2 86系列系列 CPU的寻址方式的寻址方式n为什么要设置多种寻址方式?为什么要设置多种寻址方式?n希望用最短的指令长度访问尽可能大的存储器空间希望用最短的指令长度访问尽可能大的存储器空间 n希望给多样的程序设计技术和数据结构对数据访问的灵活性和有效性提供支持希望给多样的程序设计技术和数据结构对数据访问的灵活性和有效性提供支持 n变址寻址便于处理表格和矩阵变址寻址便于处理表格和矩阵n相对寻址便于
9、编制浮动的、可重入的程序相对寻址便于编制浮动的、可重入的程序下面主要以下面主要以MOV指令为例指令为例, 介绍介绍86系列系列CPU的寻址方式。的寻址方式。2024/7/278微机原理及应用微机原理及应用 吴丽娟吴丽娟MOV指令的功能指令的功能格式:格式:MOV 目的操作数目的操作数(dest) , 源操作数源操作数(src)2024/7/279微机原理及应用微机原理及应用 吴丽娟吴丽娟n 8086 CPU指指令令系系统统中中, 有有一一部部分分指指令令所所用用的的8位位或或16位位操操作作数数就就在在指指令令中中提提供供, 这这种种方方式式称作立即数寻址方式。例如:称作立即数寻址方式。例如:
10、n MOV AL, 80H;将十六进制数;将十六进制数80H送入送入ALn MOV AX, 1090H;将;将1090H送送AX, AH中为中为10H, AL中为中为90Hn 采采用用立立即即数数寻寻址址方方式式的的指指令令主主要要用用来来对对寄寄存存器器赋赋值值。因因为为操操作作数数可可以以从从指指令令中中直直接接取取得得, 不需要运行总线周期不需要运行总线周期, 所以所以, 立即数寻址方式的显著特点就是速度快。立即数寻址方式的显著特点就是速度快。n 立立即即数数可可以以为为8位位, 也也可可以以为为16位位;规规定定立立即即数数只只能能是是整整数数, 不不能能是是小小数数、变变量量或或者者
11、其其他他类型的数据;另外还要注意类型的数据;另外还要注意, 立即数只能作为源操作数。立即数只能作为源操作数。 1. 立即数寻址立即数寻址2024/7/2710立即数寻址方式立即数寻址方式微机原理及应用微机原理及应用 吴丽娟吴丽娟11微机原理及应用微机原理及应用 吴丽娟吴丽娟n 1. 立即数寻址立即数寻址【例例】画出画出MOV AX, 1946H 指令执行过程示意图。指令执行过程示意图。解:指令执行后解:指令执行后, AX=1946H, 16位数据位数据1946H存入寄存器存入寄存器, 下图中下图中, 指令存放于代码段指令存放于代码段, OP为操作为操作码码, 接着存放低位字节数接着存放低位字节
12、数46H, 在存放高位在存放高位字节数字节数19H, 这是字类型的立即数这是字类型的立即数, 为为指令机器码的一部分。指令机器码的一部分。2024/7/2712微机原理及应用微机原理及应用 吴丽娟吴丽娟 2. 寄存器寻址寄存器寻址 如如果果操操作作数数就就在在CPU的的内内部部寄寄存存器器中中, 那那么么寄寄存存器器名名可可在在指指令令中中指指出出。这这种种寻寻址址方方式式就就叫寄存器寻址方式。叫寄存器寻址方式。 对对16位位操操作作数数来来说说, 寄寄存存器器可可以以为为AX, BX, CX, DX, SI, DI, SP或或者者BP, 而而对对8位位操操作作数数来来说说, 寄存器可为寄存器
13、可为AH, AL, BH, BL, CH, CL, DH, DL。例如:。例如: INCCX;将;将CX的内容加的内容加1 ROLAH, 1;将;将AH中的内容循环左移一位中的内容循环左移一位 采采用用寄寄存存器器寻寻址址方方式式的的指指令令在在执执行行时时, 操操作作就就在在CPU内内部部进进行行, 不不需需要要使使用用总总线线周周期期, 因因此此, 执执行行速速度度快快。在在一一条条指指令令中中, 可可以以对对源源操操作作数数采采用用寄寄存存器器寻寻址址方方式式, 也也可可以以对对目目的的操操作作数数采采用寄存器寻址方式用寄存器寻址方式, 还可以两者都用寄存器寻址方式。还可以两者都用寄存器
14、寻址方式。2024/7/2713微机原理及应用微机原理及应用 吴丽娟吴丽娟 2. 寄存器寻址寄存器寻址例:下列程序执行后例:下列程序执行后, (AX)=?, (BX)=? MOV AX, 1234H MOV BX, 5678H ADD AX, BX 该该程程序序中中MOV指指令令为为数数据据传传送送指指令令操操作作符符, ADD指指令令为为加加法法指指令令操操作作符符, 三三条条指指令令皆皆为为双双操操作作数数指指令令。第第一一、二二条条指指令令AX、BX皆皆为为目目的的操操作作数数地地址址, 为为寄寄存存器器寻寻址址方方式式。第第三三条条指指令令中中, AX为目的操作数地址为目的操作数地址,
15、 BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。为源操作数地址。源地址和目的地址皆为寄存器寻址方式。执行:执行:1234HAX 5678HBX (AX)+(BX)AX 执行后:执行后:(AX)=68ACH, (BX)=5678H2024/7/2714微机原理及应用微机原理及应用 吴丽娟吴丽娟2024/7/2715微机原理及应用微机原理及应用 吴丽娟吴丽娟 2. 寄存器寻址寄存器寻址例:设例:设AX=4710H, CX=7507H。 问执行指令问执行指令 MOV AX, CX 后后AX=?, BX=?解:解:AX寄存器的内容被寄存器的内容被CX的内容取代的内容取代, CX本身的内本身的
16、内容不变容不变, 故故 AX=7507H, BX=7507H。2024/7/2716微机原理及应用微机原理及应用 吴丽娟吴丽娟 3. 直接寻址直接寻址 使使用用直直接接寻寻址址方方式式时时, 数数据据总总是是在在存存储储器器中中, 存存储储单单元元的的有有效效地地址址由由指指令令直直接接指指出出, 所所以以直直接接寻址是对存储器进行访问时可采用的最简单的方式。例如:寻址是对存储器进行访问时可采用的最简单的方式。例如:MOV AX, 1070H; 将将DS段的段的1070H和和1071H两单元的内容取到两单元的内容取到AX中中 注注意意:采采用用直直接接寻寻址址方方式式时时, 如如果果指指令令前
17、前面面没没有有用用前前缀缀指指明明操操作作数数在在哪哪一一段段, 则则默默认认为为段段寄寄存存器器是是数数据据段段寄寄存存器器DS。例例如如, 上上一一条条指指令令执执行行时时, 设设DS2000H, 则则执执行行过过程程是是将将绝绝对对地地址址为为21070H和和21071H两单元的内容取出送两单元的内容取出送AX。2024/7/2717直接寻址方式直接寻址方式微机原理及应用微机原理及应用 吴丽娟吴丽娟18微机原理及应用微机原理及应用 吴丽娟吴丽娟 如如果果要要对对其其它它段段寄寄存存器器所所指指出出的的存存储储区区进进行行直直接接寻寻址址, 则则本本条条指指令令前前必必须须用用前前缀缀指指
18、出出段段寄寄存器名。例如:存器名。例如: CS:MOV BX, 3000H;将;将CS段的段的3000H和和3001H两单元的内容送两单元的内容送BX 设设CS为为5100H, 则本指令在执行时则本指令在执行时, 将将54000H和和54001H两单元的内容取出送两单元的内容取出送BX。2024/7/2719微机原理及应用微机原理及应用 吴丽娟吴丽娟n【例例】假假设设TABLE是是在在附附加加数数据据段段定定义义的的一一个个字字节节数数组组的的首首地地址址标标号号, 其其偏偏移移地地址址为为1000H, 则指令:则指令:n MOV AL, ES:TABLEn或或MOV AL, ES:TABLE
19、n或或MOV AL, ES:1000Hn或或MOV AL, ES:1000Hn是等效的是等效的, 都表示将字节数组的第一个数组元素送入都表示将字节数组的第一个数组元素送入AL寄存器中。寄存器中。n MOV AL, ES:TABLE+2n或或MOV AL, ES:TABLE+2n或或MOV AL, ES:1000H+2n或或MOV AL, ES:1000H+2n 也也是是等等效效的的, 都都表表示示将将字字节节数数组组的的第第三三个个数数组组元元素素送送入入AL寄寄存存器器中中。这这种种寻寻址址方方式式一一般般适用于处理单个变量。适用于处理单个变量。2024/7/2720微机原理及应用微机原理及
20、应用 吴丽娟吴丽娟n例例 (1)MOV AX, 1024H MOV BX, ES1000H n设设DS=2000H, ES=3000H, (21024H)=1784H, (31000H)=1234H。n 指令执行后指令执行后AX=?, BX=?30000H31000H31001H341200000H21024H21025H8417AH1784ALBH1234BL(1)DS16+1024H=21024HAX=1784HES=3000H则则BX=1234H2024/7/2721微机原理及应用微机原理及应用 吴丽娟吴丽娟 4. 寄存器间接寻址寄存器间接寻址 采采用用寄寄存存器器间间接接寻寻址址方方式
21、式时时, 操操作作数数一一定定在在存存储储器器中中, 存存储储单单元元的的有有效效地地址址由由寄寄存存器器指指出出, 这这些寄存器可以为些寄存器可以为BX, BP, SI和和DI之一之一, 即有效地址等于其中某一个寄存器的值:即有效地址等于其中某一个寄存器的值: BX BP SI DI EA偏移地址偏移地址EA计算方法:计算方法: 和直接寻址类似和直接寻址类似, 若指令前面没有用前缀指明具体的段寄存器若指令前面没有用前缀指明具体的段寄存器, 则寻址时默认的段寄存器通则寻址时默认的段寄存器通常为常为DS。如寄存器为。如寄存器为BP时时, 则对应的段寄存器为则对应的段寄存器为SS。2024/7/2
22、722微机原理及应用微机原理及应用 吴丽娟吴丽娟 采采用用寄寄存存器器间间接接寻寻址址时时, 允允许许在在指指令令中中指指定定一一个个位位移移量量, 这这样样, 有有效效地地址址通通过过将将一一个个寄寄存存器的内容加上一个位移量来得到。位移量可以为器的内容加上一个位移量来得到。位移量可以为8位位, 也可以为也可以为16位。即:位。即: BX BP 8位位移量位位移量 SI 16位位移量位位移量 DI 细分起来细分起来, 寄存器间接寻址可分为以下寄存器间接寻址可分为以下4种:种:EA+2024/7/2723微机原理及应用微机原理及应用 吴丽娟吴丽娟(1)以以BX寄存器进行间接寻址寄存器进行间接寻
23、址数据段基址寻址数据段基址寻址 如如 MOV AX, BX(2)以以BP寄存器进行间接寻址寄存器进行间接寻址堆栈段基址寻址堆栈段基址寻址 如如 MOV BX, BP(3)以以SI和和DI寄存器进行间接寻址寄存器进行间接寻址变址寻址变址寻址 其中其中 SI为源寄存器、为源寄存器、DI为目的寄存器为目的寄存器(4)将将BX、BP和和SI、DI寄存器组合起来进行间接寻址寄存器组合起来进行间接寻址基址加变址寻址基址加变址寻址 如如 MOV AX, BX+SI MOV AX, BX+SI+0050;相对基址加变址寻址;相对基址加变址寻址2024/7/2724微机原理及应用微机原理及应用 吴丽娟吴丽娟 (
24、1) 以以BX寄存器进行间接寻址寄存器进行间接寻址数据段基址寻址。数据段基址寻址。 用用BX寄存器进行间接寻址时寄存器进行间接寻址时, 默认的段寄存器为默认的段寄存器为DS, 因为因为BX称为基址寄存器称为基址寄存器, 所以这种寻址方所以这种寻址方式也叫数据段基址寻址。例如式也叫数据段基址寻址。例如: MOV AX, BX 设设DS5000H, BX3000H, 则本指令在执行时则本指令在执行时, 将将53000H和和53001H两单元的内容送两单元的内容送AX。 如果要对其它段寄存器所指的区域进行寻址如果要对其它段寄存器所指的区域进行寻址, 则必须在指令前用前缀指出段寄存器名。例如:则必须在
25、指令前用前缀指出段寄存器名。例如:ES MOV CX, BX 设设ES3000H, BX4000H, 则本指令在执行时则本指令在执行时, 将将34000H和和34001H两单元的内容送两单元的内容送CX。2024/7/2725寄存器间接寻址方式寄存器间接寻址方式微机原理及应用微机原理及应用 吴丽娟吴丽娟26微机原理及应用微机原理及应用 吴丽娟吴丽娟 (2) 以以BP寄存器进行间接寻址寄存器进行间接寻址堆栈段基址寻址。堆栈段基址寻址。 如果以寄存器如果以寄存器BP对操作数进行间接寻址对操作数进行间接寻址, 则必须注意则必须注意, 操作数默认在堆栈段中操作数默认在堆栈段中, 因为因为BP称为基址寄
26、存器称为基址寄存器, 所以这种寻址方式通常称为堆栈段基址寻址。例如:所以这种寻址方式通常称为堆栈段基址寻址。例如: MOVBX, BP 设设SS5000H, BP4000H, 则本指令在执行时则本指令在执行时, 将将54000H和和54001H两单元的内容送两单元的内容送BX。2024/7/2727微机原理及应用微机原理及应用 吴丽娟吴丽娟(3) 以以SI和和DI寄存器进行间接寻址寄存器进行间接寻址变址寻址。变址寻址。 SI和和DI寄寄存存器器分分别别称称为为源源变变址址寄寄存存器器和和目目的的变变址址寄寄存存器器, 所所以以用用这这两两个个寄寄存存器器来来进进行行间间接接寻寻址址也也叫叫变变
27、址址寻寻址址。变变址址寻寻址址通通常常用用于于对对数数组组元元素素进进行行操操作作, 另另外外, 后后面面还还会会讲讲到到有有些些串串操操作作指指令令要要求求用用固固定定的的变变址址寄寄存存器器对对操操作作数数进进行行寻寻址址, 操操作作过过程程中中, 指指令令会会自自动动修修改改变变址址寄存器中的地址寄存器中的地址, 以指向下一个操作数。以指向下一个操作数。2024/7/2728寄存器相对寻址方式寄存器相对寻址方式微机原理及应用微机原理及应用 吴丽娟吴丽娟29微机原理及应用微机原理及应用 吴丽娟吴丽娟 (3) 以以SI和和DI寄存器进行间接寻址寄存器进行间接寻址变址寻址。变址寻址。例:设例:
28、设DS=2000H, SS=3000H, BX=1000H, BP=2100H, (21000H)=1426H , (32100H)=2017H, 问问 执行执行 MOV AX, BX MOV BL, BP 指令后指令后 AX=? BL=?2614172021000H21001H32100H32101H答案答案: AX=1426H BL=17H2024/7/2730微机原理及应用微机原理及应用 吴丽娟吴丽娟 (4) 将将BX, BP和和SI, DI寄寄存存器器组组合合起起来来进进行行间间接接寻寻址址基基址址加加变变址址的的寻寻址址。通通常常将将BX和和BP称称为为基基址址寄寄存存器器, 将将S
29、I和和DI称称为为变变址址寄寄存存器器。8086指指令令系系统统允允许许把把基基址址寄寄存存器器和和变变址址寄寄存存器器组组成成起起来来构构成成一一种种新新的的寻寻址址方方式式, 叫叫基基址址加加变变址址的的寻寻址址。用用这这种种寻寻址址方方式式时时, 操操作作数数的的有有效效地地址址是是1个基址寄存器个基址寄存器(BX或或BP)的内容加上一个变址寄存器的内容加上一个变址寄存器(SI或或DI)的内容。即:的内容。即: BX SI BP DIEA+2024/7/2731微机原理及应用微机原理及应用 吴丽娟吴丽娟 例如:例如:MOV AX, BX+SI 设设DS1000H, BX5000H, SI
30、2000H, 则则上上面面指指令令在在执执行行时时, 有有效效地地址址为为7000H, 本本指指令令将将17000H和和17001H两单元的内容取到两单元的内容取到AX中。中。 图图5.2对对堆堆栈栈中中数数组组的的访访问问在在基基址址加加变变址址的的寻寻址址方方式式中中, 只只要要用用上上BP寄寄存存器器, 那那么么默默认认的的段段寄寄存存器器就就是是SS;在在其其它它情情况况下下, 默默认认的的段段寄寄存存器器均均为为DS。如如果果操操作作数数不不在在默默认认段段, 则则要用前缀指出相应的段寄存器名。要用前缀指出相应的段寄存器名。2024/7/2732微机原理及应用微机原理及应用 吴丽娟吴
31、丽娟 用用基基址址加加变变址址的的寻寻址址方方式式时时, 与与变变址址寻寻址址、基基址址寻寻址址的的情情况况类类似似, 也也允允许许带带一一个个8位位或或16位位的的位位移移量量。带带位位移移量量的的基基址址加加变变址址的的寻寻址址, 在在有有些些资资料料中中也也称称为为相相对对的的基基址址加加变变址址寻寻址址。 如:如:MOV AX, BX+SI+0050;将;将BX和和SI中的内容与中的内容与0050相加作为有效地址相加作为有效地址 由由于于基基址址加加变变址址的的寻寻址址方方式式中中, 允允许许两两个个地地址址分分量量分分别别改改变变, 而而且且有有一一个个对对段段寄寄存存器器的的约约定
32、定规规则则即即如如果果基基址址寄寄存存器器用用BX, 则则默默认认的的段段寄寄存存器器为为DS;如如果果基基址址寄寄存存器器用用BP, 则则默默认认的段寄存器为的段寄存器为SS这种寻址方式使用起来很灵活。这种寻址方式使用起来很灵活。2024/7/2733基址变址寻址方式基址变址寻址方式微机原理及应用微机原理及应用 吴丽娟吴丽娟34相对基址变址寻址方式相对基址变址寻址方式微机原理及应用微机原理及应用 吴丽娟吴丽娟35 图图5.3对对8086有关操作数的各种寻址方式进行了总结。图中不仅指出了每种寻址方式下操作数有关操作数的各种寻址方式进行了总结。图中不仅指出了每种寻址方式下操作数的来源的来源, 还
33、表明了有效地址的计算方法。还表明了有效地址的计算方法。图图5.3 8086/8088的的操作数操作数寻址方式寻址方式36微机原理及应用微机原理及应用 吴丽娟吴丽娟 为了对各种寻址方式有个比较为了对各种寻址方式有个比较, 下面举一个综合性的例子。下面举一个综合性的例子。【例例】设设BX0158H, DI10A5H, 位移量位移量1B57H, DS2100H, 并假定没有使用段前缀并假定没有使用段前缀, 即把即把DS作为操作数对应的段寄存器。作为操作数对应的段寄存器。 在各种寻址方式下在各种寻址方式下, 这些寄存器和位移量所产生的有效地址和物理地址为:这些寄存器和位移量所产生的有效地址和物理地址为
34、:直接寻址:直接寻址:有效地址有效地址1B57H物理地址物理地址21000H+1B57H22B57HMOV AX, 1B57H2024/7/2737微机原理及应用微机原理及应用 吴丽娟吴丽娟寄存器间接寻址寄存器间接寻址(寄存器为寄存器为BX):有效地址有效地址0158H物理地址物理地址21000H+0158H21158HBX寄存器相对间接寻址:寄存器相对间接寻址:有效地址有效地址0158H+1B57H1CAFH物理地址物理地址21000H+1CAFH22CAFH变址寻址变址寻址(寄存器为寄存器为DI):有效地址有效地址10A5H物理地址物理地址21000H+10A5H220A5HMOV AX,
35、 BXMOV AX, BX+1B57HMOV AX, DI2024/7/2738微机原理及应用微机原理及应用 吴丽娟吴丽娟DI寄存器相对变址寻址:寄存器相对变址寻址:有效地址有效地址10A5H+1B57H2BFCH物理地址物理地址21000H+2BFCH23BFCH基址加变址的寻址基址加变址的寻址(BX为基址寄存器为基址寄存器, DI为变址寄存器为变址寄存器):有效地址有效地址0158H+10A5H11FDH物理地址物理地址21000H+11FDH221FDH相对的基址加变址的寻址相对的基址加变址的寻址(BX为基址寄存器为基址寄存器, DI为变址寄存器为变址寄存器):有效地址有效地址0158H
36、+10A5H+1B57H2D54H物理地址物理地址21000H+2D54H23D54H MOV AX, DI+1B57HMOV AX, BX+DIMOV AX, BX+DI+1B57H2024/7/2739微机原理及应用微机原理及应用 吴丽娟吴丽娟例:已知例:已知DS=1000H, ES=2000H, SS=1100H, SI=1010H, BX=0200H, BP=0600H. 请指出下列指令的源操作数字段是什么寻址方式请指出下列指令的源操作数字段是什么寻址方式, 源操作数物理地址是多少。源操作数物理地址是多少。MOV AL, 2400HMOV AX, BPADD AX, ES:BP+10M
37、OV AL, BX+SI+25直接寻址直接寻址, PA=DS*16+2400=12400H寄存器间接寻寄存器间接寻址址, PA=SS*16+BP=11600H寄存器相对寻寄存器相对寻址址, PA=ES*16+BP+0AH=2060AH相对基址加变址寻相对基址加变址寻址址, PA=DS*16+BX+SI+19H=11229H2024/7/2740微机原理及应用微机原理及应用 吴丽娟吴丽娟例:分别指出下列指令的源操作数和目的操作数的例:分别指出下列指令的源操作数和目的操作数的寻址方式。寻址方式。MOV SI, 200MOV CX, DATA:SIADD AX, BXSIADD AX, BXMOV
38、SI, AX源源:立即数寻址立即数寻址 目的目的:寄存器寻址寄存器寻址源源:寄存器间接寻址寄存器间接寻址 目的目的:寄存器寻址寄存器寻址源源:基址加变址寻址基址加变址寻址 目的目的:寄存器寻址寄存器寻址源源:寄存器寻址寄存器寻址 目的目的:寄存器寻址寄存器寻址源源:寄存器寻址寄存器寻址 目的目的:寄存器间接寻址寄存器间接寻址2024/7/2741微机原理及应用微机原理及应用 吴丽娟吴丽娟例:写出以下指令中内存例:写出以下指令中内存 操作数的所在地址。操作数的所在地址。(1) MOV AL, BX+5(2) MOV BP+5, AX(3) INC BYTE PTRSI+3(4) MOV DL,
39、ES:BX+DI(5) MOV BX, BX+SI+2(1)数据段基址寻址数据段基址寻址, (DS)*16+(BX)+5(2)以以BP寄存器进行的间接寻址寄存器进行的间接寻址(堆栈段基址寻址堆栈段基址寻址), (SS)*16+(BP)+5(3)本条指令含义为本条指令含义为:将将SI+3所指存储单元的内容加所指存储单元的内容加1, (DS)*16+(SI)+3(4)基址加变址寻址基址加变址寻址, (ES)*16+ +(BX)+(DI)(5)相对基址加变址寻址相对基址加变址寻址, (DS)*16+ +(BX)+(SI)+22024/7/2742微机原理及应用微机原理及应用 吴丽娟吴丽娟寻址方式小结
40、寻址方式小结寻址方式寻址方式操作数地址操作数地址(PA)指令格式举例指令格式举例立即数寻立即数寻址址操作数由指令给出操作数由指令给出MOV DX, 100H ;(DX)100H寄存器寻寄存器寻址址操作数在寄存器中操作数在寄存器中 ADD AX, BX ;(AX)(AX)+(BX)直接寻址直接寻址操作数的有效地址由指令直接给操作数的有效地址由指令直接给出出MOV AX, 100H ;(AX)(100H)寄存器寄存器间接寻址间接寻址 PA=(DS)16+(BX)或或(SI)或或(DI)PA=(SS) 16+(BP)MOV AX, BX ; (AX)(DS)16+(BX)MOV AX, BP ; (
41、AX)(SS)16+(BP)基址变址基址变址寻址寻址 PA=(DS)16+(BX)+(SI)或或(DI)PA=(SS) 16+(BP) +(SI)或或(DI) MOV AX, BX+DI ;(AX)(DS)16+(BX)+(DI)相对基址相对基址变址寻址变址寻址 PA=(DS)16+(BX)+(SI)或或(DI)+位移量位移量PA=(SS) 16+(BP) +(SI)或或(DI)+位移量位移量 MOV AX, BX+DI+100 ;(AX)(DS)16+(BX)+(DI)+1002024/7/2743指令指令类指令名称指令名称指令助指令助忆符符传送送数据数据/地址地址传送送进出出栈交交换、换码
42、输入入输出出MOV LEA LDS LES LAHF SAHFPUSH PUSHF POP POPF XCHG XLATIN OUT算算术运算运算加、减、比加、减、比较乘、除、乘、除、扩展展十十进制制调整整ADD ADC INC SUB SBB DEC NEG CMP MUL IMUL DIV IDIV CBW CWDAAA AAS DAA DAS AAM AAD位操作位操作逻辑运算运算移位移位循循环移位移位AND OR XOR TEST NOTSAL/SHL SHR SAR ROL ROR RCL RCR串操作串操作串串传送送存取串存取串串比串比较、串、串扫描描MOVS MOVSB MOVS
43、W STOS STOSB STOSW LODS LODSB LODSW CMPS CMPSB CMPSW SCAS SCASB SCASW 程序控制程序控制调用、中断返用、中断返回回无条件无条件转移移循循环控制指令控制指令条件条件转移移CALL RET IRET INT INTOJMPLOOP LOOPE/LOOPZ LOOPNE/LOOPNZ JCXZ JA/JNBE JAE/JNB JB/JNAE JBE/JNA JG/JNLE JE/JZ JNE/JNZJGE/JNL JL/JNGE JLE/JNG JNC JC JNS JS JP/JPE JNP/JPO JNO JO处理器控理器控制制
44、清置清置标志志其它其它CLC STC CMC CLD STD CLI STINOP WAIT HLT 前前缀重复前重复前缀段超越前段超越前缀总线封封锁前前缀REP REPE/REPZ REPNE/REPNZES: DS: CS: SS: LOCKp常用指令常用指令 44微机原理及应用微机原理及应用 吴丽娟吴丽娟5.2 传送类指令传送类指令n传送类指令可以分为传送类指令可以分为4种:种:n通用数据传送指令通用数据传送指令n目标地址传送指令目标地址传送指令n标志位传送指令标志位传送指令nI/O数据传送指令数据传送指令 传送类指令是指令系统中最活跃的一类指令传送类指令是指令系统中最活跃的一类指令,
45、也是条数最多的一类指令也是条数最多的一类指令, 主要用于数主要用于数据的保存及交换等场合。据的保存及交换等场合。2024/7/2745 除了除了SAHF和和POPF指令外指令外, 其余指令执行其余指令执行后对标志位都没有影响。后对标志位都没有影响。指令指令类型类型指令格式指令格式指令功能指令功能状态标志位状态标志位备注备注O S Z A P C通用通用数据数据传送传送MOV 目标目标, 源源PUSH 源源POP 目标目标XCHG 目标目标, 源源XLAT传送字节或字传送字节或字字压入堆栈字压入堆栈字弹出堆栈字弹出堆栈交换字节或字交换字节或字字节翻译字节翻译 . . . . . . 源:源:R、
46、M、立即数、立即数 目标:目标:R、M源:源:R、M目标:目标:R(CS除外除外)、M源:通用源:通用R、M 目标:通用目标:通用R、M目标目标地址地址传送传送LEA 目标目标, 源源LDS目标目标, 源源LES目标目标, 源源装入有效地址装入有效地址装入数据段指针到装入数据段指针到DS装入附加段指针到装入附加段指针到ES 源:内存操作数源:内存操作数 目标:目标:16位通位通用用R源:内存操作数源:内存操作数 目标:目标: 16位通位通用用R源:内存操作数源:内存操作数 目标:目标: 16位通位通用用R标志标志位位 传传送送LAHFSAHFPUSHFPOPF把把FR低字节装入低字节装入AH把
47、把AH内容装入内容装入FR低字节低字节把把FR内容压入堆栈内容压入堆栈从堆栈中弹出从堆栈中弹出FR内内容容 I/O数据数据传送传送IN 累加器累加器, 端口端口OUT 端口端口, 累加累加器器输入字节或字输入字节或字输出字节或字输出字节或字 累加器:累加器:AL或或AX端口:地址端口:地址0255或间接寄存器或间接寄存器DX : 运算结果影响标志位运算结果影响标志位:运算结果不影响标志位:运算结果不影响标志位传送类指令传送类指令46微机原理及应用微机原理及应用 吴丽娟吴丽娟5.2.1 通用数据传送指令通用数据传送指令 通用传送指令中包括最基本的传送指令通用传送指令中包括最基本的传送指令MOV,
48、 堆栈指令堆栈指令PUSH和和POP, 数据交换指令数据交换指令XCHG。 1. 最基本的传送指令最基本的传送指令 MOV指令是形式最简单、用得最多的指令。它可以实现指令是形式最简单、用得最多的指令。它可以实现CPU内部寄存器之间的数据传送、内部寄存器之间的数据传送、寄存器和内存之间的数据传送寄存器和内存之间的数据传送, 还可以把一个立即数送给还可以把一个立即数送给CPU的内部寄存器或者内存单元。的内部寄存器或者内存单元。将数据从一个地址传送到另一个地址;将数据从一个地址传送到另一个地址;数据在传送过程中不发生任何变化;数据在传送过程中不发生任何变化;对标志寄存器的内容无任何影响。对标志寄存器
49、的内容无任何影响。 传送指令的特点传送指令的特点 2024/7/2747微机原理及应用微机原理及应用 吴丽娟吴丽娟 1. 最基本的传送指令最基本的传送指令 MOV BH, DI ;源操作数为寄存器间接寻址;源操作数为寄存器间接寻址 MOV DI, ES:3SI ;源操作数为变址寻址;源操作数为变址寻址, 使用跨段前缀使用跨段前缀 MOV BP, 3BX+SI ;源操作数为基址加变址寻址;源操作数为基址加变址寻址 MOV AL, BL ;BL 中的中的8位数据送位数据送AL MOV ES, DX ;DX 中的中的16位数据送附加段寄存器位数据送附加段寄存器ES MOV AX, BX ;BX和和B
50、X+1 所指的两个内存单元内容送所指的两个内存单元内容送AX MOV DI, AX ;累加器的内容送;累加器的内容送DI和和DI+1所指的两个单元所指的两个单元 MOV CX, 1000 ;把;把1000和和1001两个单元的内容送两个单元的内容送CX2024/7/2748微机原理及应用微机原理及应用 吴丽娟吴丽娟 使用使用MOV指令传送数据时应该注意:指令传送数据时应该注意: 立即数和段寄存器立即数和段寄存器CS不能作为目的操作数;不能作为目的操作数; 如如 MOV CS, AX 或或 MOV 1000H, AX 立即数不能直接传送到段寄存器;立即数不能直接传送到段寄存器; 如如 MOV C
51、S, 1000H 两个存储单元之间不能直接传送数据;两个存储单元之间不能直接传送数据; 如如 MOV 1000H, 2000H 两个段寄存器之间不能直接传送数据两个段寄存器之间不能直接传送数据 如如 MOV DS, ES 2024/7/2749微机原理及应用微机原理及应用 吴丽娟吴丽娟n例如例如:分析如下:分析如下MOV指令的正确性:指令的正确性:MOV AX, BL MOV DS, 1000HMOV BX , SIMOV ES, CSMOV CS, AX;类型不匹配;类型不匹配;不允许立即数送段寄存器;不允许立即数送段寄存器;不允许内存操作数之间传送;不允许内存操作数之间传送;不允许段寄存器
52、之间传送;不允许段寄存器之间传送; CS不能作为目的操作数不能作为目的操作数2024/7/2750微机原理及应用微机原理及应用 吴丽娟吴丽娟补充:堆栈补充:堆栈(STACK) 是按后进先出原则组织的一片存储区域,用来暂存一批需要回避的数据是按后进先出原则组织的一片存储区域,用来暂存一批需要回避的数据或地址。或地址。“后进先出后进先出”n堆栈:堆栈:暂存数据、断点信息或传送信息暂存数据、断点信息或传送信息n用途:用途:n存取原则存取原则:n堆栈段的堆栈段的最大深度最大深度:64KB2024/7/2751微机原理及应用微机原理及应用 吴丽娟吴丽娟堆栈的构造堆栈的构造 一端一端固定固定,具有最大地址
53、的单元,具有最大地址的单元(数据由此向数据由此向上堆积上堆积)一一端端浮浮动动,指指向向最最后后被被压压入入堆堆栈栈的的数数据据所所在在存存储储单单元元(栈顶的位置随堆栈中存放数据多少而变化栈顶的位置随堆栈中存放数据多少而变化)用来指示当前栈顶的位置。用来指示当前栈顶的位置。(压入的数据放入哪个单压入的数据放入哪个单元或从那个单元弹出数据均由元或从那个单元弹出数据均由SP决定决定)堆堆栈栈段段SSBottomXXXXXXXXTopSP初始初始SP1.栈底:栈底:2.栈顶:栈顶:3.堆栈指针:堆栈指针:2024/7/2752微机原理及应用微机原理及应用 吴丽娟吴丽娟8086堆栈的组织堆栈的组织
54、该片存储区域所包含存储单元数,其值有由初始时该片存储区域所包含存储单元数,其值有由初始时SP的值决定的值决定(指指向栈底向栈底+1单元单元)12H34H01954H01955H 如如64KB的的堆堆栈栈段段不不能能满满足足需需要要,可可通通过过修修改改SS来来改改变变当当前前的的堆堆栈栈段段,使使之之指指向向另另一一片片存存储储区区域域,同同时时SP重重新新赋赋值值堆栈段堆栈段:由由SS存放堆栈段段基值以决定其起始地址存放堆栈段段基值以决定其起始地址堆栈段的长度:堆栈段的长度:堆栈是按字组织的,数据的存取均为堆栈是按字组织的,数据的存取均为2字节操作字节操作数据在堆栈段内的存放数据在堆栈段内的
55、存放堆栈区域的扩展:堆栈区域的扩展:2024/7/2753微机原理及应用微机原理及应用 吴丽娟吴丽娟堆栈的三种基本操作堆栈的三种基本操作SS、SP赋值赋值(段的起始位置及长度段的起始位置及长度)SP2 SP;栈顶向上浮动栈顶向上浮动数据数据(SS:SP)(SS:SP) (SS:SP) R/M SP+2 SP数据数据;栈顶向下回落栈顶向下回落1、设置堆栈、设置堆栈2、进栈、进栈把数据压入堆栈,在栈顶进行把数据压入堆栈,在栈顶进行3、出栈、出栈从栈顶取出数据送入从栈顶取出数据送入R/M2024/7/2754微机原理及应用微机原理及应用 吴丽娟吴丽娟n执行堆栈指令执行堆栈指令PUSH和和POP时,指
56、令地址是由时,指令地址是由SP给出当前栈顶的偏移地址,故将给出当前栈顶的偏移地址,故将SP称称为堆栈指针寄存器。为堆栈指针寄存器。SP和和BP在使用上有区别:在使用上有区别:nBP则是用来存放位于堆栈段中的一个数据区基址的偏移地址的,故将则是用来存放位于堆栈段中的一个数据区基址的偏移地址的,故将BP称做基址指针称做基址指针寄存器寄存器。2024/7/2755微机原理及应用微机原理及应用 吴丽娟吴丽娟 86系系列列指指令令系系统统中中提提供供了了专专用用的的堆堆栈栈操操作作指指令令, 其其中中PUSH是是把把字字压压入入堆堆栈栈, POP是是把把字字弹弹出出堆堆栈栈。在在程程序序中中采采用用堆堆
57、栈栈操操作作指指令令时时, 应应预预置置堆堆栈栈段段寄寄存存器器SS、堆堆栈栈指指示示器器SP的的值值, 同同时时, 使使SP的内容为当前堆栈段的栈顶。的内容为当前堆栈段的栈顶。 在在执执行行PUSH指指令令时时, 首首先先, 堆堆栈栈指指示示器器SP自自动动减减2;然然后后, 将将一一个个字字以以源源操操作作数数传传送送至至栈栈顶顶。POP指指令令的的执执行行过过程程正正好好与与PUSH指指令令相相反反, 它它把把由由SP指指出出的的当当前前堆堆栈栈段段的的栈栈顶顶的的一一个个操操作作数数(一个字一个字), 传送到目的操作数中传送到目的操作数中, 然后然后, SP自动加自动加2, 指向新的栈
58、顶。指向新的栈顶。2.堆栈操作指令堆栈操作指令2024/7/2756微机原理及应用微机原理及应用 吴丽娟吴丽娟 POP指令中的目的操作数可以是除代码段寄存器指令中的目的操作数可以是除代码段寄存器CS之外的其它寄存器和存储器。之外的其它寄存器和存储器。在在86系列指令系统中系列指令系统中, 不允许不允许CS寄存器作为目的操作数使用。这是因为寄存器作为目的操作数使用。这是因为, 一旦改一旦改变了代码段寄存器变了代码段寄存器CS的内容的内容, 使程序有了新的当前代码段使程序有了新的当前代码段, 就会导致就会导致CPU从新的从新的CS和和IP给出的毫无意义的地址中去取下一条指令给出的毫无意义的地址中去
59、取下一条指令, 使程序错误运行。使程序错误运行。2.堆栈操作指令堆栈操作指令2024/7/2757 例例如如, 将将16位位通通用用寄寄存存器器CX的的内内容容压压入入堆堆栈栈, 然然后后, 弹弹出出栈栈顶顶至至CX中中, 已已知知: (SS)0200H, (SP)0008H, (CX)12FAH, 其示意图如下图所示。其示意图如下图所示。2.堆栈操作指令堆栈操作指令+20200SS0008SP12FACXSS段段首地址首地址新栈顶新栈顶原栈顶原栈顶12FAH200020062007 2008存储器存储器 12FA16PUSH CX指令的操作过程指令的操作过程58PUSH指令的功能指令的功能微
60、机原理及应用微机原理及应用 吴丽娟吴丽娟59 例如例如, 将将16位通用寄存器位通用寄存器CX的内容压入堆栈的内容压入堆栈, 然后然后, 弹出栈顶至弹出栈顶至CX中中, 已知已知: (SS)0200H, (SP)0008H, (CX)12FAH, 其示意图如下图其示意图如下图5.4和图和图5.5所示。所示。2.堆栈操作指令堆栈操作指令+20200SS0006SPSS段段首地址首地址原栈顶原栈顶12FAH新栈顶新栈顶200020062007 2008存储器存储器 12FA12FACX+16POP CX指令的操作过程指令的操作过程60POP指令的功能指令的功能微机原理及应用微机原理及应用 吴丽娟吴
61、丽娟61微机原理及应用微机原理及应用 吴丽娟吴丽娟n例例 设设SS=1234H, SP=0FEFEH, DX=0314H, AX=3010H。问:问: 1)当前栈顶的物理地址。当前栈顶的物理地址。 2)执行执行 PUSH DX PUSH AX POP AX 后后SP=? (1) MOV CX, AX MOV AX, BX MOV BX, CX (2)PUSH AX PUSH BX POP AX POP BX解:解: 1)SS16+SP=12340+0FEFE=2223EH 2)SP2 SP=0FEFCH 例例 写出将写出将AX 和和 BX中内容互换有哪几种方法中内容互换有哪几种方法2024/7
62、/2762微机原理及应用微机原理及应用 吴丽娟吴丽娟n例例 设堆栈指针设堆栈指针SP的初值为的初值为2000H, AX3000H, BX5000H, 试问:试问:n(1) 执行指令执行指令PUSH AX后后SP?n(2) 再执行再执行 PUSH BXn POP AXn后后 SP?AX?BX?解:解: 1) 执行指令执行指令PUSH AX后后 SP2000H2=1FFEH 2) SP=1FFEH , AX5000H, BX=5000H005000302000H2024/7/2763微机原理及应用微机原理及应用 吴丽娟吴丽娟 3. 交换指令交换指令 交交换换指指令令XCHG可可以以实实现现字字节节
63、交交换换, 也也可可以以实实现现字字交交换换。交交换换过过程程可可以以在在CPU的的内内部部寄寄存存器器之之间间进进行行, 也也可可以以在在内内部部寄寄存存器器和和存存储储单单元元之之间间进进行行, 但但不不能能在在两两个个存存储储单单元元之之间间执执行行数数据交换过程。例如:据交换过程。例如: XCHGAL, BL ;AL和和BL之间进行字节交换之间进行字节交换 XCHGBX, CX ;BX和和CX之间进行字交换之间进行字交换 XCHG 2530, CX;CX和和2530, 2531两单元的内容交换两单元的内容交换 MOV AX, 5678H;(AX)=5678H MOV BX, 0FFFF
64、H;(BX)=0FFFFH XCHG AX, BX ;(AX)=0FFFFH , ( BX)=5678H不能使用不能使用CS、IP作作为操作数为操作数2024/7/2764XCHG指令的功能指令的功能微机原理及应用微机原理及应用 吴丽娟吴丽娟65微机原理及应用微机原理及应用 吴丽娟吴丽娟4. 换码指令换码指令 XLAT是一条完成字节翻译功能的指令是一条完成字节翻译功能的指令, 称为换码指令。它可以使累加器中的一个值变换为称为换码指令。它可以使累加器中的一个值变换为内存表格中的某一个值内存表格中的某一个值, 一般用来实现编码制的转换。使用换码指令时一般用来实现编码制的转换。使用换码指令时, 要求
65、要求BX寄存器指向寄存器指向表的首地址表的首地址, AL中为表中某一项与表格首地址之间的偏移量中为表中某一项与表格首地址之间的偏移量, 指令执行时指令执行时, 会将会将BX和和AL中的中的值相加值相加, 把得到的值作为地址把得到的值作为地址, 然后将此地址所对应的单元中的值取到然后将此地址所对应的单元中的值取到AL中去。中去。2024/7/2766微机原理及应用微机原理及应用 吴丽娟吴丽娟图图5.6表示了换码指令的功能。表示了换码指令的功能。XLAT指令就是通过查表方式来完成翻译功能的指令就是通过查表方式来完成翻译功能的, 因此因此, 在执在执行该指令之前行该指令之前, 必须建立好一张翻译表必
66、须建立好一张翻译表, 该表的最大容量为该表的最大容量为256字节。字节。图图5.6换换码码指指令令的的功功能能2024/7/2767微机原理及应用微机原理及应用 吴丽娟吴丽娟 执行执行XLAT指令可将任意一个十进制数翻译成指令可将任意一个十进制数翻译成7段显示码段显示码, 其操作步骤如下:其操作步骤如下:(1) 将译码表定位到某个逻辑段的一片连续地址中将译码表定位到某个逻辑段的一片连续地址中, 并将其表首址的偏移地址置入并将其表首址的偏移地址置入BX寄存器中。寄存器中。(2) 将待翻译的十进制数字送入将待翻译的十进制数字送入AL寄存器中。寄存器中。(3) 执行执行XLAT指令。指令。 例如例如
67、, 假设这段数据存放在偏移地址为假设这段数据存放在偏移地址为2000H开始的内存中开始的内存中, 取出取出“3”所对应的所对应的7段码段码, 用如下用如下几条程序助记符即可完成:几条程序助记符即可完成: MOVBX, 2000H MOVAL, 3 XLAT2024/7/2768XLAT指令的功能指令的功能微机原理及应用微机原理及应用 吴丽娟吴丽娟69微机原理及应用微机原理及应用 吴丽娟吴丽娟5.2.2 目标地址传送指令目标地址传送指令 这是一类专用于传送地址码的指令这是一类专用于传送地址码的指令, 用来传送操作数的段地址或偏移地址用来传送操作数的段地址或偏移地址, 共包含以下共包含以下3条指令
68、:条指令: 1. 取有效地址指令取有效地址指令 取有效地址指令取有效地址指令LEA的功能是将存储器地址送到一个寄存器的功能是将存储器地址送到一个寄存器. LEA指令格式中指令格式中, 要求源要求源操作数必须为内存单元地址操作数必须为内存单元地址, 目的操作数必须为一个目的操作数必须为一个16位的通用寄存器。位的通用寄存器。1取有效地址指令取有效地址指令 LEA2取偏移地址及数据段首址指令取偏移地址及数据段首址指令 LDS3取偏移地址及附加数据段指令取偏移地址及附加数据段指令 LES2024/7/2770微机原理及应用微机原理及应用 吴丽娟吴丽娟5.2.2 目标地址传送指令目标地址传送指令这条指
69、令常用来使一个寄存器作为地址指针。例如:这条指令常用来使一个寄存器作为地址指针。例如:LEAAX, 2728;将;将2728单元的偏移量送单元的偏移量送AX, 指令执行后指令执行后, AX=2728LEABX, BP+SI;指令执行后;指令执行后, BX中的内容为中的内容为BP+SI的值的值LEASP, 0482;使堆栈指针;使堆栈指针SP为为482例如:主存偏移地址的获取。例如:主存偏移地址的获取。MOV BX, 0100H;(BX)=0100HMOV SI, 0210H;(SI) =0210HLEA BX, 1234BX+SI; (BX)=1544H注:注: LEA BX, 1234BX+
70、SI等同于等同于LEA BX, BX+SI+12342024/7/2771微机原理及应用微机原理及应用 吴丽娟吴丽娟 如如 LEA BX , 2700H ;将;将(相对于相对于DS)偏移地址偏移地址2700H送送 BX ;(BX)= 2700H例:设例:设 DS=3000H, BX=2000H, SI=1000H, 问问 (1)执行执行 LEA AX, BX+SI+1000H后后, AX=? (2)执行执行 MOV AX, BX+SI+1000H后后, AX=?8DH80H00H10H56H12HDS 30000HBX 2000HSI 1000H+ 1000H 34000H34000HEA40
71、00HAX操作码位移量代码段数据段LEA与与MOV指令的区别指令的区别4000H1256H即:即:MOV指令传送操作数的内容指令传送操作数的内容, LEA传送操作传送操作数的地址。数的地址。2024/7/2772微机原理及应用微机原理及应用 吴丽娟吴丽娟 2. 将地址指针装到将地址指针装到DS和另一个寄存器的指令和另一个寄存器的指令 LDS指指令令的的功功能能是是把把4个个字字节节的的地地址址指指针针(其其中中包包括括一一个个段段地地址址和和一一个个偏偏移移量量)传传送送到到两两个个目的寄存器目的寄存器, 其中其中, 地址指针的后两个字节即段地址一定送到地址指针的后两个字节即段地址一定送到DS
72、中。中。 比比如如, 设设2130H2133H这这4个个单单元元中中存存放放着着一一个个地地址址, 2130H和和2131H中中为为地地址址的的偏偏移移量量, 2132H和和2133H中为地址的段值中为地址的段值, 执行指令:执行指令: LDS DI, 2130H 使使2130H和和2131H中的偏移量送到中的偏移量送到DI, 2132H和和2133H中的段值送到中的段值送到DS。2024/7/2773微机原理及应用微机原理及应用 吴丽娟吴丽娟2. 将地址指针装到将地址指针装到DS和另一个寄存器的指令和另一个寄存器的指令 设设1000H、1001H、1002H、1003H这四个存储单元存放的地
73、址分别为这四个存储单元存放的地址分别为12H 、34H、 56H 、78H, 则执行完则执行完 LDS DI, 1000H 后后, DS=?, DI=?答案:答案:DS=7856H, DI=3412H2024/7/2774微机原理及应用微机原理及应用 吴丽娟吴丽娟3. 将地址指针装到将地址指针装到ES和另一个寄存器的指令和另一个寄存器的指令 LES指令与指令与LDS指令的操作基本相同指令的操作基本相同, 所不同仅在于将源操作数所指向地址指针中的段基址所不同仅在于将源操作数所指向地址指针中的段基址(后两个字节后两个字节)传送到传送到ES段寄存器段寄存器, 而不是而不是DS段寄存器。段寄存器。20
74、24/7/2775微机原理及应用微机原理及应用 吴丽娟吴丽娟LDS或或LES指令将源操作数指定的指令将源操作数指定的4个连续字节单元内容分别送入指令指定的寄存器以及个连续字节单元内容分别送入指令指定的寄存器以及DS或或ES中。中。其中:低其中:低16位送到一个指定的字寄存器位送到一个指定的字寄存器, 高高16位送到位送到DS或或ES中。中。57H13H68H24H例:例:(DS)=C000H, (C2480H)=1357H, (C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H 13 57 SI 24 68 DSLDS SI, 24802024/7/27
75、76微机原理及应用微机原理及应用 吴丽娟吴丽娟5.2.3 标志位传送指令标志位传送指令 可完成标志位传送的指令共有可完成标志位传送的指令共有4条:条:1读取标志指令读取标志指令LAHF2设置标志指令设置标志指令SAHF3标志寄存器进栈指令标志寄存器进栈指令PUSHF4标志寄存器出栈指令标志寄存器出栈指令POPF2024/7/2777微机原理及应用微机原理及应用 吴丽娟吴丽娟图图5.7 LAHF指令的功能指令的功能1. 读取标志指令读取标志指令 读取标志指令读取标志指令LAHF被执行时被执行时, 将标志寄存器中的低将标志寄存器中的低8位传送到位传送到AH中中, 如图如图5.7所示。所示。D5 D
76、3 D1三位任意!三位任意!2024/7/2778微机原理及应用微机原理及应用 吴丽娟吴丽娟2. 设置标志指令设置标志指令 设置标志指令设置标志指令SAHF被执行时被执行时, 将将AH寄存器的相应位传送到标志寄存器的低寄存器的相应位传送到标志寄存器的低8位。用下图表示。位。用下图表示。2024/7/2779微机原理及应用微机原理及应用 吴丽娟吴丽娟 3. 对标志寄存器的压入堆栈指令和弹出堆栈指令对标志寄存器的压入堆栈指令和弹出堆栈指令 PUSHF指指令令将将标标志志寄寄存存器器的的值值压压入入堆堆栈栈顶顶部部, 同同时时, 堆堆栈栈指指针针SP的的值值减减2, 此此指指令令在在执执行行时时标志
77、寄存器的值不变。标志寄存器的值不变。 POPF指指令令的的功功能能正正好好相相反反, 此此指指令令在在执执行行时时从从堆堆栈栈中中弹弹出出一一个个字字送送到到标标志志寄寄存存器器中中, 同同时时堆栈指针堆栈指针SP的值加的值加2。PUSHFPOP AXOR AH, 01HPUSH AXPOPF利利用用这这两两条条指指令令可可以以方方便便的的修修改改FR中中某某一一位位。如如, 86/8088系系统统中中无无直直接接能能修修改改TF标标志志位位的的指指令令, 可用右边程序实现:可用右边程序实现:2024/7/2780微机原理及应用微机原理及应用 吴丽娟吴丽娟5.2.4 输入输入/输出数据传送指令
78、输出数据传送指令输入输入/输出指令用来完成累加器输出指令用来完成累加器(AX/AL)与与I/O端口之间的数据传送端口之间的数据传送. 执行输入指令时执行输入指令时, CPU可以从一个可以从一个8位端口读入一个字节到位端口读入一个字节到AL中中, 也可以从两个连续的也可以从两个连续的8位位端口读一个字到端口读一个字到AX中。中。 执行输出指令时执行输出指令时, CPU可以将可以将AL中的一个字节写到一个中的一个字节写到一个8位端口中位端口中, 或者将或者将AX中的一个字中的一个字写到两个连续的写到两个连续的8位端口中。位端口中。CPU外设外设I/OI/OPORT2024/7/2781 IN有四种
79、形式:有四种形式:(1)语句格式:语句格式:IN AL, PORT 功能:功能:(PORT)AL(2)语句格式:语句格式:IN AX, PORT 功能:功能:(PORT)AXINAL, 50H;将;将50H端口的字节读入端口的字节读入ALINAX, 70H;将;将70H、71H两端口的值读入两端口的值读入AX, 70H端口的内容读入端口的内容读入AL, 71H端口的内容端口的内容读入读入AH源操作数源操作数“50H、70H ”从形式上来说是立即数从形式上来说是立即数, 实际上是端口地址实际上是端口地址, 因而指令的寻址方式为因而指令的寻址方式为直接寻址。直接寻址。“MOV”指令中指令中, 直接
80、寻址要加中括号直接寻址要加中括号, 输入输出指令不加。如输入输出指令不加。如 MOV AL, 2000H; IN AL, 25H 这两句这两句: 直接直接IN指令指令(端口地址只能端口地址只能 8 位位)间接间接IN指令指令(口地址是口地址是16 位位, 也可也可8 位。位。) MOV DX, 0FFF2H IN AL , DX82微机原理及应用微机原理及应用 吴丽娟吴丽娟(3)语句格式:语句格式:IN AL, DX ;从从DX所指的端口中读取一个字节所指的端口中读取一个字节 功能:功能:(DX)AL(4)语语句句格格式式:IN AX, DX; 从从DX和和DX+1所所指指出出的的两两个个端端
81、口口中中读读取取一一个个字字, 较较低低地地址址端端口口中中的的值值读到读到AL中中, 较高地址端口中的值读到较高地址端口中的值读到AH中中; 功能:功能:(DX)AL注注意意: 这这两两条条指指令令为为寄寄存存器器间间接接寻寻址址, 但但对对DX不不加加中中括括号号。如如 MOV AL, BX IN AL, DX2024/7/2783微机原理及应用微机原理及应用 吴丽娟吴丽娟OUT有四种形式:有四种形式:(1)语句格式:语句格式:OUT PORT, AL 功能:功能:(AL)PORT(2)语句格式:语句格式:OUT PORT, AX 功能:功能:(AX)PORTOUT44H, AL;将;将A
82、L中的一个字节输出到中的一个字节输出到44H端口端口OUT80H, AX;将;将AX中的内容输出到中的内容输出到80H, 81H两端口两端口, AL中的内容输出到中的内容输出到80H, AH中的中的内容输出到内容输出到81Hn直接直接OUT指令指令n(端口地址只能(端口地址只能 8 位)位)2024/7/2784微机原理及应用微机原理及应用 吴丽娟吴丽娟(3)语句格式:语句格式:OUT DX, AL ;将将AL中的字节输出到中的字节输出到DX所指的端口所指的端口(4)语句格式:语句格式:OUT DX, AX ;将将AL中的字节输出到中的字节输出到DX所指的端口中所指的端口中, 同时将同时将AH
83、中的字节输出中的字节输出到到DX+1所指的端口中所指的端口中n间接间接OUT指令指令(端口地址是端口地址是16 位位, 也可也可8 位。位。)n MOV DX, 87FEH MOV DX , 80Hn MOV AL , 40H OUT DX , ALn OUT DX , AL例例1例例22024/7/2785微机原理及应用微机原理及应用 吴丽娟吴丽娟 在在计计算算机机内内部部表表示示二二进进制制数数的的方方法法通通常常称称为为数数值值编编码码, 把把一一个个数数及及其其符符号号在在机机器器中中的的表表示示加加以以数值化数值化, 这样的数称为机器数。这样的数称为机器数。 机机器器数数有有两两个个
84、基基本本特特点点, 其其一一, 数数的的符符号号数数值值化化。整整数数有有正正数数和和负负数数, 因因为为计计算算机机只只能能表表示示0、1两两种种状状态态, 数数据据的的正正号号“+”或或负负号号“”, 在在机机器器里里就就用用一一位位二二进进制制的的0或或1来来区区别别。通通常常这这个个符符号号放放在在二二进进制制数数的的最最高高位位, 称称符符号号位位, 以以0代代表表符符号号“+”, 以以1代代表表符符号号“”, 这这样样正正负负符符号号就就被被数数值值化化了了。因因为为有有符符号号占占据据一一位位, 数数的的形形式式值值就就不不等等于于真真正正的的数数值值, 带带符符号号位位的的机机
85、器器数数对对应应的的数数值称为机器数的真值。值称为机器数的真值。补充补充: 机器数机器数2024/7/2786微机原理及应用微机原理及应用 吴丽娟吴丽娟 机机器器数数的的另另一一个个特特点点是是二二进进制制的的位位数数受受机机器器设设备备的的限限制制。机机器器内内部部设设备备一一次次能能表表示示的的二二进进制制位位数数叫叫机机器器的的字字长长, 一一台台机机器器的的字字长长是是固固定定的的。字字长长8位位叫叫一一个个字字节节(Byte), 现现在在机机器器字字长长一一般般都是字节的整数倍都是字节的整数倍, 如字长如字长8位、位、16位、位、32位、位、64位。位。 n 字长为字长为8位时位时,
86、 D7为符号位;字长为为符号位;字长为16位时位时, D15为符号位。如为符号位。如, 一个一个8位字长的计算机中位字长的计算机中, 带符带符号数的格式如下:号数的格式如下:n D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0n正数正数 负数负数 n 其中其中, 最高位最高位D7是符号位是符号位, 其余其余D6 D0是数值位。是数值位。012024/7/2787微机原理及应用微机原理及应用 吴丽娟吴丽娟 1、机器数的范围、机器数的范围 机器数的范围由计算机的硬件决定。机器数的范围由计算机的硬件决定。 当当使使用用8位位寄寄存存器器的的时时候候, 字
87、字长长为为8位位, 所所以以一一个个无无符符号号整整数数的的最最大大值值是是1111 1111B=255D, 此时称机器数的范围为此时称机器数的范围为0 255。 当当使使用用16位位寄寄存存器器的的时时候候, 字字长长为为16位位, 所所以以一一个个无无符符号号整整数数的的最最大大值值是是1111 1111 1111 1111B=65535D=FFFFH, 此时称机器数的范围为此时称机器数的范围为0 65535。2、机器数中小数点的位置、机器数中小数点的位置 机机器器中中, 小小数数点点的的位位置置通通常常有有两两种种约约定定:一一种种规规定定小小数数点点的的位位置置固固定定不不变变, 这这
88、时时的的机机器器数数称为称为“定点数定点数”;另一种规定小数点的位置可以浮动;另一种规定小数点的位置可以浮动, 这时的机器数称为这时的机器数称为“浮点数浮点数”。2024/7/2788 机器数的三种表示方法:原码、反码、补码。机器数的三种表示方法:原码、反码、补码。 原码表示法:正数的符号位用原码表示法:正数的符号位用“0”表示表示, 负数的符号位用负数的符号位用“1”表示表示, 绝对值的编码与无符号绝对值的编码与无符号数编码规则相同。数编码规则相同。例:例:x = + 1010011, 即即x原原= 0 x = 1010011, 即即x原原= 1对于对于8 位二进制原码:位二进制原码:1、0
89、有两种表示形式有两种表示形式 正零:正零:+0原原= 00000000 , 负零:负零:0原原= 12、8位二进制原码所能表示的数值范围为位二进制原码所能表示的数值范围为127+127, 即:即: +127原原= 01111111 , 127原原= 1原码表示的整数范围是原码表示的整数范围是 (2n11) +(2n11 ), 其中其中n为机器字。则:为机器字。则:8位二进制原码所能表示的数值范围为位二进制原码所能表示的数值范围为127+12716位二进制原码所能表示的数值范围为位二进制原码所能表示的数值范围为32767+3276789 机器数的三种表示方法:原码、反码、补码。机器数的三种表示方
90、法:原码、反码、补码。 反码表示法:正数的反码表示与原码相同反码表示法:正数的反码表示与原码相同, 最高位为符号位最高位为符号位, 用用“0”表示表示, 其余位为数值位其余位为数值位, 如如+4反反= 00000100 。负数的反码。负数的反码, 表示为该数对应的正数按位取反表示为该数对应的正数按位取反(包括符号位包括符号位)。如:如: +4反反= 00000100 = +4原原= 0 4反反= 11111011对于对于8 位二进制反码:位二进制反码:1、0有两种表示形式有两种表示形式 正零:正零:+0反反= 00000000 , 负零:负零:0反反= 12、8位二进制反码所能表示的数值范围为
91、位二进制反码所能表示的数值范围为127+127, 即:即: +127反反= 01111111 , 127反反= 190 机器数的三种表示方法:原码、反码、补码。机器数的三种表示方法:原码、反码、补码。 补码表示法:除非特别声明,带符号数都默认由补码表示。补码表示法:除非特别声明,带符号数都默认由补码表示。 正数的补码表示与原码相同正数的补码表示与原码相同, 当当x0, 即即对于正数而言于正数而言, x补补=x反反=x原原, 最高位为符号位最高位为符号位, 用用“0”表示表示, 其余位为数值位其余位为数值位, 如如+4补补=0000 0100。 负数的补码等于其相应的反码加负数的补码等于其相应的
92、反码加1, 即当即当x0时, x补补=x反反+1。如:如: 4补补= 4反反+1=1111 1011+1=1111 1100对于对于8 位二进制补码:位二进制补码:1、0有表示是唯一的:有表示是唯一的:+0补补= 0补补=0000 0000是是 2n1 +(2n11 ), 其中其中n为机器字。则:为机器字。则:8位二进制补码所能表示的数值范围为位二进制补码所能表示的数值范围为: 无符号数无符号数0 255, 带符号数带符号数 2、8位二进制补码所能表示的数值范围为位二进制补码所能表示的数值范围为128+127, 即:即: +127补补= 0111 1111 , 128补补= 1补码表示的整数范
93、围补码表示的整数范围128+12716位二进制补码所能表示的数值范围为位二进制补码所能表示的数值范围为: 无符号数无符号数0 65535, 带符号数带符号数 32768+32767当运算结果超出这个范围时当运算结果超出这个范围时, 就不能正确表示数了就不能正确表示数了, 此时称溢出。此时称溢出。91微机原理及应用微机原理及应用 吴丽娟吴丽娟 例例: (AX)=0400H, (BL)=94H, 作为无符号数和带符号数时作为无符号数和带符号数时, (AX)和和 (BL)十进制分别是多少?十进制分别是多少? 解解: (1) (AX) = 0000 0100 0000 0000= 1024(10)所以
94、所以, (AX)为无符号数的为无符号数的1024D, 带符号数的带符号数的+1024D。 (2) (BL)=94H = 1001 0100= 148(10) x = (001 0100求反求反+1)B = (110 1011+1)B = 110 1100 B = 108D所以所以, (BL)为无符号数的为无符号数的148D, 带符号数的带符号数的108D。2024/7/2792微机原理及应用微机原理及应用 吴丽娟吴丽娟 例例:求求0D8H、0FFH作为无符号数和带符号数时作为无符号数和带符号数时, 十进制分别是多少?十进制分别是多少? 解解: (1)0D8H= 1101 1000B= 216(
95、10) x = (101 1000求反求反+1)B = (010 0111+1)B = 010 1000 B = 40 所以作为用补码表示的带符号数所以作为用补码表示的带符号数, 0D8H表示的十进制是表示的十进制是40. (2)0FFH= 1111 1111B= 255(10) x = (111 1111求反求反+1)B = (000 0000+1)B = 000 0001 B = 1 所以作为用补码表示的带符号数所以作为用补码表示的带符号数, 0FFH表示的十进制是表示的十进制是1.2024/7/2793微机原理及应用微机原理及应用 吴丽娟吴丽娟 例例:设字长设字长8位,试写出位,试写出29的补码,并用十六进制表示。的补码,并用十六进制表示。 29补补= 29反反+1 = +29反反按位取反按位取反+1 = +29原原按位取反按位取反+1 = 0001 1101 B按位取反按位取反+1 = 1110 0010 B+1 = 1110 0011 B = 0E3 H2024/7/2794