微机原理之命令行_第1页
微机原理之命令行_第2页
微机原理之命令行_第3页
微机原理之命令行_第4页
微机原理之命令行_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 8086指令系统及汇编语言 80868086微处理器的各种寻址方式微处理器的各种寻址方式80868086指令系统指令系统80868086汇编语言程序基本格式汇编语言程序基本格式80868086汇编语言程序设计方法汇编语言程序设计方法1010 00000001 01110000 01000000 10101010 00100001 100010H11H12H13H14H15H16HMOV AL, (n)nADD AL, OAH0AHMOV (n), ALn存储器地址号汇编语言二进制机器指令3.1 8086指令系统概述指令是计算机执行某种操作的命令。从计算机组成的层次结构来说,计算机的指令

2、有微指令、机器指令和宏指令。机器指令简称指令,完成某一种操作微指令-执行某个最基本动作的控制命令,解释执行机器指令宏指令由若干条机器指令组成的软件指令,完成某一特定功能。指令系统是计算机所有指令的集合,表征一台计算机的重要因素。它的格式和功能不仅直接影响计算机的硬件结构,也直接影响到系统软件,影响到机器的适用范围。一、指令格式计算机的指令由操作码和操作数两部分组成操作码字段表示指令的功能或操作的性质做什么,助记符表示操作数字段指令操作的对象或对象的位置对谁做,操作数操作的对象怎么寻找和确定寻址方式操作码指令的操作码表示该指令应进行什么性质的操作。组成操作码字段的位数一般取决于计算机指令系统的规

3、模固定长度操作码:便于译码,扩展性差可变长度操作码:能缩短指令的平均长度操作数(地址码)操作数字段一般有一个、两个或三个,多个操作数之间用“,”分隔。源操作数指令执行前后值不变目的操作数指令执行后值改变指令种类指令种类零地址指令:指令的指令字中只有操作码,没有地址码一地址指令:指令中只给出一个操作数地址A,另一个操作数地址和目的操作数的地址均隐含(指定累加器AC)(AC) OP(A)-AC二地址指令:指令中给出两个地址码字段,分别指明参与操作的两个数在内存中或运算器通用寄存器的地址,其中地址A1兼做存放操作结果的地址(A1) OP(A2)-A1三地址指令:指令中有两个源操作数地址,A1,A2和

4、一个目标操作数地址A3(A1) OP (A2)-A3根据操作数存放的位置,操作数有三种:(1)立即数指令的操作数字段为操作数本身(数值)(2)寄存器操作数操作数包含在CPU的一个内部寄存器中(3)内存操作数操作数在内存单元,操作数字段包含内存单元地址。可做目的操作数:除立即数外的寄存器、内存操作数可做源操作数:立即数、寄存器、内存操作数8086中,任何内存地址由两部分组成:段的基地址:单元所在段的基地址段内偏移量:此单元与段基地址的距离有效地址EA(Effective Address)段内偏移量为适应各种数据结构的需要,可以有几部分组成,所以称为有效地址EA.不同EA的求法就构成了不同的寻址方

5、式。二、机器字长与指令长度机器字长计算机能直接处理的二进制数的位数,它决定运算精度指令字长指令的字节数单字指令-指令字长度等于机器字长度的指令半字长指令 指令长度等于半个机器字长度的指令双字长指令指令字长度等于两个机器字长度指令编码:等长和变长编码格式3.2 8086指令寻址方式指令系统设计了多种操作数的来源指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻找操作数的过程就是操作数的寻址寻址把寻找操作数的方式叫做操作数的把寻找操作数的方式叫做操作数的寻址方式寻址方式寻址方式分两大类:寻址方式分两大类:操作数的寻址方式操作数的寻址方式与数据有关,与数据有关,8种种转移地址的寻址方式转移

6、地址的寻址方式与程序转移有关,与程序转移有关,4种种操作数采取哪一种寻址方式操作数采取哪一种寻址方式会影响处理器执行指令的速度和效率会影响处理器执行指令的速度和效率对程序设计也很重要对程序设计也很重要 指令的组成 操作码操作码: :说明计算机要执行哪种操作,如传送、运算说明计算机要执行哪种操作,如传送、运算等操作,它是指令中不可缺少的组成部分等操作,它是指令中不可缺少的组成部分 操作数操作数: :是指令执行的参与者,即各种操作的对象是指令执行的参与者,即各种操作的对象操作码操作数例: MOV AX,CX ;将CX的内容送入AX中。指令的助记符格式操作数操作数2 2,被称为,被称为源操作数源操作

7、数srcsrc,它表示参与指令操,它表示参与指令操作的一个对象作的一个对象. .操作数操作数1 1,被称为,被称为目的操作数目的操作数dstdst,它不仅可以作为,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结指令操作的一个对象,还可以用来存放指令操作的结果果. .分号后的内容是对指令的解释分号后的内容是对指令的解释 操作码 操作数1,操作数2 ;注释操作数的来源指指 令令寄寄 存存 器器内内 存存I/OI/O设备或端口设备或端口操作数操作数指令中的操作数指令中的操作数直接存放在机器代码中,紧跟在操作码之后直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码

8、之后的主存单元中)(操作数作为指令的一部分存放在操作码之后的主存单元中), ,这种操作数被称为这种操作数被称为立即数立即数immimm。可以是8位数值(00HFFH)也可以是16位数值(0000HFFFFH)立即数寻址方式常用来给立即数寻址方式常用来给寄存器寄存器赋值赋值MOV AX, 0102H;AX0102HMOV AL, 02H;AL02H3.1.1 3.1.1 操作数的寻址方式操作数的寻址方式1、立即寻址、立即寻址 格式: 操作码 数字表达式 MOV AX, F58AH ; (字操作) F58AH称为立即数 助记符 目的 源 (16位操作数) H表示为十六进制数 dst src 完成的

9、操作: AX F58AH MOV AH, F5H (字节操作) F5H称为立即数(8位操作数) MOV AL, 8AH (字节操作) 8AH称为立即数 完成的操作: AH F5H , AL 8AH立即寻址操作过程 3456H 3457H AL=8A 字寻址方式 存储器CS段8AF5操作码AL=8A AH=F5存储器CS段8AF5操作码AH=F5操作码字节寻址方式 MOV AX,F58AHMOV AH,F5HMOV AL,8AH指令对立即数格式的要求8086/8088指令对立即数的格式有三种: 1)立即数可以是16进制的数 MOV AL,57H 2)立即数可以是10进制的数,但指令运行后CPU自

10、动把10进制数转换为16进制数,然后完成给定功能的操作。 MOV AL,57 ;指令执行后将AL 39H 3)立即数可以是2进制的数 MOV AL,01010111B ;指令执行后将AL 57H 为十进制数时,数后不加H,2进制数时,数后加B,CPU以此来辨别是那种类型的数据。2、 直接寻址方式 直接寻址方式的有效地址在指令中直接给出,直接寻址方式的有效地址在指令中直接给出,默认的段地址默认的段地址在在DSDS段寄存器段寄存器,可使用,可使用段超越前缀段超越前缀改变段。改变段。 中括号包含有效地址,表达存储单元的内容中括号包含有效地址,表达存储单元的内容MOV AX, 2000H;AXDS:2

11、000HMOV AX, ES: 2000H ;AXES:2000HMOV AX,BUFFER ; BUFFER:符号地址指令格式: 操作码 寄存器(16位) , 地址表达式 直接寻址方式的操作数的16位偏移地址(有直接地址值和标号两种形式)直接包含在指令中,它与操作码一起存放在代码段中的操作码之后。 段地址DS隐含,也可指定其它段,必须需在指令中指明。 存储器物理地址地址为:存储器物理地址地址为:DSDS:偏移地址:偏移地址 或或 ESES:偏移地:偏移地址。址。 例: MOV AX,ES:2000H (读数据读数据,RD线为低电平线为低电平) 将ES:2000H单元内容送入AX。 例: MO

12、V AX,LABLE 或 MOV AX,LABEL 将标号为LABLE(存放操作数单元的符号地址) , 即DS:LABLE中的内容送入AX。 LABLE必须在段定义中指明。 例:MOVAX,(2000H); 字操作 MOVAL,(2000H); 字节操作 MOVAH,(2001H); 字节操作 此两条指令的功能与字操作指令的功能相同! 16位段内偏移地址直接包含在指令中。 直接寻址存储器DS段8AF5XXAL=8A AH=F5存储器CS段操作码代码段数据段0020DS:2000DS:2001 字寻址方式 存储器DS段8AF5XXAL=8A AH=F5存储器CS段操作码代码段数据段0020DS:

13、2000DS:2001 字节寻址方式 操作码0120MOV AX,(2000H)MOV AL,(2000H)MOV AH,(2001H)3、寄存器寻址方式操作数存放在操作数存放在CPUCPU的内部寄存器的内部寄存器regreg中中1 1)8 8 位寄位寄存器存器r8r8:AHAH、ALAL、BHBH、BLBL、CHCH、CLCL、DHDH、DLDL2 2)16 16 位寄存器位寄存器r16r16:AXAX、BXBX、CXCX、DXDX、SISI、DIDI、BPBP、SPSP3 3)4 4个段寄存器个段寄存器segseg:CSCS、DSDS、SSSS、ESES寄存器名表示其内容(操作数)寄存器名

14、表示其内容(操作数)MOV AX, BX;AXBX格式格式: 操作码操作码 寄存器寄存器,寄存器寄存器 MOV AX,BX ;AX BX MOV BX,AX ;BX AX MOV AL,BH ;AL BH MOV AH,AL ;AH AL MOV DS,AX ;DS AX MOV SI,AX ;SI AX注意注意: :目的和源寄存器的目的和源寄存器的 位数必须相同位数必须相同,不同,不同 位数寄存器之位数寄存器之间不能传送数据处理间不能传送数据处理 如:如: MOV BXMOV BX,AHAHp如果要将数据送入段寄存器(CS、DS、ES、SS),必须先将这个数送入一个非段寄存器,然后再送到段寄

15、存器段寄存器写入方法: MOV CS,3000H ; 错! MOV AX,3000H ; (该指令不影响RD和WR控制线均为高电平) MOV CS,AX ;正确(但在使用中不允许随便修改CS的内容!) MOV SS,1000H ;错! MOV DI,1000H MOV SS,DI ;正确 , (该指令不影响RD和WR控制线均为高电平)4、 寄存器间接寻址方式MOV AX, BX;AXDS:BXMOV AX, ES:BX;AXES:BXMOV AH,DS:BPMOV ES:DI,AL格式格式:操作码操作码 寄存器寄存器,(寄存器寄存器) 有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中

16、;对于BX、SI、DI,默认的段地址在DS段寄存器,可使用段超越前缀改变; 对于BP,默认的段地址在SS段寄存器,可使用段超越前缀改变注意:寄存器间接寻址要用方括号或圆号括起来,以便与寄存器操作数相区别。例: MOV AX,BX;将由BX决定的存储单元的内容送到AX寄存器,要求对BX事前定义。间接寻址AX0000000100020003BBAATAB:AH AL AA BB数据段0001HBX= (BX) (SI) (DI) (BP)段寄存器为DS段寄存器为SS有效地址 = 操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。 物理地址计算方法: 物理地址 = (DS)16 + (

17、BX)或(SI)或(DI) 物理地址 = (SS) 16 + (BP)例:已知:(DS)=2100H,(DI)=2000H 指令:MOV AX,DI;(AX) (DI) 物理地址=(DS)16 +(DI) =2100H 16 + 2000H =21000H+2000H =23000H 指令结果:将23000H单元内容送AL中, 将23001H单元内容送AH中。 指令:MOV AX,DI 为字操作(16位操作)例:已知:(DS)=2100H,(DI)=2000H指令: MOV AL,DI ;(AL) (DI) 物理地址=(DS)16+(DI) =2100H16+2000H =21000H+200

18、0H =23000H 指令结果:将23000H单元内容送AL中,指令: MOV AL,DI;字节操作(8位操作)例:MOV AX,SI;SI中的内容为要取数的偏移地址,假设在执行本条指令前SI=1000H,DS=2000H其过程如图所示。图 寄存器间接寻址 .21000H21001HAHAL+100021000DS 2000.SIX X Y Y 数据段 X X Y Y 操作码 代码段 注意:程序(指令在代码段),要操作的数据在数据段! 图 寄存器间接寻址 例:MOV AX,BP; BP中的内容为要取数的偏移地址假设在执行本条指令前BP=2000H,SS=3000H其过程如图所示。注意:是在堆栈

19、段取数据注意:程序(指令)在代码段,要操作的数据在堆栈段! 操作数.32000H32001HAHAL+200032000SS 3000.BP堆栈段 代码段 5、 寄存器相对寻址方式有效地址有效地址是寄存器内容与有符号是寄存器内容与有符号8 8位或位或1616位位移量之位位移量之和,寄存器可以是和,寄存器可以是BXBX、BPBP或或SISI、DIDI有效地址有效地址BX/BP/SI/DIBX/BP/SI/DI8/168/16位偏移量位偏移量段地址对应段地址对应BX/SI/DIBX/SI/DI寄存器寄存器默认是默认是DSDS,对应,对应BPBP寄存寄存器器默认是默认是SSSS;可用段超越前缀改变;

20、可用段超越前缀改变MOV AX, SI+06H;AXDS:SI+06HMOV AX, 06HSI;AXDS:SI+06H格式:操作码 寄存器,相对值DISP+基址或变址寄存器 操作数在存储器内,指令中寄存器内容与指令指定的位移量(相对值DISP)之和作为操作数所在单元的有效地址。 物理地址 =(DS)16 +(BX)+DISP ; (SI)、(DI)相同。 物理地址= (SS) 16 + (BP)+DISP DISP可以是16位,也可以是8位,DISP是一个数值的代号!有效地址 =段寄存器为DS段寄存器为SS+(BX) (SI) (DI)(BP)DISPDISPDISP DISP例: 如果 (

21、DS)=3000H, (SI)= 2000H, COUNT=3000H 执行指令 MOV AX,CONUTSI,求出此种寻址方式对应的有效地址和物理地址。有效地址= (SI)+ (COUNT)=2000H+3000H =5000H物理地址=(DS)*16 + 5000H=30000H + 5000H =35000H 例:MOV AX,DISPSI;DISP为相对地址偏移量或写为: MOV AX,10SI ;DISP为地址符号 MOV AX,SI10H ;DISP DB 10H MOV AX,SI+10H ;DISP可以为有符号的数图 寄存器相对寻址 例:MOV AX,DISPSI操作数00H2

22、0H.33000H33001HAHAL100033000DS30002000SIDISP+6、 基址变址寻址方式有效地址有效地址由基址寄存器(由基址寄存器(BXBX或或BPBP)的内容加上变)的内容加上变址寄存器(址寄存器(SISI或或DIDI)的内容构成:)的内容构成:有效地址有效地址BX/BPBX/BPSI/DISI/DI段地址对应段地址对应BXBX基址寄存器基址寄存器默认是默认是DSDS,对应,对应BPBP基址基址寄存器寄存器默认是默认是SSSS;可用段超越前缀改变;可用段超越前缀改变MOV AX, BX+SI;AXDS:BX+SIMOV AX, BXSI;AXDS:BX+SI格式: 操

23、作码 寄存器,(基址寄存器)+(变址寄存器)物理地址 = (DS) 16 + (BX)+ (SI)或(DI)物理地址 = (SS) 16 + (BP) + (SI)或(DI)例: MOV AX,BX+DI 或 MOV AX,BXDI DS:(BX)+(DI) 存储单元内容(字)送AX。例: MOV AX,BP+SI 或 MOV AX,BPSI SS:(BP)+(SI) 存储单元内容(字)送AX。 (BX) (BP)有效地址 =+(SI)(DI)图 基址、变址寻址 例:MOV AX,BXSI 其过程如图所示。完成的操作: AX=BX+SI+DS*16 AH=BX+SI+DS*16 AL=BX+S

24、I+DS*16+1 代码段操作数.33000H33001HAHAL200033000DS30001000SIBX+.数据段例:如果例:如果 (DS)=2100H, (BX)= 0158H, (DS)=2100H, (BX)= 0158H, (DI)=10A5H, (DI)=10A5H, 则执行指令则执行指令 MOV ALMOV AL,BXDIBXDI有效地址:有效地址:EA=EA=(BXBX)+ +(DIDI)=0158H+10A5H=11FDH =0158H+10A5H=11FDH 物理地址:(物理地址:(DSDS) * * 16 + 16 + 有效地址有效地址=21000H+11FDH=2

25、21FDH=21000H+11FDH=221FDH执行结果:将执行结果:将221FDH221FDH单元内容送入寄存器单元内容送入寄存器ALAL中。中。MOV AX,DISPBXS1完成的操作: AX=BX+SI+DS*16+DISP AH=BX+SI+DS*16+DISP AL=BX+SI+DS*16+DISP+1 操作数.33200H33201HAHAL020033200DS30002000SIDISP1000BX.代码段数据段举例:若(若(BXBX) 0313H0313H,(,(SISI)1123H1123H,(,(DIDI)0606H0606H,(DSDS) 2000H2000H,(,(

26、SSSS) 6800H6800H,(,(BPBP) 0100H0100H。指出下列指令中画线的操作数的寻址方式,如果为存储指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。器操作数,请计算该操作数的有效地址与物理地址。 MOVAX,1117H MOVBX,SP MOVDX,BXEA0313H,PA20000H+0313H20313H:立即寻址:寄存器寻址:寄存器间接寻址若(若(BXBX) 0313H0313H,(,(SISI)1123H1123H,(,(DIDI)0606H0606H,(DSDS) 2000H2000H,(,(SSSS) 6800H6

27、800H,(,(BPBP) 0100H0100H。指出下列指令中画线的操作数的寻址方式,如果为存储指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。器操作数,请计算该操作数的有效地址与物理地址。 MOV AX,100HSI MOV AX,BP100H:寄存器相对寻址:寄存器相对寻址若(若(BXBX) 0313H0313H,(,(SISI)1123H1123H,(,(DIDI)0606H0606H,(DSDS) 2000H2000H,(,(SSSS) 6800H6800H,(,(BPBP) 0100H0100H。指出下列指令中画线的操作数的寻址方式,如

28、果为存储指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。器操作数,请计算该操作数的有效地址与物理地址。 MOV AX MOV AX,BP+SI+100HBP+SI+100H MOV AL MOV AL,BXSIBXSI:基址变址寻址:相对基址加变址寻址当操作数在内存单元时,系统根据隐含约定,自动将寄存器DS或SS的值作为段地址。然而,当操作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。 段超越前缀形式为(:) 段寄存器名(:)例如:MOV AX,ES:BP ;段地址在ESMOV AX,SS:BX SI ;段地址在SS注意:不是所有

29、的段都可做段超越前缀1 1段内相对寻址段内相对寻址 在段内相对寻址方式中,指令应指明一个8位或16位的相对地址位移量DISP(有正负符号, 为负时用补码表示)。此时,转移地址应该是代码段寄存器CS内容加上指令指针IP内容,再加上相对地址位移量DISP。 例:JMP DISP3.1.2 转移地址的寻址方式JMP DISP 其过程如图所示。图 段内相对寻址 DISP=50 H操作码.50H.2000:1050H+5021050CS20001000IP操作码2000:1000H2000:0FFFH注意:这个过程都在代码段内! DISP也可以是16位如为:1000H 1000H 2 2段内间接寻址段内

30、间接寻址 在段内间接寻址方式中,转移地址的段内偏移地址要么存放在一个16位的寄存器中,要么存放在存贮器的两个相邻单元中。存放偏移地址的寄存器和存贮器的地址将按指令码中规定的寻址方式给出。 此时,寻址所得到的不是操作数,而是转移地址。 例:JMP CX;CX的内容为转移地址的段内偏移量 注意:必须是在段内转移! JMP WORD PTR CX WORD PTR是寻址一个字的标记,指令中必须加上图 段内间接寻址 操作码.2000:4000H+400024000CS2000操作码2000:0FFFHCX(新IP) CX CX的内容为新的的内容为新的IPIP值,程序转移到新的入口处值,程序转移到新的入口处 ,在指令中,在指令中CXCX的内容为的内容为4000H4000H,CXC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论