《微机原理寻址方式ppt课件》由会员分享,可在线阅读,更多相关《微机原理寻址方式ppt课件(42页珍藏版)》请在金锄头文库上搜索。
1、第3章 8086的指令系统学习目标学习目标掌握掌握8086指令格式和寻址方式指令格式和寻址方式掌握掌握8086各类指令的使用及注意事项各类指令的使用及注意事项学会分析各种基本指令的使用学会分析各种基本指令的使用初步掌握使用汇编指令书写程序段的基本初步掌握使用汇编指令书写程序段的基本方法方法3.0基础知识:基础知识: 什么是汇编语言什么是汇编语言汇编语言是一种面向机器的低级程序设计语言汇编语言是一种面向机器的低级程序设计语言汇编语言以助记符形式表示每一条计算机指令汇编语言以助记符形式表示每一条计算机指令助记符是便于记忆、并能描述指令功能和操作数的符号助记符是便于记忆、并能描述指令功能和操作数的符
2、号助记符一般就是表明指令功能的英语单词或缩写助记符一般就是表明指令功能的英语单词或缩写用汇编语言书写的程序就是汇编语言程序,或用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序(称汇编语言源程序(.ASM)汇编语言的主要特点:汇编语言的主要特点:汇编语言程序与处理器指令系统密切相关汇编语言程序与处理器指令系统密切相关程序员可直接、有效地控制系统硬件程序员可直接、有效地控制系统硬件形成的可执行文件运行速度快、占用主存容量少形成的可执行文件运行速度快、占用主存容量少基础知识:汇编语言开发步骤基础知识:汇编语言开发步骤源程序源程序. asm可执行文件可执行文件. exe目标模块目标模块. ob
3、j文本编辑器文本编辑器汇编程序汇编程序MASM连接程序连接程序LINK调试程序调试程序汇编语言程序与汇编语言程序与汇编语言程序与汇编语言程序与C C语言程序的对照语言程序的对照语言程序的对照语言程序的对照假设:定义一个有假设:定义一个有假设:定义一个有假设:定义一个有1010个元素数组个元素数组个元素数组个元素数组a a,并求所有元素的总和。,并求所有元素的总和。,并求所有元素的总和。,并求所有元素的总和。则则则则C C语言程序如下:语言程序如下:语言程序如下:语言程序如下: # include # include main( ) main( ) intint a10; a10; intint
4、 i , sum=0; i , sum=0; for ( i=0; i10; i+ ) sum= for ( i=0; i10; i+ ) sum=sum+aisum+ai; ; printf(sumprintf(sum=%d, sum); =%d, sum); 汇编语言程序与汇编语言程序与汇编语言程序与汇编语言程序与C C语言程序的对照语言程序的对照语言程序的对照语言程序的对照假设:定义一个有假设:定义一个有假设:定义一个有假设:定义一个有1010个元素数组个元素数组个元素数组个元素数组a a,并求所有元素的总和。,并求所有元素的总和。,并求所有元素的总和。,并求所有元素的总和。而汇编语言程
5、序如下:而汇编语言程序如下:而汇编语言程序如下:而汇编语言程序如下: Data segmentData segment a a dwdw 10 dup(?) 10 dup(?) sum sum dwdw 0 0 Data ends Data ends Code segment Code segment assume assume cscs: Code, : Code, dsds: Data: Data START: START: movmov ax, Data ax, Data movmov dsds, ax, ax movmov cxcx, 10, 10 movmov ax, 0 ax, 0
6、 movmov si si, offset a, offset a lop: add ax, lop: add ax, si si loop lop loop lop movmov sum, ax sum, axCode endsCode ends END START END START指令语句指令语句伪指令语句伪指令语句指令的组成:指令的组成:操作码操作码说明计算机要执行哪种操作,如传送、运说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的算、移位、跳转等操作,它是指令中不可缺少的组成部分组成部分操作数操作数是指令执行的参与者,即各种操作的对象是指令执行的参与者,
7、即各种操作的对象有些指令不需要操作数,通常的指令都有一个或有些指令不需要操作数,通常的指令都有一个或两个操作数两个操作数操作码操作码操作数操作数3.1 指令系统及指令格式指令系统及指令格式指令的助记符格式指令的助记符格式操作数操作数2 2,称为,称为源操作数源操作数 srcsrc,它表示参与它表示参与指令操作的一个对象指令操作的一个对象操作数操作数1 1,称为,称为目的操作数目的操作数 dstdst,它不仅可它不仅可以作为指令操作的一个对象,还可以用来以作为指令操作的一个对象,还可以用来存放指令操作的结果存放指令操作的结果分号后的内容是对指令的解释分号后的内容是对指令的解释操作码操作码 操作数
8、操作数1 1, ,操作数操作数2 2 ;注释;注释指令的操作码和操作数指令的操作码和操作数每种指令的每种指令的操作码操作码:用一个唯一的助记符表示(指令功能的英文缩用一个唯一的助记符表示(指令功能的英文缩写)写)对应着机器指令的一个二进制编码对应着机器指令的一个二进制编码指令中的指令中的操作数操作数:可以是一个可以是一个具体的数值具体的数值可以是存放数据的可以是存放数据的寄存器寄存器或指明数据在主存位置的或指明数据在主存位置的存储器存储器地址地址寻找操作数的过程就是操作数的寻址寻找操作数的过程就是操作数的寻址传送指令传送指令MOV的格式的格式MOV MOV dst,srcdst,src;dst
9、srcdstsrc 功能功能: :将源操作数将源操作数srcsrc传送至目的操作数传送至目的操作数dstdst例:例:MOV AL,05HMOV AL,05H;AL05HAL05HMOV BX,AXMOV BX,AX;BXAXBXAXMOV AX,SIMOV AX,SI;AXDS:SIAXDS:SIMOV AX,BP+06HMOV AX,BP+06H;AXSS:BP+06HAXSS:BP+06HMOV AX,BX+SIMOV AX,BX+SI ;AXDS:BX+SIAXDS:BX+SI传送指令传送指令MOV的功能的功能源操作数源操作数 src目的操作数目的操作数 dst30H30H被传送的数据
10、被传送的数据AH AX ALBH BX BLCH CX CLDH DX DLSPBPDISIIPFLAGSCSDSESSSFSGS32位名称位名称EAXEBXECXEDXESPEBPEDIESI8位名称位名称16位名称位名称EIPEFLAGS 名称名称累加器累加器基址变址基址变址计数计数数据数据堆栈指针堆栈指针基址指针基址指针目的变址目的变址源变址源变址指令指针指令指针标志标志代码代码数据数据附加附加堆栈堆栈32位位16位位注意:注意: 286以以下下绿绿色色区区域域不不可可用用; FS、GS 无专用名称;无专用名称;3.2 寻址方式寻址方式立即数寻址方式立即数寻址方式寄存器寻址方式寄存器寻址
11、方式存储器寻址方式存储器寻址方式直接寻址方式直接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器相对寻址方式寄存器相对寻址方式基址变址寻址方式基址变址寻址方式相对基址变址寻址方式相对基址变址寻址方式1. 1. 立即数寻址方式立即数寻址方式指令中的操作数直接存放在机器代码中,指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)部分存放在操作码之后的主存单元中)这种操作数被称为立即数这种操作数被称为立即数它可以是它可以是8位数值位数值(00HFFH)也可以是也可以是16位数值位数值(0000HFFFFH)立
12、即数寻址方式常用来给寄存器赋初值立即数寻址方式常用来给寄存器赋初值立立即即数数可可以以是是8位位或或16位位(16位位的的立立即即数数是是高高位位字字节节放放在在高高地地址址,低位字节放在低地址低位字节放在低地址) 。l应用场合应用场合: 立即数常用来给寄存器或内存单元赋初值。立即数常用来给寄存器或内存单元赋初值。例例1 MOV AX , 2056H 结果结果 ( AH ) = 20H ( AL ) = 56H 例例2 MOV AL , 78 H 结果结果 ( AL ) = 78H注意:注意:只能用于源操作数字段只能用于源操作数字段,不能用于目的操作数字段。,不能用于目的操作数字段。低地址低地
13、址高地址高地址立即数寻址立即数寻址2. 2. 寄存器寻址方式寄存器寻址方式操作数存放在操作数存放在CPU的内部寄存器的内部寄存器reg中,中,可以是:可以是:8位寄存器位寄存器:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器位寄存器:AX、BX、CX、DX、SI、DI、BP、SP段寄存器段寄存器seg:CS、DS、SS、ES寄存器寻址指令寄存器寻址指令MOV AX , 1234H;AX1234HMOV BX , AX;BXAX注意:注意:SRC 和和 DST的字长一致的字长一致 MOV AH , BXCS不能用不能用MOV指令改变指令改变 MOV CS , AX寄存器寻址寄存器寻址
14、关于存储器的寻址方式关于存储器的寻址方式指令中给出操作数的主存地址信息(偏移指令中给出操作数的主存地址信息(偏移地址,称之为有效地址地址,称之为有效地址EA),),而段地址在而段地址在默认的或用段超越前缀指定的段寄存器中默认的或用段超越前缀指定的段寄存器中8086设计了多种存储器寻址方式设计了多种存储器寻址方式1、直接寻址方式、直接寻址方式2、寄存器间接寻址方式、寄存器间接寻址方式3、寄存器相对寻址方式、寄存器相对寻址方式4、基址变址寻址方式、基址变址寻址方式5、相对基址变址寻址方式、相对基址变址寻址方式3.直接寻址方式直接寻址方式有效地址有效地址EA在指令中直接给出在指令中直接给出默认的段地
15、址在默认的段地址在DS段寄存器,可使用段超段寄存器,可使用段超越前缀改变越前缀改变有效地址有效地址EA:操作数的偏移地址操作数的偏移地址 物理地址物理地址PA = (DS) 16d + EAMOV AX , 2000H ;AXDS : 2000HMOV AX , ES : 2000H ;AXES : 2000H直接寻址直接寻址4.寄存器间接寻址方式寄存器间接寻址方式有效地址存放在基址寄存器有效地址存放在基址寄存器BX、BP或或变址寄存器变址寄存器SI、DI中中段地址对应段地址对应BX/SI/DI寄存器默认是寄存器默认是DS,对对应应BP寄存器默认是寄存器默认是SS;可用段超越前缀改可用段超越前
16、缀改变变 MOV AX , SI;AXDS:SI MOV AX, BP;AXSS:BP寄存器间接寻址寄存器间接寻址A指令指令存储器存储器操作数操作数直接寻址方式直接寻址方式直接寻址方式直接寻址方式: :操作数操作数间间间间接寻址方式接寻址方式接寻址方式接寻址方式: :A指令指令EAEA:5.寄存器相对寻址方式寄存器相对寻址方式有效地址是寄存器内容与有符号有效地址是寄存器内容与有符号8位或位或16位位移量位位移量之和,寄存器可以是之和,寄存器可以是BX、BP或或SI、DI有效地址有效地址EABX/BP/SI/DI8/16位位移量位位移量段地址对应段地址对应BX/SI/DI寄存器默认是寄存器默认是
17、DS,对应对应BP寄寄存器默认是存器默认是SS;可用段超越前缀改变可用段超越前缀改变MOV AX,DI+06H;AXDS:DI+06HMOV AX,BP+06H;AXSS:BP+06H寄存器相对寻址寄存器相对寻址6.基址变址寻址方式基址变址寻址方式有效地址由基址寄存器(有效地址由基址寄存器(BX或或BP)的内容的内容加上变址寄存器(加上变址寄存器(SI或或DI)的内容构成:的内容构成:有效地址有效地址EABX/BPSI/DI段地址对应段地址对应BX寄存器默认是寄存器默认是DS,对应对应BP寄存器默认是寄存器默认是SS;可用段超越前缀改变可用段超越前缀改变MOV AX,BX+SI;AXDS:BX
18、+SIMOV AX,BP+DI;AXSS:BP+DIMOV AX,DS:BP+DI ;AXDS:BP+DI基址变址寻址基址变址寻址7.相对基址变址寻址方式相对基址变址寻址方式有效地址是基址寄存器(有效地址是基址寄存器(BX/BP)、)、变址寄存器变址寄存器(SI/DI)与一个与一个8位或位或16位位移量之和:位位移量之和:有效地址有效地址EABX/BPSI/DI8/16位位移量位位移量段地址对应段地址对应BX基址寄存器默认是基址寄存器默认是DS,对应对应BP基基址寄存器默认是址寄存器默认是SS;可用段超越前缀改变可用段超越前缀改变MOV AX,BX+SI+06H ;AXDS:BX+SI+06H
19、相对基址变址寻址相对基址变址寻址段寄存器的默认和超越段寄存器的默认和超越访问存储器的方式访问存储器的方式默认默认可超越可超越偏移地址偏移地址取指令取指令CS无无IP堆栈操作堆栈操作SS无无SP一般数据访问一般数据访问DSCS ES SS有效地址有效地址EABP基址的寻址方式基址的寻址方式SSCS ES DS有效地址有效地址EA串操作的源操作数串操作的源操作数DSCS ES SSSI串操作的目的操作数串操作的目的操作数ES无无DI用符号表示位移量用符号表示位移量在寄存器相对寻址或相对基址变址寻址方在寄存器相对寻址或相对基址变址寻址方式中,位移量可用符号表示:式中,位移量可用符号表示: MOV A
20、X,SI+COUNT;COUNT是事先定义的变量或常量(就是数值) MOV AX,BX+SI+WNUM;WNUM也是变量或常量多种表达形式多种表达形式同一寻址方式可以写成不同的形式:同一寻址方式可以写成不同的形式:MOV AX , BXSI;等同于 MOV AX , BX+SIMOV AX , COUNTSI;等同于 MOV AX , SI+COUNTMOV AX , WNUMBXSI;等同于 MOV AX , WNUMBX+SI;等同于 MOV AX , BX+SI+WNUM立即寻址、寄存器寻址立即寻址、寄存器寻址【例【例1】下列程序执行后,】下列程序执行后,(AX)=?(BX)=?MOV
21、AX,1234HMOV BX,5678HADD AX,BX ; AX (AX)+(BX)执行:执行:1234HAX ; 5678HBX ; (AX)+(BX)AX执行后:执行后:(AX)=68ACH,(BX)=5678H直接寻址直接寻址【例【例3】 已知已知(DS)=2000H , (ES)=3000H , (32000H)字节字节=15H, (32001H)字节字节=24H。执行指令执行指令 MOV AX , ES: 2000H 执行后(执行后(AX)?)?若执行若执行 MOV AL , ES :2000H 则则 (AL)=15HEA = 2000HPA = (ES)10H+EA= 3200
22、0H(AX) = 2415H直接寻址直接寻址【例【例3】已知已知:(AX)=1212H , (DS)=3000H, BUF为数据段定义的变量,其偏移地址是为数据段定义的变量,其偏移地址是2000H,(32000H)=45H ,(32001H)=67H.执行指令执行指令:MOV AX ,BUF执行后:(执行后:(AX)=?等价等价:MOV AX ,BUF MOV AX ,2000HEA = 2000HPA = (DS)10H+EA= 32000H(AX) = 6745H寄存器间接寻址寄存器间接寻址【例【例3】已知:】已知:(AX)=0,(BP)=30H,(DS)=4000H, (SS)=2000
23、H,(20030H)=34H ,(20031H)=12H执行指令:执行指令:MOV AX ,Word ptr BP 执行后:执行后:(AX)=? (BP)=? (SS)=? (20030H)=?EA = BP = 0030HPA = (SS)10H+EA = (SS)16 + (BP) = 20030H(AX) = 1234H寄存器相对寻址寄存器相对寻址【例【例4】已知:】已知: (AX)=0040H,(BX)=0030H, (DS)=2000H, (20036H)=6050H 执行指执行指令:令:MOV Word ptr 6 BX ,AX执行后:执行后: (BX)=? , (20036H)=
24、?EA = (BX) + 6 = 0036HPA = (DS)10H+EA = (DS)16 + (BX) + 6 = 20036H(20036H) = (AX) = 0040H基址加变址寻址基址加变址寻址【例【例5】设执行前】设执行前 (DS)=2100H,(BX)=158H,(DI)=10A5H ,(221FDH)=1234H. 执行执行:MOV AX,BX+DI MOV AX,BXDI EA = (BX) + (DI) = 158H+10A5H = 11FDHPA = (DS) 10H +EA = (DS) 10H + (BX) + (DI) = 21000H + 11FDH = 221FDH执行后:执行后:(AX) =1234H