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

下载本文档

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

文档简介

第三章8086指令系统及汇编语言8086微处理器的各种寻址方式8086指令系统8086汇编语言程序基本格式8086汇编语言程序设计方法10100000000101110000010000001010101000100001100010H11H12H13H14H15H16HMOVAL,(n)nADDAL,OAH0AHMOV(n),ALn存储器地址号汇编语言二进制机器指令3.18086指令系统概述指令是计算机执行某种操作的命令。从计算机组成的层次结构来说,计算机的指令有微指令、机器指令和宏指令。机器指令—简称指令,完成某一种操作微指令-执行某个最基本动作的控制命令,解释执行机器指令宏指令—由若干条机器指令组成的软件指令,完成某一特定功能。指令系统是计算机所有指令的集合,表征一台计算机的重要因素。它的格式和功能不仅直接影响计算机的硬件结构,也直接影响到系统软件,影响到机器的适用范围。一、指令格式计算机的指令由操作码和操作数两部分组成操作码字段表示指令的功能或操作的性质—做什么,助记符表示操作数字段指令操作的对象或对象的位置—对谁做,操作数操作的对象怎么寻找和确定—寻址方式操作码指令的操作码表示该指令应进行什么性质的操作。组成操作码字段的位数一般取决于计算机指令系统的规模固定长度操作码:便于译码,扩展性差可变长度操作码:能缩短指令的平均长度操作数(地址码)操作数字段一般有一个、两个或三个,多个操作数之间用“,”分隔。源操作数—指令执行前后值不变目的操作数—指令执行后值改变指令种类零地址指令:指令的指令字中只有操作码,没有地址码一地址指令:指令中只给出一个操作数地址A,另一个操作数地址和目的操作数的地址均隐含(指定累加器AC)(AC)OP(A)->AC二地址指令:指令中给出两个地址码字段,分别指明参与操作的两个数在内存中或运算器通用寄存器的地址,其中地址A1兼做存放操作结果的地址(A1)OP(A2)->A1三地址指令:指令中有两个源操作数地址,A1,A2和一个目标操作数地址A3(A1)OP(A2)->A3根据操作数存放的位置,操作数有三种:(1)立即数—指令的操作数字段为操作数本身(数值)(2)寄存器操作数—操作数包含在CPU的一个内部寄存器中(3)内存操作数—操作数在内存单元,操作数字段包含内存单元地址。可做目的操作数:除立即数外的寄存器、内存操作数可做源操作数:立即数、寄存器、内存操作数8086中,任何内存地址由两部分组成:段的基地址:单元所在段的基地址段内偏移量:此单元与段基地址的距离有效地址EA(EffectiveAddress)段内偏移量为适应各种数据结构的需要,可以有几部分组成,所以称为有效地址EA.不同EA的求法就构成了不同的寻址方式。二、机器字长与指令长度机器字长计算机能直接处理的二进制数的位数,它决定运算精度指令字长—指令的字节数单字指令--指令字长度等于机器字长度的指令半字长指令–指令长度等于半个机器字长度的指令双字长指令—指令字长度等于两个机器字长度指令编码:等长和变长编码格式3.28086指令寻址方式指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址把寻找操作数的方式叫做操作数的寻址方式寻址方式分两大类:操作数的寻址方式—与数据有关,8种转移地址的寻址方式—与程序转移有关,4种操作数采取哪一种寻址方式会影响处理器执行指令的速度和效率对程序设计也很重要指令的组成操作码:说明计算机要执行哪种操作,如传送、运算等操作,它是指令中不可缺少的组成部分操作数:是指令执行的参与者,即各种操作的对象操作码操作数例:MOVAX,CX;将CX的内容送入AX中。指令的助记符格式操作数2,被称为源操作数src,它表示参与指令操作的一个对象.操作数1,被称为目的操作数dst,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果.分号后的内容是对指令的解释

操作码

操作数1,操作数2

;注释操作数的来源指令寄存器内存I/O设备或端口操作数指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中),这种操作数被称为立即数imm。可以是8位数值(00H~FFH)也可以是16位数值(0000H~FFFFH)立即数寻址方式常用来给寄存器赋值MOVAX,0102H ;AX←0102HMOVAL,02H ;AL←02H3.1.1操作数的寻址方式1、立即寻址

格式:操作码数字表达式MOVAX,F58AH;(字操作)F58AH称为立即数

助记符目的源(16位操作数)H表示为十六进制数

dst

src

完成的操作:AXF58AHMOVAH,F5H(字节操作)F5H称为立即数(8位操作数)MOVAL,8AH(字节操作)8AH称为立即数完成的操作:AHF5H,AL8AH立即寻址操作过程

3456H

3457H

AL=8A

字寻址方式

存储器CS段8AF5操作码AL=8AAH=F5存储器CS段8AF5操作码AH=F5操作码字节寻址方式

MOVAX,F58AHMOVAH,F5HMOVAL,8AH指令对立即数格式的要求8086/8088指令对立即数的格式有三种:1)立即数可以是16进制的数

MOVAL,57H2)立即数可以是10进制的数,但指令运行后CPU自动把10进制数转换为16进制数,然后完成给定功能的操作。

MOVAL,57;指令执行后将AL39H

3)立即数可以是2进制的数

MOVAL,01010111B;指令执行后将AL57H

为十进制数时,数后不加H,2进制数时,数后加B,CPU以此来辨别是那种类型的数据。2、直接寻址方式直接寻址方式的有效地址在指令中直接给出,默认的段地址在DS段寄存器,可使用段超越前缀改变段。中括号包含有效地址,表达存储单元的内容MOVAX,[2000H] ;AX←DS:[2000H]MOVAX,ES:[2000H] ;AX←ES:[2000H]MOVAX,BUFFER

;BUFFER:符号地址指令格式:操作码寄存器(16位),地址表达式

直接寻址方式的操作数的16位偏移地址(有直接地址值和标号两种形式)直接包含在指令中,它与操作码一起存放在代码段中的操作码之后。段地址DS隐含,也可指定其它段,必须需在指令中指明。存储器物理地址地址为:DS:偏移地址或ES:偏移地址。例:

MOVAX,ES:[2000H](读数据,RD线为低电平)

将ES:2000H单元内容送入AX。例:MOVAX,LABLE或MOVAX,[LABEL]

将标号为LABLE(存放操作数单元的符号地址),即DS:LABLE中的内容送入AX。

LABLE必须在段定义中指明。

例:MOV

AX,(2000H);字操作

MOV

AL,(2000H);字节操作

MOV

AH,(2001H);字节操作

此两条指令的功能与字操作指令的功能相同!

16位段内偏移地址直接包含在指令中。

直接寻址存储器DS段8AF5XXAL=8AAH=F5存储器CS段操作码代码段数据段0020DS:2000DS:2001

字寻址方式

存储器DS段8AF5XXAL=8AAH=F5存储器CS段操作码代码段数据段0020DS:2000DS:2001

字节寻址方式

操作码0120MOVAX,(2000H)MOVAL,(2000H)MOVAH,(2001H)3、寄存器寻址方式操作数存放在CPU的内部寄存器reg中1)8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL2)16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP3)4个段寄存器seg:CS、DS、SS、ES寄存器名表示其内容(操作数)MOVAX,BX ;AX←BX格式:操作码寄存器,寄存器

MOVAX,BX;AXBXMOVBX,AX;BXAX

MOVAL,BH;ALBH

MOVAH,AL;AHALMOVDS,AX;DSAX

MOVSI,AX;SIAX注意:目的和源寄存器的位数必须相同,不同位数寄存器之间不能传送数据处理如:MOVBX,AH如果要将数据送入段寄存器(CS、DS、ES、SS),必须先将这个数送入一个非段寄存器,然后再送到段寄存器段寄存器写入方法:

MOVCS,3000H;错!

MOVAX,3000H;(该指令不影响RD和WR控制线均为高电平)MOVCS,AX;正确(但在使用中不允许随便修改CS的内容!)MOVSS,1000H;错!

MOVDI,1000HMOVSS,DI;正确

,(该指令不影响RD和WR控制线均为高电平)4、寄存器间接寻址方式MOVAX,[BX] ;AX←DS:[BX]MOVAX,ES:[BX] ;AX←ES:[BX]MOVAH,DS:[BP]MOVES:[DI],AL格式:操作码寄存器,(寄存器)

有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中;对于BX、SI、DI,默认的段地址在DS段寄存器,可使用段超越前缀改变;对于BP,默认的段地址在SS段寄存器,可使用段超越前缀改变注意:寄存器间接寻址要用方括号或圆号括起来,以便与寄存器操作数相区别。例:MOVAX,[BX];将由BX决定的存储单元的内容送到AX寄存器,要求对BX事前定义。间接寻址AX0000000100020003BBAATAB:AHALAABB数据段0001HBX=(BX)(SI)(DI)(BP)段寄存器为DS段寄存器为SS有效地址=

操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。

物理地址计算方法:物理地址=(DS)×16+(BX)或(SI)或(DI)物理地址=(SS)×16+(BP)例:已知:(DS)=2100H,(DI)=2000H

指令:MOVAX,[DI];(AX)

((DI))物理地址=(DS)×16+(DI)

=2100H×16+2000H

=21000H+2000H=23000H

指令结果:将23000H单元内容送AL中,将23001H单元内容送AH中。

指令:MOVAX,[DI]为字操作(16位操作)例:已知:(DS)=2100H,(DI)=2000H指令:MOVAL,[DI];(AL)

((DI))物理地址=(DS)×16+(DI)

=2100H×16+2000H=21000H+2000H=23000H

指令结果:将23000H单元内容送AL中,指令:MOVAL,[DI];字节操作(8位操作)例:MOVAX,[SI];SI中的内容为要取数的偏移地址,假设在执行本条指令前SI=1000H,DS=2000H其过程如图所示。图

寄存器间接寻址........21000H21001HAHAL+100021000DS2000..SIXXYY数据段

XXYY操作码代码段

注意:程序(指令在代码段),要操作的数据在数据段!

寄存器间接寻址

例:MOVAX,[BP];BP中的内容为要取数的偏移地址假设在执行本条指令前BP=2000H,SS=3000H其过程如图所示。注意:是在堆栈段取数据注意:程序(指令)在代码段,要操作的数据在堆栈段!

操作数........32000H32001HAHAL+200032000SS3000..BP堆栈段

代码段

5、寄存器相对寻址方式有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址=BX/BP/SI/DI+8/16位偏移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变MOVAX,[SI+06H] ;AX←DS:[SI+06H]MOVAX,06H[SI] ;AX←DS:[SI+06H]格式:操作码寄存器,相对值DISP+基址或变址寄存器

操作数在存储器内,指令中寄存器内容与指令指定的位移量(相对值DISP)之和作为操作数所在单元的有效地址。物理地址=(DS)×16+(BX)+DISP;(SI)、(DI)相同。物理地址=(SS)×16+(BP)+DISPDISP可以是16位,也可以是8位,DISP是一个数值的代号!有效地址=段寄存器为DS段寄存器为SS+(BX)(SI)(DI)(BP)DISPDISPDISP

DISP例:如果(DS)=3000H,(SI)=2000H,COUNT=3000H执行指令MOVAX,CONUT[SI],求出此种寻址方式对应的有效地址和物理地址。有效地址=(SI)+(COUNT)=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H

例:MOVAX,DISP[SI];DISP为相对地址偏移量或写为:MOVAX,10[SI];DISP为地址符号

MOVAX,[SI]10H

;DISPDB10HMOVAX,[SI+10H];DISP可以为有符号的数图

寄存器相对寻址例:MOVAX,DISP[SI]操作数00H20H......33000H33001HAHAL100033000DS30002000SIDISP+6、基址变址寻址方式有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址=BX/BP+SI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变MOVAX,[BX+SI] ;AX←DS:[BX+SI]MOVAX,[BX][SI] ;AX←DS:[BX+SI]格式:操作码寄存器,(基址寄存器)+(变址寄存器)物理地址=(DS)×16+(BX)+(SI)或(DI)物理地址=(SS)×16+(BP)+(SI)或(DI)例:MOVAX,[BX+DI]或MOVAX,[BX][DI]

DS:((BX)+(DI))

存储单元内容(字)送AX。例:MOVAX,[BP+SI]或MOVAX,[BP][SI]

SS:((BP)+(SI))

存储单元内容(字)送AX。

(BX)(BP)有效地址=+(SI)(DI)图

基址、变址寻址

例:MOVAX,[BX][SI]其过程如图所示。完成的操作:AX=[BX+SI+DS*16]AH=[BX+SI+DS*16]AL=[BX+SI+DS*16+1]

代码段操作数....33000H33001HAHAL200033000DS30001000SIBX+....数据段例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,则执行指令MOVAL,[BX][DI]有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH执行结果:将221FDH单元内容送入寄存器AL中。MOVAX,DISP[BX][S1]完成的操作:AX=[BX+SI+DS*16+DISP]AH=[BX+SI+DS*16+DISP]AL=[BX+SI+DS*16+DISP+1]

代码段数据段举例:若(BX)=0313H,(SI)=1123H,(DI)=0606H,(DS)=2000H,(SS)=6800H,(BP)=0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。①MOV AX,1117H②MOV BX,SP③MOV DX,[BX]EA=0313H,PA=20000H+0313H=20313H:立即寻址:寄存器寻址:寄存器间接寻址若(BX)=0313H,(SI)=1123H,(DI)=0606H,(DS)=2000H,(SS)=6800H,(BP)=0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。⑤MOVAX,100H[SI]

EA=0100H+100H=0200H,PA=68000H+0200H=68200HEA=1123H+100H=1223H,PA=20000H+1223H=21223H④MOVAX,[BP]100H:寄存器相对寻址:寄存器相对寻址若(BX)=0313H,(SI)=1123H,(DI)=0606H,(DS)=2000H,(SS)=6800H,(BP)=0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。⑦MOVAX,[BP+SI+100H]

EA=0313H+1123H=1436H,PA=20000H+1436H=21436HEA=0100H+1123H+100H=1323H,PA=68000H+1323H=69323H⑥MOVAL,[BX][SI]:基址变址寻址:相对基址加变址寻址当操作数在内存单元时,系统根据隐含约定,自动将寄存器DS或SS的值作为段地址。然而,当操作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。

段超越前缀形式为(:)段寄存器名(:)例如:MOVAX,ES:[BP];段地址在ESMOVAX,SS:[BX][SI];段地址在SS注意:不是所有的段都可做段超越前缀1.段内相对寻址在段内相对寻址方式中,指令应指明一个8位或16位的相对地址位移量DISP(有正负符号,为负时用补码表示)。此时,转移地址应该是代码段寄存器CS内容加上指令指针IP内容,再加上相对地址位移量DISP。例:JMPDISP3.1.2转移地址的寻址方式JMPDISP其过程如图所示。图

段内相对寻址

DISP=50H操作码..50H......2000:1050H+5021050CS20001000IP操作码2000:1000H2000:0FFFH注意:这个过程都在代码段内!

DISP也可以是16位如为:1000H

1000H

2.段内间接寻址

在段内间接寻址方式中,转移地址的段内偏移地址要么存放在一个16位的寄存器中,要么存放在存贮器的两个相邻单元中。存放偏移地址的寄存器和存贮器的地址将按指令码中规定的寻址方式给出。此时,寻址所得到的不是操作数,而是转移地址。例:JMPCX;CX的内容为转移地址的段内偏移量

注意:必须是在段内转移!

JMPWORDPTRCXWORDPTR是寻址一个字的标记,指令中必须加上图

段内间接寻址操作码........2000:4000H+400024000CS2000操作码2000:0FFFH

温馨提示

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

评论

0/150

提交评论