您好,欢迎访问三七文档
第3章8086的指令系统学习目标•掌握8086指令格式和寻址方式•掌握8086各类指令的使用及注意事项•学会分析各种基本指令的使用•初步掌握使用汇编指令书写程序段的基本方法3.0基础知识:什么是汇编语言•汇编语言是一种面向机器的低级程序设计语言•汇编语言以助记符形式表示每一条计算机指令–助记符是便于记忆、并能描述指令功能和操作数的符号–助记符一般就是表明指令功能的英语单词或缩写•用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序(.ASM)•汇编语言的主要特点:–汇编语言程序与处理器指令系统密切相关–程序员可直接、有效地控制系统硬件–形成的可执行文件运行速度快、占用主存容量少基础知识:汇编语言开发步骤源程序.asm可执行文件.exe目标模块.obj文本编辑器汇编程序MASM连接程序LINK调试程序汇编语言程序与C语言程序的对照假设:定义一个有10个元素数组a,并求所有元素的总和。则C语言程序如下:#includestdio.hmain(){inta[10];inti,sum=0;for(i=0;i10;i++)sum=sum+a[i];printf(sum=%d,sum);}汇编语言程序与C语言程序的对照假设:定义一个有10个元素数组a,并求所有元素的总和。而汇编语言程序如下:Datasegmentadw10dup(?)sumdw0DataendsCodesegmentassumecs:Code,ds:DataSTART:movax,Datamovds,axmovcx,10movax,0movsi,offsetalop:addax,[si]looplopmovsum,axCodeendsENDSTART指令语句伪指令语句指令的组成:•操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分•操作数是指令执行的参与者,即各种操作的对象•有些指令不需要操作数,通常的指令都有一个或两个操作数操作码操作数3.1指令系统及指令格式指令的助记符格式•操作数2,称为源操作数src,它表示参与指令操作的一个对象•操作数1,称为目的操作数dst,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果•分号后的内容是对指令的解释操作码操作数1,操作数2;注释指令的操作码和操作数•每种指令的操作码:–用一个唯一的助记符表示(指令功能的英文缩写)–对应着机器指令的一个二进制编码•指令中的操作数:–可以是一个具体的数值–可以是存放数据的寄存器–或指明数据在主存位置的存储器地址寻找操作数的过程就是操作数的寻址传送指令MOV的格式MOVdst,src;dst←src•功能:将源操作数src传送至目的操作数dst•例:MOVAL,05H;AL←05HMOVBX,AX;BX←AXMOVAX,[SI];AX←DS:[SI]MOVAX,[BP+06H];AX←SS:[BP+06H]MOVAX,[BX+SI];AX←DS:[BX+SI]传送指令MOV的功能源操作数src目的操作数dst30H30H被传送的数据AHAXALBHBXBLCHCXCLDHDXDLSPBPDISIIPFLAGSCSDSESSSFSGS32位名称EAXEBXECXEDXESPEBPEDIESI8位名称16位名称EIPEFLAGS名称累加器基址变址计数数据堆栈指针基址指针目的变址源变址指令指针标志代码数据附加堆栈32位16位注意:•286以下绿色区域不可用;•FS、GS无专用名称;3.2寻址方式•立即数寻址方式•寄存器寻址方式•存储器寻址方式直接寻址方式寄存器间接寻址方式寄存器相对寻址方式基址变址寻址方式相对基址变址寻址方式1.立即数寻址方式•指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)•这种操作数被称为立即数–它可以是8位数值(00H~FFH)–也可以是16位数值(0000H~FFFFH)•立即数寻址方式常用来给寄存器赋初值立即数可以是8位或16位(16位的立即数是高位字节放在高地址,低位字节放在低地址)。应用场合:立即数常用来给寄存器或内存单元赋初值。56B8内存20数作操操作码例1MOVAX,2056H结果(AH)=20H(AL)=56H例2MOVAL,78H结果(AL)=78H注意:只能用于源操作数字段,不能用于目的操作数字段。低地址高地址立即数寻址2.寄存器寻址方式•操作数存放在CPU的内部寄存器reg中,可以是:–8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL–16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP–段寄存器seg:CS、DS、SS、ES寄存器寻址指令MOVAX,1234H;AX←1234HMOVBX,AX;BX←AX注意:•SRC和DST的字长一致MOVAH,BX•CS不能用MOV指令改变MOVCS,AX寄存器寻址关于存储器的寻址方式•指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中•8086设计了多种存储器寻址方式1、直接寻址方式2、寄存器间接寻址方式3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式3.直接寻址方式•有效地址EA在指令中直接给出•默认的段地址在DS段寄存器,可使用段超越前缀改变有效地址EA:操作数的偏移地址物理地址PA=(DS)16d+EAMOVAX,[2000H];AX←DS:[2000H]MOVAX,ES:[2000H];AX←ES:[2000H]直接寻址4.寄存器间接寻址方式•有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中•段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变MOVAX,[SI];AX←DS:[SI]MOVAX,[BP];AX←SS:[BP]寄存器间接寻址A指令存储器操作数直接寻址方式:操作数间接寻址方式:A指令EAEA:5.寄存器相对寻址方式•有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址EA=BX/BP/SI/DI+8/16位位移量•段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变MOVAX,[DI+06H];AX←DS:[DI+06H]MOVAX,[BP+06H];AX←SS:[BP+06H]寄存器相对寻址6.基址变址寻址方式•有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址EA=BX/BP+SI/DI•段地址对应BX寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变MOVAX,[BX+SI];AX←DS:[BX+SI]MOVAX,[BP+DI];AX←SS:[BP+DI]MOVAX,DS:[BP+DI];AX←DS:[BP+DI]基址变址寻址7.相对基址变址寻址方式•有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址EA=BX/BP+SI/DI+8/16位位移量•段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变MOVAX,[BX+SI+06H];AX←DS:[BX+SI+06H]相对基址变址寻址段寄存器的默认和超越访问存储器的方式默认可超越偏移地址取指令CS无IP堆栈操作SS无SP一般数据访问DSCSESSS有效地址EABP基址的寻址方式SSCSESDS有效地址EA串操作的源操作数DSCSESSSSI串操作的目的操作数ES无DI用符号表示位移量•在寄存器相对寻址或相对基址变址寻址方式中,位移量可用符号表示:MOVAX,[SI+COUNT];COUNT是事先定义的变量或常量(就是数值)MOVAX,[BX+SI+WNUM];WNUM也是变量或常量多种表达形式•同一寻址方式可以写成不同的形式:MOVAX,[BX][SI];等同于MOVAX,[BX+SI]MOVAX,COUNT[SI];等同于MOVAX,[SI+COUNT]MOVAX,WNUM[BX][SI];等同于MOVAX,WNUM[BX+SI];等同于MOVAX,[BX+SI+WNUM]立即寻址、寄存器寻址【例1】下列程序执行后,(AX)=?(BX)=?MOVAX,1234HMOVBX,5678HADDAX,BX;AX(AX)+(BX)执行:1234H→AX;5678H→BX;(AX)+(BX)→AX执行后:(AX)=68ACH,(BX)=5678H直接寻址【例3】已知(DS)=2000H,(ES)=3000H,(32000H)字节=15H,(32001H)字节=24H。执行指令MOVAX,ES:[2000H]执行后(AX)=?若执行MOVAL,ES:[2000H]则(AL)=15HEA=2000HPA=(ES)×10H+EA=32000H(AX)=2415H直接寻址【例3】已知:(AX)=1212H,(DS)=3000H,BUF为数据段定义的变量,其偏移地址是2000H,(32000H)=45H,(32001H)=67H.执行指令:MOVAX,BUF执行后:(AX)=?等价:MOVAX,[BUF]MOVAX,[2000H]EA=2000HPA=(DS)×10H+EA=32000H(AX)=6745H寄存器间接寻址【例3】已知:(AX)=0,(BP)=30H,(DS)=4000H,(SS)=2000H,(20030H)=34H,(20031H)=12H执行指令:MOVAX,Wordptr[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执行指令:MOVWordptr6[BX],AX执行后:(BX)=?,(20036H)=?EA=(BX)+6=0036HPA=(DS)×10H+EA=(DS)×16+(BX)+6=20036H(20036H)=(AX)=0040H基址加变址寻址【例5】设执行前(DS)=2100H,(BX)=158H,(DI)=10A5H,(221FDH)=1234H.执行:MOVAX,[BX+DI]MOVAX,[BX][DI]EA=(BX)+(DI)=158H+10A5H=11FDHPA=(DS)×10H+EA=(DS)×10H+(BX)+(DI)=21000H+11FDH=221FDH执行后:(AX)=1234H
本文标题:微机原理-寻址方式
链接地址:https://www.777doc.com/doc-3300082 .html