《第3章8086CPU指令系统(1)-精品文档资料系列.ppt》由会员分享,可在线阅读,更多相关《第3章8086CPU指令系统(1)-精品文档资料系列.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3章章 8086CPU指令系统指令系统第第3章章 8086CPU指令系统指令系统2022-7-212本本 章章 要要 求求 全面掌握全面掌握 80868086指令系统的使用,包括指令的功指令系统的使用,包括指令的功能、寻址方式及其书写格式、对标志位的影响、使用能、寻址方式及其书写格式、对标志位的影响、使用注意事项。注意事项。 掌握掌握汇编语言程序设计所汇编语言程序设计所必须必须的伪指令,并由此的伪指令,并由此构成汇编语言程序的完整结构。构成汇编语言程序的完整结构。 了解了解变量、常量及伪指令的使用和一些常用的基变量、常量及伪指令的使用和一些常用的基本程序设计方法。本程序设计方法。 通过阅读
2、程序,通过阅读程序,了解了解各种跳转指令和循环控制指各种跳转指令和循环控制指令在分支程序设计与循环程序设计中的合理使用,特令在分支程序设计与循环程序设计中的合理使用,特别要注意应避免出现死循环。别要注意应避免出现死循环。第第3章章 8086CPU指令系统指令系统2022-7-213 了解了解子程序调用过程中参数的各种传递方式及子程序调用过程中参数的各种传递方式及其实现,以及其实现,以及堆栈堆栈在调用与返回过程中的使用。在调用与返回过程中的使用。 字符串操作是汇编语言程序设计中的两个难点,字符串操作是汇编语言程序设计中的两个难点,要求要求了解了解字符串操作指令的使用。(字符串操作指令的使用。(*
3、 * * *选学选学* * * *) 第第3章章 8086CPU指令系统指令系统2022-7-2143.1 3.1 汇编语言指令汇编语言指令一一. .汇编语言与机器语言的相关概念汇编语言与机器语言的相关概念 汇编语言与机器语言属于低级语言,它们与高汇编语言与机器语言属于低级语言,它们与高级语言有较大的区别,级语言有较大的区别,汇编语言中的语句与机器的型汇编语言中的语句与机器的型号密切相关号密切相关。不同的。不同的CPUCPU具有不同的指令系统,程序具有不同的指令系统,程序语句的书写格式也就不同,如语句的书写格式也就不同,如Intel 8086Intel 8086系列系列CPUCPU、Intel
4、 8031Intel 8031系列单片系列单片CPUCPU等。等。第第3章章 8086CPU指令系统指令系统2022-7-215高级语言高级语言成年人成年人汇编语言汇编语言儿童儿童只需写出做什么只需写出做什么必须写明详细的操必须写明详细的操作步骤作步骤机器语言机器语言机器人机器人将步骤用二进制语将步骤用二进制语言书写言书写第第3章章 8086CPU指令系统指令系统2022-7-2161.1.机器语言机器语言 机器(机器(CPUCPU)能直接认识的一种二进)能直接认识的一种二进制代码语言。能完成某个功能的一组二进制代码制代码语言。能完成某个功能的一组二进制代码就是一条机器指令。就是一条机器指令。
5、二、计算机语言的种类二、计算机语言的种类第第3章章 8086CPU指令系统指令系统2022-7-217如:如:B0HB0H12H12H; ;这这一组二进制代码一组二进制代码,就是告诉,就是告诉CPUCPU将将AL 12HAL 12H。称为一条指令代码,或者机器语言代码。称为一条指令代码,或者机器语言代码。05H05H02H02H00H00H; ;这这一组二进制代码一组二进制代码,告诉,告诉CPUCPU将(将(AXAX)+2 AX+2 AX。第第3章章 8086CPU指令系统指令系统2022-7-2182.2.机器语言程序机器语言程序 采用机器语言编写的程序,即二进采用机器语言编写的程序,即二进
6、制代码程序。制代码程序。优点:优点:程序送入计算机后,程序送入计算机后,CPUCPU可以直接执行,可以直接执行,不需翻译。不需翻译。缺点:缺点:不易书写,难以记忆,编写程序十分困难。不易书写,难以记忆,编写程序十分困难。第第3章章 8086CPU指令系统指令系统2022-7-2193.3.汇编语言汇编语言 为了克服机器语言不易书写、记为了克服机器语言不易书写、记忆复杂等缺点,人们用一组字母、数字和符忆复杂等缺点,人们用一组字母、数字和符号来代替一条二进制代码指令,这些表示指号来代替一条二进制代码指令,这些表示指令的符号称为令的符号称为助记符助记符。 这种用一组符号代替一条指令来这种用一组符号代
7、替一条指令来编写程序时采用的语言,称为汇编语言。编写程序时采用的语言,称为汇编语言。第第3章章 8086CPU指令系统指令系统2022-7-2110上例中:上例中:B0HB0H12H12H05H05H02H02H00H00H用用MOV AL , 12HMOV AL , 12H 代替代替用用ADD AX , 0002HADD AX , 0002H 代替代替称为一条汇编指令,分为操作码和操作数称为一条汇编指令,分为操作码和操作数第第3章章 8086CPU指令系统指令系统2022-7-2111优点:优点:比机器指令清晰,书写容易,记忆比机器指令清晰,书写容易,记忆方便。方便。缺点:缺点:CPUCPU
8、不能直接执行。必须经过汇编,不能直接执行。必须经过汇编,将其翻译成机器语言格式后将其翻译成机器语言格式后CPUCPU才能执行。才能执行。第第3章章 8086CPU指令系统指令系统2022-7-21124.4.汇编语言程序汇编语言程序 用汇编指令编写的程序称为汇编用汇编指令编写的程序称为汇编语言语言源程序源程序。这种编程方法称为汇编语言程。这种编程方法称为汇编语言程序设计。序设计。汇编语言源程序名必须为汇编语言源程序名必须为文件文件名名.ASM.ASM。 把汇编语言源程序翻译成机器把汇编语言源程序翻译成机器语言程序的过程称为语言程序的过程称为汇编汇编。 把汇编语言源程序翻译成机器把汇编语言源程序
9、翻译成机器语言程序的系统程序称为语言程序的系统程序称为汇编程序汇编程序。80868086宏宏汇编程序为汇编程序为MASM.EXEMASM.EXE。第第3章章 8086CPU指令系统指令系统2022-7-2113如:如:汇编源程序汇编源程序MOV AL , 12HMOV AL , 12HADD AX , 0002HADD AX , 0002H机器语言源程序机器语言源程序05 02 0005 02 00B0 12B0 12汇编汇编汇编程序为汇编程序为MASM.EXEMASM.EXE在在DEBUG.EXEDEBUG.EXE下进行下进行反汇编反汇编第第3章章 8086CPU指令系统指令系统2022-7
10、-2114从汇编语言源程序到可执行程序所经过的处理过程从汇编语言源程序到可执行程序所经过的处理过程用全屏幕编辑软件编辑汇用全屏幕编辑软件编辑汇编语言源程序编语言源程序 文件名文件名.ASM.ASM用汇编程序用汇编程序MASM.EXEMASM.EXE对源程序对源程序 文件名文件名.ASM.ASM 进行汇编进行汇编有语法错误有语法错误吗?吗?在磁盘上形成目标程序文件在磁盘上形成目标程序文件 文件名文件名.OBJ.OBJ用连接程序用连接程序LINK.EXELINK.EXE对对 文件名文件名.OBJ.OBJ 进行连接进行连接有错误吗?有错误吗?在磁盘上形成了可执行文件在磁盘上形成了可执行文件 文件名文
11、件名.EXE.EXE 有有没没有有没没第第3章章 8086CPU指令系统指令系统2022-7-2115二二. .汇编语言程序中语句的种类汇编语言程序中语句的种类1. 1. 指令语句:指令语句:汇编后能产生机器语言代码,是汇编后能产生机器语言代码,是CPU能执行的语句。能执行的语句。2. 2. 伪指令语句:伪指令语句:完成汇编程序要完成的具体操完成汇编程序要完成的具体操作,不产生机器语言代码,主要用于常量、变作,不产生机器语言代码,主要用于常量、变量、符号以及段的定义等。量、符号以及段的定义等。* *3. 3. 宏指令语句宏指令语句: :是用户自己定义的一条能完成是用户自己定义的一条能完成某一特
12、定功能的新指令,是若干指令的集合。某一特定功能的新指令,是若干指令的集合。第第3章章 8086CPU指令系统指令系统2022-7-2116三三. .汇编语言中语句的组成汇编语言中语句的组成 汇编语言源程序(文件名汇编语言源程序(文件名.ASM.ASM)中每条语句由四)中每条语句由四部分组成:部分组成:标识符标识符操作助记符操作助记符操作数操作数注释注释 标识符标识符 操作助记符操作助记符空格空格 操作数操作数 ;注释;注释 第第3章章 8086CPU指令系统指令系统2022-7-2117 :指出该条语句要:指出该条语句要做什么,是做什么,是必须有必须有的部分。的部分。 :在指令语句在指令语句中
13、为标号名,中为标号名,以冒号结以冒号结尾尾;在伪指令语句中为变量名或者段名,;在伪指令语句中为变量名或者段名,以空格以空格结尾结尾。 :指出该条语句的操作对象,有些指:指出该条语句的操作对象,有些指令可以没有操作数,令可以没有操作数,若有多个操作数以逗号分隔。若有多个操作数以逗号分隔。 :对该条语句进行必要的注解。:对该条语句进行必要的注解。 例:例:L1: MOV AL,08HL1: MOV AL,08H ADD AL,05H ;ADD AL,05H ;实现两个数相加实现两个数相加 第第3章章 8086CPU指令系统指令系统2022-7-2118 第一个字符必须是字母,不能为数字,总字符第一
14、个字符必须是字母,不能为数字,总字符个数不能超过个数不能超过3131个。个。 在给标识符起名时,不能用在给标识符起名时,不能用80868086指令系统中的指令系统中的专用符来给标识符起名称,如专用符来给标识符起名称,如 ADDADD、MOVMOV等。等。 起名时,尽量起的有点意义。起名时,尽量起的有点意义。汇编语言中对标识符的取名约定:汇编语言中对标识符的取名约定:第第3章章 8086CPU指令系统指令系统2022-7-2119四四. .汇编语言中的常数与表达式汇编语言中的常数与表达式 在汇编语言程序中,语句中的操作数项在汇编语言程序中,语句中的操作数项既可以是常数或表达式(立即数),也可以既
15、可以是常数或表达式(立即数),也可以是指明操作数是指明操作数所在地址所在地址的一种说明。如果操的一种说明。如果操作数是常数或表达式,则有以下几种形式:作数是常数或表达式,则有以下几种形式:第第3章章 8086CPU指令系统指令系统2022-7-2120如:将(如:将(ALAL) 1212,则有:,则有:MOV AL , MOV AL , 12D12D ;12 ;12为十进制数,为十进制数,D D可忽略可忽略MOV AL , MOV AL , 0CH0CH ;0CH ;0CH为十六进制数为十六进制数MOV AL , MOV AL , 00001100B00001100B ;00001100B ;
16、00001100B为二进制数为二进制数MOV AL , MOV AL , 14O14O ; 14O ; 14O为八进制数为八进制数1.1.数值常数数值常数第第3章章 8086CPU指令系统指令系统2022-7-21212.2.字符串常数字符串常数 字符串常数是由单引号字符串常数是由单引号 括起来括起来的一串字符或者单个字符。的一串字符或者单个字符。如:如:MOV DL , MOV DL , A A ; ; DL 41H DL 41H BUF DB BUF DB 12Aa 12Aa ;将;将12Aa12Aa字符串定义字符串定义给给 ;变量;变量BUFBUF以下连续的(以下连续的(4 4个个 ;字
17、节)存储器单元。;字节)存储器单元。 第第3章章 8086CPU指令系统指令系统2022-7-2122算术操作符算术操作符MOV AL , 5+2MOV AL , 5+2* *3 3 等效于等效于 MOV AL , 11 MOV AL , 11 MOV AL , 11/2 MOV AL , 11/2 等效于等效于 MOV AL , 05H;MOV AL , 05H;取商取商 MOV AL , MOV AL , 11 MOD 211 MOD 2 等效于等效于MOV AL , 01H;MOV AL , 01H;取余取余 3.3.表达式表达式第第3章章 8086CPU指令系统指令系统2022-7-2
18、123逻辑操作符逻辑操作符MOV AL , 0CCH AND 0F0HMOV AL , 0CCH AND 0F0HAND AL , 0CCH AND AL , 0CCH ANDAND 0F0H 0F0HMOV AL , 0C0HMOV AL , 0C0H等等效效于于AND AL , 0C0HAND AL , 0C0H等等效效于于汇编程序汇编时完成的操作汇编程序汇编时完成的操作CPUCPU执行时完成的操作执行时完成的操作第第3章章 8086CPU指令系统指令系统2022-7-2124关系操作符关系操作符若关系成立,则为真,取值全若关系成立,则为真,取值全1 1;若关系不成立,则为假,取值全若关系
19、不成立,则为假,取值全0 0。如:如: MOV AL , 05H EQ 05H ;MOV AL , 05H EQ 05H ;关系成立为真关系成立为真MOV AL , MOV AL , 等等效效于于第第3章章 8086CPU指令系统指令系统2022-7-2125属性操作符属性操作符MOV BX , OFFSET TABLE ; BX MOV BX , OFFSET TABLE ; BX 取变量取变量TABLETABLE单元的单元的偏移地址偏移地址MOV AX , SEG TABLE ; AX MOV AX , SEG TABLE ; AX 取变量取变量TABLETABLE单单 元的元的段段地址地
20、址MOV DL , TYPE TABLE ; DL MOV DL , TYPE TABLE ; DL 取变量取变量TABLETABLE 的的类类型型(1,2,4,8(1,2,4,8等等) )变量的三个变量的三个最基本属性最基本属性第第3章章 8086CPU指令系统指令系统2022-7-2126属性修改操作符属性修改操作符 MOV BL ,02HMOV BL ,02HDSDS:(BX):(BX)00H00H02H02H00 02 H00 02 H MOV BX ,02HMOV BX ,02H MOV BX ,02HMOV BX ,02H MOV WORD PTR BX ,02HMOV WORD
21、PTR BX ,02H ?传送一个字传送一个字传送一个字节传送一个字节 MOV BYTE PTR BX ,02HMOV BYTE PTR BX ,02H X第第3章章 8086CPU指令系统指令系统2022-7-2127五五. .标号、变量及伪指令标号、变量及伪指令 在汇编语言程序设计中,为方便记忆或为编程在汇编语言程序设计中,为方便记忆或为编程需要,有时要将直接访问的存储器单元的实际地址需要,有时要将直接访问的存储器单元的实际地址符号化符号化,即给要访问的存储单元起一个标识符名,即给要访问的存储单元起一个标识符名,而标识符有标号名、变量名等。而标识符有标号名、变量名等。 如果存储单元里存放的
22、是数据(数据单元),用如果存储单元里存放的是数据(数据单元),用以标识该单元的标识符称为以标识该单元的标识符称为变量变量; 即为如果存储单元里存放的是程序(代码单元),即为如果存储单元里存放的是程序(代码单元),用以标识该单元的标识符称为用以标识该单元的标识符称为标号标号。第第3章章 8086CPU指令系统指令系统2022-7-21281.1.标号标号 指示某条指示某条的位置(地的位置(地址)。指令中的标号位于一条指令语句的址)。指令中的标号位于一条指令语句的操作码之前,以冒号作为与操作码的分隔。操作码之前,以冒号作为与操作码的分隔。 标号标号。第第3章章 8086CPU指令系统指令系统202
23、2-7-2129如:如: MOV DL,0MOV DL,0 MOV BL,10 MOV BL,10L1L1: ADD DL,BLADD DL,BL DEC BL DEC BL JNZ L1JNZ L1标号名标号名第第3章章 8086CPU指令系统指令系统2022-7-2130标号一旦定义,就具有了以下三个属性:标号一旦定义,就具有了以下三个属性:段地址段地址 标号对应的指令所在段的段地址标号对应的指令所在段的段地址段内偏移地址段内偏移地址 标号对应指令所在的段标号对应指令所在的段内内EAEA类型类型NEARNEAR型型 该标号与转移指令在同该标号与转移指令在同一一 代码段代码段。FARFAR型
24、型 该标号与转移指令不在同该标号与转移指令不在同一一 代码段。代码段。第第3章章 8086CPU指令系统指令系统2022-7-21312.2.变量变量 用以指示用以指示的存储器单的存储器单元的符号地址。变量所指存储器单元的值,元的符号地址。变量所指存储器单元的值,在程序运行期间可以改变。在程序运行期间可以改变。第第3章章 8086CPU指令系统指令系统2022-7-2132变量定义伪指令变量定义伪指令(也称为数据定义伪指令(也称为数据定义伪指令 或者称为存储器分配伪指令)或者称为存储器分配伪指令) 这类伪指令用来给某个存储器单元或某这类伪指令用来给某个存储器单元或某个存储区个存储区分配数据或预
25、留空间分配数据或预留空间。第第3章章 8086CPU指令系统指令系统2022-7-2133 变量名变量名 DB DB 表达式表达式 ;定义;定义字节型变量字节型变量 变量名变量名 DW DW 表达式表达式 ;定义;定义字型变量字型变量 变量名变量名 DD DD 表达式表达式 ;定义;定义双字型变量双字型变量 变量名变量名 DQ DQ 表达式表达式 ;定义;定义长字型变量长字型变量 变量名变量名 DT DT 表达式表达式 ;定义;定义一个一个1010字节的变量字节的变量 常用的变量定义伪指令有常用的变量定义伪指令有DBDB、DWDW、DDDD。第第3章章 8086CPU指令系统指令系统2022-
26、7-2134变量定义伪指令语句中主要有以下几种情况:变量定义伪指令语句中主要有以下几种情况:一个或多个常数或表达式。当为多个时,其间一个或多个常数或表达式。当为多个时,其间 用逗号分割。用逗号分割。带引号的字符串。带引号的字符串。一个问号(?一个问号(?) )。(常被用来做预留结果)(常被用来做预留结果)重复方式。格式为:重复方式。格式为:重复次数重复次数 DUP DUP (表达式)(表达式)第第3章章 8086CPU指令系统指令系统2022-7-2135DAT1 DAT1 DBDB 12 12,-12-12,12H12HDAT2 DW 2DAT2 DW 2* *3 3,$+2$+2DAT3
27、DW 02HDAT3 DW 02HDAT1DAT10CH0CH0F4H0F4H12H12H06H06H0003H0003H1500H:0000H1500H:0000HDAT2DAT2DAT3DAT30007H0007H00H00H07H07H00H00H02H02H00H00H汇编程序对本段汇编后汇编程序对本段汇编后各变量对应存储器单元各变量对应存储器单元的内容如图。的内容如图。$ $:当前偏移地址值:当前偏移地址值若若DS=1500HDS=1500H,在数据段,在数据段0000H0000H偏移地址开始有以下变量定义偏移地址开始有以下变量定义: :变量定义举例变量定义举例第第3章章 8086C
28、PU指令系统指令系统2022-7-2136DAT4 DD 89HDAT4 DD 89HDAT5 DB DAT5 DB THISTHISDAT4DAT489H89H00H00H00H00H00H00H1500H:0009H1500H:0009H000DH000DHDAT5DAT50011H0011HTTHHIISS第第3章章 8086CPU指令系统指令系统2022-7-2137DAT6 DW DAT6 DW ABAB, , C CDAT7 DB 3 DUP (00H)DAT7 DB 3 DUP (00H)DAT6DAT600H00H1500H:0011H1500H:0011H0015H0015H
29、DAT7DAT7DAT8DAT80018H0018H00H00H00H00H00H00HBBAACC第第3章章 8086CPU指令系统指令系统2022-7-2138 变量具有五个属性变量具有五个属性段地址(段地址(SEGSEG): :变量所在段的段地址变量所在段的段地址段内偏移地址(段内偏移地址(OFFSETOFFSET): :变量对应单元的偏移地址变量对应单元的偏移地址类型(类型(TYPETYPE): :每个变量所占的字节数。用每个变量所占的字节数。用DBDB、DWDW、DDDD、DQDQ、DTDT定义的变量类型分别为定义的变量类型分别为1 1,2 2,4 4,8 8,1010长度(长度(L
30、ENGTHLENGTH):):若若变量用变量用DUPDUP定义,则该变量长度定义,则该变量长度为为DUPDUP前的系数,表示变量重复的前的系数,表示变量重复的次数;否则变量长度均为次数;否则变量长度均为1 1大小(大小(SIZESIZE):):变量定义时所占用的总字节数变量定义时所占用的总字节数 标号属性?标号属性?第第3章章 8086CPU指令系统指令系统2022-7-2139MOV AX , MOV AX , SEG DAT1SEG DAT1例:根据前例中各变量的定义,有:例:根据前例中各变量的定义,有:MOV AX , MOV AX , SEG DAT2SEG DAT2MOV AX ,
31、MOV AX , OFFSET DAT3OFFSET DAT3MOV AL , MOV AL , TYPE DAT3TYPE DAT3; (AX)=1500H; (AX)=1500H; (AX)=1500H; (AX)=1500H; (AX)=0007H; (AX)=0007H; (AL)=02H; (AL)=02H第第3章章 8086CPU指令系统指令系统2022-7-2140MOV AX , MOV AX , LENGTH DAT3LENGTH DAT3MOV AX , MOV AX , LENGTH DAT7LENGTH DAT7MOV AX , MOV AX , SIZE DAT3SI
32、ZE DAT3MOV AX , MOV AX , SIZE DAT7SIZE DAT7; (AX)=0001H; (AX)=0001H; (AX)=0002H; (AX)=0002H; (AX)=0001H; (AX)=0001H; (AX)=0003H; (AX)=0003H第第3章章 8086CPU指令系统指令系统2022-7-21413.2 3.2 数据与转移地址的寻址方式数据与转移地址的寻址方式寻寻址方式:址方式:指令中用于说明操作数所在地址的方指令中用于说明操作数所在地址的方法。法。8086CPU8086CPU指令系统的寻址方式分为两类:指令系统的寻址方式分为两类:1.1.数据的寻址
33、方式数据的寻址方式:如何寻找指令中的操作数;:如何寻找指令中的操作数;2.2.地址的寻址方式地址的寻址方式:如何寻找转移指令的目的地:如何寻找转移指令的目的地址。址。第第3章章 8086CPU指令系统指令系统2022-7-2142 下面讲关于数据的寻址方式时,均以数下面讲关于数据的寻址方式时,均以数据传送指令据传送指令MOVMOV为例讲解。为例讲解。MOVMOV指令格式如下:指令格式如下:MOV DST , SRCMOV DST , SRC 助记符助记符 目的操作数目的操作数源操作数源操作数MOVMOV指令的功能指令的功能: (DSTDST) (SRC)(SRC)第第3章章 8086CPU指令
34、系统指令系统2022-7-2143一、数据的寻址方式(共一、数据的寻址方式(共8 8种):种):l 立即寻址立即寻址(Immediate Addressing )(Immediate Addressing )l 寄存器寻址寄存器寻址(Register Addressing )(Register Addressing )l 存储器寻址存储器寻址(Memory Addressing )(Memory Addressing )(5 5种):直种):直接寻址、寄存器间接寻址、寄存器相对寻址、基址接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址变址寻址、相对基址变址寻址l 隐含寻址
35、隐含寻址(Hidden Addressing )(Hidden Addressing )第第3章章 8086CPU指令系统指令系统2022-7-21441.1.立即寻址立即寻址 操作数作为指令的一部分紧跟在操作码之后,存操作数作为指令的一部分紧跟在操作码之后,存放在代码段里,这时的操作数称为立即数。放在代码段里,这时的操作数称为立即数。 立即寻址主要用来给寄存器或内存单元赋初值。立即寻址主要用来给寄存器或内存单元赋初值。 注意:立即数注意:立即数只能用于源操作数字段,不能用于只能用于源操作数字段,不能用于目的操作数字段。目的操作数字段。 如:如:MOV 12H , AL另外,另外,MOV AX
36、, 指令中的源指令中的源操作数也是立即寻址操作数也是立即寻址如:如:MOV AL, 12H机器代码:机器代码:B0H 12H第第3章章 8086CPU指令系统指令系统2022-7-2145A HA H A LA L A XA XCSCS段段例:例:MOV AX MOV AX ,1234H1234H存储器存储器B8HB8H34H34H12H12H(AX)=1234H(AX)=1234H操作码操作码第第3章章 8086CPU指令系统指令系统2022-7-21462.2.寄存器寻址寄存器寻址 数据放在指令规定的寄存器中。数据放在指令规定的寄存器中。 16 16位字寄存器:位字寄存器:AXAX、BXB
37、X、CXCX、DXDX、SISI、DIDI、SPSP、BPBP和四个和四个段寄存器段寄存器 8 8位字节寄存器:位字节寄存器:AHAH、ALAL、BHBH、BLBL、CHCH、CLCL、DHDH、DLDL。 通常,存放数据的寄存器选择通用寄存器,而存通常,存放数据的寄存器选择通用寄存器,而存放结果时尽可能使用放结果时尽可能使用AXAX累加器累加器,因为使用累加器的执,因为使用累加器的执行时间较短。行时间较短。 寄存器寻址既可以作寄存器寻址既可以作DST,DST,也可以作也可以作SRCSRC。第第3章章 8086CPU指令系统指令系统2022-7-2147A XA X B XB X 若(若(AX
38、AX)=1234H,(BX)=5678H=1234H,(BX)=5678H,则,则CPUCPU执行上条执行上条指令后,(指令后,(AXAX)=5678H=5678H,而(,而(BXBX)不变。)不变。 思考:思考: MOV CX , DL MOV CX , DL ? 错误原因:类型不一致。错误原因:类型不一致。例:例:MOV AX , BXMOV AX , BX第第3章章 8086CPU指令系统指令系统2022-7-2148 这类寻址方式,操作数在存储器中,而这类寻址方式,操作数在存储器中,而存储器单存储器单元的地址由以下元的地址由以下五种五种寻址方式的任何一种得到寻址方式的任何一种得到。 指
39、令中只给出操作数所在单元的指令中只给出操作数所在单元的段内偏移地址段内偏移地址,而操作数所在的段地址为而操作数所在的段地址为DS/SSDS/SS,也可用段前缀改变,也可用段前缀改变操作数的段地址。操作数的段地址。 所有存储器寻址的共同特点:地址用所有存储器寻址的共同特点:地址用标示,标示,里的值就是操作数的有效地址里的值就是操作数的有效地址3.3.存储器寻址(寻找存储器寻址(寻找EAEA值)值)第第3章章 8086CPU指令系统指令系统2022-7-2149 操作数的操作数的1616位偏移地址由一个立即数给出。位偏移地址由一个立即数给出。直接寻址(直接寻址(Direct AddressingD
40、irect Addressing ) 操作数所在单元的物理地址操作数所在单元的物理地址 : PA (段寄存器段寄存器) 16 +指令中给出的偏移地址指令中给出的偏移地址 指令中,操作数所在单元的指令中,操作数所在单元的1616位偏移地址位偏移地址默默认在数据段,但也可通过段前缀来改变段地址。认在数据段,但也可通过段前缀来改变段地址。 直接寻址的常见格式直接寻址的常见格式 : MOV AX,2000H 第第3章章 8086CPU指令系统指令系统2022-7-2150A XA X例例1 1:MOV AX,2000HMOV AX,2000H若若DSDS为为3000H3000H,则:,则:A HA H
41、 A LA L 32001H32001H3 0 0 0 0 H3 0 0 0 0 H DSDS存储器存储器CSCS段段数据段数据段 操作码操作码20H20H00H00HA1HA1H32000H32000H+ +PA=3 2 0 0 0 HPA=3 2 0 0 0 H 2 0 0 0 2 0 0 0 H H 第第3章章 8086CPU指令系统指令系统2022-7-2151思考:思考:MOV 2000H ,ALMOV 2000H ,AL MOV ES:2000H ,AL MOV ES:2000H ,AL 的执行结果?用图示表示的执行结果?用图示表示第第3章章 8086CPU指令系统指令系统2022
42、-7-2152 直接寻址的另一种方式直接寻址的另一种方式-用变量代替地址用变量代替地址 每个存放数据的存储单元都有地址,如果该单元用每个存放数据的存储单元都有地址,如果该单元用一个变量事先做了标识,那么变量名就是该单元的地一个变量事先做了标识,那么变量名就是该单元的地址,因此用变量名为操作数等价于用该单元地址做操址,因此用变量名为操作数等价于用该单元地址做操作数作数如:如:MOV ALMOV AL,VAR VAR ;将;将VARVAR单元的内容赋予单元的内容赋予ALAL注意:注意:VARVAR须事先有定义,且类型必须和目的操作数须事先有定义,且类型必须和目的操作数一致一致第第3章章 8086C
43、PU指令系统指令系统2022-7-2153例例4 4:若:若(DS)=1500H,TABLE(DS)=1500H,TABLE为在为在DSDS段定义的一个字变量段定义的一个字变量(TABLE DW 1234HTABLE DW 1234H),且偏移地址为),且偏移地址为0004H0004H。则。则CPUCPU执行执行 MOV AX ,TABLEMOV AX ,TABLE 指令完成的操作如下:指令完成的操作如下:1 5 0 0 0 H1 5 0 0 0 H DSDS 0 0 0 4 H0 0 0 4 H + +PA=1 5 0 0 4 HPA=1 5 0 0 4 H A HA H A LA L 15
44、004H15004H15005H15005HTABLETABLE数据段数据段34H34H12H12HTABLETABLE的物理地址的物理地址指令执行后,指令执行后,AX=1234HAX=1234H假设上例变量表已被定义,假设上例变量表已被定义,MOV AX, DAT2MOV AX, DAT2的结果?的结果?第第3章章 8086CPU指令系统指令系统2022-7-2154例:若例:若VAR1VAR1为字变量,为字变量, VAR2VAR2和和VAR3VAR3为字节变量,判为字节变量,判断下列指令的书写格式是否正确,正确的说出断下列指令的书写格式是否正确,正确的说出SRCSRC和和DSTDST的寻址
45、方式,不正确说出错误原因。的寻址方式,不正确说出错误原因。 MOV AX , VAR1 MOV AX , VAR1 MOV AX , VAR2 MOV AX , VAR2 MOV VAR2, VAR3 MOV VAR2, VAR3 MOV 0200H ,12H MOV 0200H ,12HSRC为直接寻址为直接寻址DST为寄存器寻址为寄存器寻址类型不一致类型不一致两存储器单元之间不两存储器单元之间不能直接传送数据能直接传送数据数据类型不确定数据类型不确定改:改:MOV AL , VAR2改:改:MOV AL ,VAR3MOV VAR2 ,AL改:改:MOV BYTE PTR 0200H,12H
46、MOV BYTE PTR 0200H,12H或:或:MOV WORD PTR 0200H,12HMOV WORD PTR 0200H,12H第第3章章 8086CPU指令系统指令系统2022-7-2155 操作数的地址由操作数的地址由CPUCPU的某个寄存器(的某个寄存器(BXBX、SISI、DIDI)给出,寄存器的段地址默认在给出,寄存器的段地址默认在DSDS段。段。寄存器间接寻址寄存器间接寻址Register Indirect AddressingRegister Indirect AddressingPAPA= DS = DS * * 16+ 16+ EAEA SISIDIDIBXBXE
47、AEA=第第3章章 8086CPU指令系统指令系统2022-7-2156例例1 1:MOV AX , BXMOV AX , BX SRCSRC为寄存器间接寻址;为寄存器间接寻址; DSTDST为寄存器寻址;为寄存器寻址; 指令功能:指令功能:AX (DSAX (DS:(BX):(BX) )若:若:DS=3000H , BX=1050HDS=3000H , BX=1050H 则:则:SRCSRC所在单元的物理地址为:所在单元的物理地址为:PA=(DS) PA=(DS) 16+(BX) 16+(BX) =30000H+1050H=31050H=30000H+1050H=31050H第第3章章 80
48、86CPU指令系统指令系统2022-7-2157例例2 2:MOV ES:SI , ALMOV ES:SI , AL 指令功能:指令功能:(ES:(SI) (ES:(SI) (AL)(AL)若:若:ES=4000H , SI=1234H,(AL)=23HES=4000H , SI=1234H,(AL)=23H 则:则:DSTDST所在单元的物理地址为:所在单元的物理地址为: PA=(ES)PA=(ES)16+(SI)16+(SI) =40000H+1234H =40000H+1234H =41234H =41234H 指令执行后指令执行后(41234H)=23H.(41234H)=23H.第第
49、3章章 8086CPU指令系统指令系统2022-7-2158例例3 3:判断下列指令的是否正确,正确的说出:判断下列指令的是否正确,正确的说出SRCSRC和和DSTDST的寻址方式,不正确说出错误原因,并改正。的寻址方式,不正确说出错误原因,并改正。 MOV BX,SIMOV BX,SI 改:改:MOV AL , SIMOV AL , SI MOV BX , AL MOV BX , AL MOV DI ,12H MOV DI ,12H改:改:MOV WORD PTR DI , 12HMOV WORD PTR DI , 12H或:或:MOV BYTE PTR DI , 12HMOV BYTE P
50、TR DI , 12H MOV SI ,CX MOV SI ,CXDSTDST为寄存器间接寻址为寄存器间接寻址SRCSRC为寄存器寻址为寄存器寻址第第3章章 8086CPU指令系统指令系统2022-7-2159 操作数的地址分两部分:一部分在操作数的地址分两部分:一部分在 中,中,另一部分为一个另一部分为一个 的相对位移量的相对位移量DISPDISPBPBPSISIBXBXDIDI寄存器相对寻址寄存器相对寻址Register Relative Addressing Register Relative Addressing 8 8位位1616位位EAEA=BPBPSISIBXBXDIDI8 8位