版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 80868086指令系统及汇编语言指令系统及汇编语言 本章节知识点:1)8086微处理器的各种寻址方式2)数据传送指令3)算术运算指令4)逻辑运算与移位指令5)串操作指令6)转移指令7)8086汇编语言程序基本格式8)8086汇编语言程序设计方法本章学习的主要内容及要求本章学习的主要内容及要求1 1、掌握、掌握80868086汇编语言的各种寻址方式的特点、功能和汇编语言的各种寻址方式的特点、功能和基本格式;基本格式;2 2、掌握、掌握80868086汇编语言各指令功能,指令执行后对目的汇编语言各指令功能,指令执行后对目的操作数和标志位的影响;操作数和标志位的影响;3 3、掌握源操
2、作数的物理地址的计算方法;、掌握源操作数的物理地址的计算方法;4 4、掌握、掌握80868086汇编语言各指令的语法格式;汇编语言各指令的语法格式;5 5、掌握汇编语言的程序设计中子程序、中断服务子程、掌握汇编语言的程序设计中子程序、中断服务子程序之间的差异;序之间的差异;6 6、掌握段定义中宏指令的使用方法;、掌握段定义中宏指令的使用方法;7 7、掌握应用汇编语言编写应用程序的基本设计方法;、掌握应用汇编语言编写应用程序的基本设计方法;本章难点:本章难点:1、段地址与源操作数之间的关系;2、各寻址方式之间的差异;3、指令执行后对标志位的影响;4、指令与控制信号之间的联系;5、汇编语言编写应用
3、程序的基本设计方法;本章的学习方法:课前认真预习,课后请认真复习并请多看课本和参考书中的习题与练习题。问题的提出问题的提出: :什么是软件?为什么计算机的运行必须依靠软件来完成?软件都有那些形式?什么是汇编语言?软件:能控制计算机完成指定工作软件:能控制计算机完成指定工作任务的二进制代码集,这个代码集任务的二进制代码集,这个代码集称为机器指令或机器语言。软件有称为机器指令或机器语言。软件有很多种形式,如常用的高级语言很多种形式,如常用的高级语言(C C、C+C+等),所有的高级语言编等),所有的高级语言编写的程序最终都必须被解译为机器写的程序最终都必须被解译为机器指令(有序的二进制代码集),因
4、指令(有序的二进制代码集),因为计算机只能接受二进制代码。为计算机只能接受二进制代码。1010 00000001 01110000 01000000 10101010 00100001 100010H11H12H13H14H15H16HMOV AL, (n)nADD AL, OAH0AHMOV (n), ALn存储器地址号汇编语言二进制机器指令图3-1机器指令、汇编语言的区别汇编语言:是一种将机器语言按其特定的功能符号化,使其便于记忆和理解的计算机语言。名称助记符操作码说明立即数取入累加器MOV AL ,n 1011000 B0Hn nH两字节指令,把第二个字节的立即数n送累加器AL。加立即数
5、 ADD AL ,n00000100 04Hn nH两字节指令,累加器AL中的内容与第二字节立即数相加,结果在AL中。还有单字节、3或4字节指令,字节越高,运行机器周期越大。每一条指令都有固定的操作码,计算机就是靠辩识操作码来实现各种不同的运算功能。(请参看实验指导书中的有关程序)指令的组成指令的组成操作码操作码: :说明计算机要执行哪种操作,如传送、运算、说明计算机要执行哪种操作,如传送、运算、等操作,它是指令中不可缺少的组成部分等操作,它是指令中不可缺少的组成部分操作数操作数: :是指令执行的参与者,即各种操作的对象是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一
6、个或两个有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有操作数,也有个别指令有3 3个甚至个甚至4 4个操作数有些指令个操作数有些指令隐含隐含操作数。操作数。操作码操作码操作数操作数指令由操作码和操作数两部分组成例: MOV AX,CX ;将CX的内容送入AX中。目的目的操作数操作数源源操作数操作数操作码操作码双操作数双操作数指令的助记符格式指令的助记符格式操作数操作数2 2,被称为,被称为源操作数源操作数srcsrc,它表示参与指令操作,它表示参与指令操作的一个对象的一个对象. .操作数操作数1 1,被称为,被称为目的操作数目的操作数dstdst,它不仅可以作为指,它不仅
7、可以作为指令操作的一个对象,还可以用来存放指令操作的结果令操作的一个对象,还可以用来存放指令操作的结果. .分号后的内容是对指令的解释分号后的内容是对指令的解释 操作码操作码 操作数操作数1,操作数操作数2 ;注释;注释指令的操作码和操作数指令的操作码和操作数每种指令的每种指令的操作码操作码 用一个助记符表示(指令功能的英文缩写)用一个助记符表示(指令功能的英文缩写) 对应着机器指令的一个或多个二进制编码对应着机器指令的一个或多个二进制编码指令中的指令中的操作数操作数 可以是一个具体的数值可以是一个具体的数值 可以是存放数据的寄存器可以是存放数据的寄存器 或指明存放数据的存储器地址或指明存放数
8、据的存储器地址 操作码操作码 操作数操作数1,操作数操作数2 ;注释;注释寻址与寻址方式寻址与寻址方式指令系统设计了多种操作数的来源指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻找操作数的过程就是操作数的寻址寻址把寻找操作数的方式叫做操作数的把寻找操作数的方式叫做操作数的寻址方式寻址方式理解操作数的寻址方式是理解指令功能的前提理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式操作数采取哪一种寻址方式1)会影响处理器执行指令的速度和效率2)对程序设计也很重要3.1 8086/80883.1 8086/8088的寻址方式的寻址方式操作数的来源操作数的来源指指 令令寄寄
9、存存 器器内内 存存I/O设备或端口设备或端口操作数操作数指令中的操作数指令中的操作数直接存放在机器代码中,紧跟在操作直接存放在机器代码中,紧跟在操作码之后码之后(操作数作为指令的一部分存放在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)的主存单元中), ,这种操作数被称为这种操作数被称为立即数立即数immimm。可以是8位数值(00HFFH)也可以是16位数值(0000HFFFFH)立即数寻址方式常用来给立即数寻址方式常用来给寄存器寄存器赋值赋值MOV AX, 0102HMOV AX, 0102H;AX0102HAX0102HMOV AL, 02HMOV AL, 02H;A
10、L02HAL02H3.1.1 3.1.1 操作数的寻址方式操作数的寻址方式1、立即寻址、立即寻址 格式格式: 操作码操作码 数字表达式数字表达式 MOV AX, F58AH ; (字操作) F58AH称为立即数 助记符 目的 源 (16位操作数) H表示为十六进制数 dst src 完成的操作:AX F58AH MOV AH, F5H (字节操作) F5H称为立即数(8位操作数) MOV AL, 8AH (字节操作) 8AH称为立即数 完成的操作:AH F5H , AL 8AH立即寻址操作过程示意如图3-2 3456H 3457H AL=8A 字寻址方式 存储器CS段8AF5操作码AL=8A
11、AH=F5存储器CS段8AF5操作码AH=F5操作码字节寻址方式 代码段内取数 注意取数据的地址顺序 MOV AX,F58AHMOV AH,F5HMOV AL,8AH指令对立即数格式的要求指令对立即数格式的要求8086/8088指令对立即数的格式有三种:1)立即数可以是16进制的数 MOV AL,57H2)立即数可以是10进制的数,但指令运行后CPU自动把10进制数转换为16进制数,然后完成给定功能的操作。 MOV AL,57 ;指令执行后将AL 39H 3)立即数可以是2进制的数 MOV AL,01010111B ;指令执行后将AL 57H 为十进制数时,数后不加H,2进制数时,数后加B,C
12、PU以此来辨别是那种类型的数据。2 2、 直接寻址方式直接寻址方式直接寻址方式的有效地址在指令中直接给出,直接寻址方式的有效地址在指令中直接给出,默认的默认的段地址在段地址在DSDS段寄存器段寄存器,可使用,可使用段超越前缀段超越前缀改变段。改变段。中括号包含有效地址,表达存储单元的内容中括号包含有效地址,表达存储单元的内容MOV AX, 2000H;AXDS:2000HMOV AX, ES: 2000H;AXES:2000HMOV AX,BUFFER ; BUFFER:符号地址:符号地址指令格式指令格式: 操作码操作码 寄存器(寄存器(16位)位) , 地址表达式地址表达式 直接寻址方式的操
13、作数的16位偏移地址(有直接地址值和标号两种形式)直接包含在指令中,它与操作码一起存放在代码段中的操作码之后。段地址DS隐含,也可指定其它段,必须需在指令中指明。存储器物理地址地址为:存储器物理地址地址为:DSDS:偏移地址:偏移地址 或或 ESES:偏移地址。:偏移地址。 例: MOV AX,ES:2000H (读数据读数据,RD线为低电平线为低电平) 将ES:2000H单元内容送入AX。 例: MOV AX,LABLE 或 MOV AX,LABEL 将标号为LABLE(存放操作数单元的符号地址) ,即DS:LABLE中的内容送入AX。LABLE必须在段定义中指明。 例:MOVAX,(200
14、0H); 字操作 其过程如图3.3所示。指令中的16位段内偏移地址的低字节在前,高字节在后。 MOVAL,(2000H); 字节操作 MOVAH,(2001H); 字节操作 此两条指令的功能与字操作指令的功能相同! 16位段内偏移地址直接包含在指令中 图3-3 直接寻址存储器DS段8AF5XXAL=8A AH=F5存储器CS段操作码代码段数据段0020DS:2000DS:2001 字寻址方式 存储器DS段8AF5XXAL=8A AH=F5存储器CS段操作码代码段数据段0020DS:2000DS:2001 字寻址方式 操作码0120MOV AX,(2000H)MOV AL,(2000H)MOV
15、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寄存器名表示其内容(操作数)寄存器名表示其内容(操作数)MOV AX, BX;AXBX格式格式:操作码操作码
16、寄存器寄存器,寄存器寄存器例如: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,AHAH如果要将数据送入段寄存器(CS、DS、ES、SS),必须先将这个数送入一个非段寄存器,然后在送到段寄存器段寄存器写入方法: MOV CS,3000H ; 错! MOV AX,
17、3000H ; (该指令不影响RD和WR控制线均为高电;平) MOV CS,AX ;正确(在使用中不允许随便修改CS的内容!) MOV SS,1000H ;处理错! MOV DI,1000H MOV SS,DI ;正确 , (该指令不影响RD和WR控制线均为高电;平)4 4、 寄存器间接寻址方式寄存器间接寻址方式有效地址存放在基址寄存器有效地址存放在基址寄存器BXBX、BPBP或变址寄存器或变址寄存器SISI、DIDI中;中;对于对于BXBX、SISI、DIDI,默认的默认的段地址在段地址在DSDS段寄存器,段寄存器,可使用段超越前缀改变;可使用段超越前缀改变;对于对于BPBP,默认的默认的段
18、地址在段地址在SSSS段寄存器,可使用段超越前缀改变段寄存器,可使用段超越前缀改变MOV AX, BX;AXDS:BXMOV AX, ES:BX;AXES:BXMOV AH,DS:BPMOV ES:DI,AL格式格式:操作码操作码 寄存器寄存器,(寄存器寄存器)注意注意:寄存器间接寻址要用方括号或圆号括起来,以便寄存器间接寻址要用方括号或圆号括起来,以便与寄存器操作数相区别。与寄存器操作数相区别。例: MOV AX,BX;将由BX决定的存储单元的内容送到AX寄存器,要求对要求对BX事前定义事前定义。间接寻址间接寻址AX0000000100020003BBAATAB:AH AL AA BB数据段
19、数据段0001HBX=操作数在存储器中,指令中寄存器内容作为操作数所在操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。单元的有效地址。 (BX) (SI) (DI) (BP)段寄存器为段寄存器为DS段寄存器为段寄存器为SS物理地址计算方法:物理地址计算方法:物理地址物理地址 = (DS)16 + (BX)或()或(SI)或()或(DI)物理地址物理地址 = (SS) 16 + (BP)有效地址有效地址 = 例:已知:(DS)=2100H,(DI)=2000H 指令:MOV AX,DI;(AX) (DI) 物理地址=(DS)16 +(DI) =2100H 16 + 2000H =
20、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+2000H =23000H 指令结果:将23000H单元内容送AL中,指令: MOV AL,DI;字节操作(8位操作)例:MOV AX,SI;SI中的内容为要取数的偏移地址,假设在执行本条指令前SI=1000H,DS=2000H其过程如图3-4(a)
21、所示。图3-4(A) 寄存器间接寻址 .21000H21001HAHAL+100021000DS 2000.SIX X Y Y 数据段数据段 X X Y Y 操作码操作码 代码段代码段 注意:程序(指令在代码段),要操作的数据在数据段! 图3-4(B) 寄存器间接寻址 例:MOV AX,BP; BP中的内容为要取数的偏移地址假设在执行本条指令前BP=2000H,SS=3000H其过程如图3-4(b)所示。注意:是在堆栈段取数据注意:程序(指令)在代码段,要操作的数据在堆栈段! 操作数.32000H32001HAHAL+200032000SS 3000.BP堆栈段堆栈段 代码段代码段 5 5、
22、寄存器相对寻址方式寄存器相对寻址方式有效地址有效地址是寄存器内容与有符号是寄存器内容与有符号8 8位或位或1616位位移量之位位移量之和,寄存器可以是和,寄存器可以是BXBX、BPBP或或SISI、DIDI有效地址有效地址BX/BP/SI/DIBX/BP/SI/DI8/168/16位偏移量位偏移量段地址对应段地址对应BX/SI/DIBX/SI/DI寄存器寄存器默认是默认是DSDS,对应,对应BPBP寄存器寄存器默认是默认是SSSS;可用段超越前缀改变;可用段超越前缀改变MOV AX, SI+06H;AXDS:SI+06HMOV AX, 06HSI;AXDS:SI+06H格式格式:操作码操作码
23、寄存器,相对值寄存器,相对值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 执行指令
24、 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可以为有符号的数 其过程如图4.5所示。 图3-5 寄存器相对寻址 例:MOV AX,DISPSI操作数00H20H.33000H33001HAHAL10003
25、3000DS30002000SIDISP+6 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格式格式: 操作码操作码 寄存器,(基
26、址寄存器)寄存器,(基址寄存器)+(变址寄存器)(变址寄存器)物理地址物理地址 = (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)图3-6 基址、变址寻址 例:MOV AX,BXSI 其过程如图所示。完成的操作: AX=
27、BX+SI+DS*16 AH=BX+SI+DS*16 AL=BX+SI+DS*16+1 代码段操作数.33000H33001HAHAL200033000DS30001000SIBX+.数据段例:如果例:如果 (DS)=2100H, (BX)= 0158H, (DI)=10A5H, (DS)=2100H, (BX)= 0158H, (DI)=10A5H, 则则执行指令执行指令 MOV ALMOV AL,BXDIBXDI有效地址:有效地址:EA=EA=(BXBX)+ +(DIDI)=0158H+10A5H=11FDH =0158H+10A5H=11FDH 物理地址:(物理地址:(DSDS) * *
28、 16 + 16 + 有效地址有效地址=21000H+11FDH=221FDH=21000H+11FDH=221FDH执行结果:将执行结果:将221FDH221FDH单元内容送入寄存器单元内容送入寄存器ALAL中。中。7 7、 相对基址变址寻址方式相对基址变址寻址方式有效地址有效地址是基址寄存器(是基址寄存器(BX/BPBX/BP)、变址寄存器)、变址寄存器(SI/DISI/DI)与一个)与一个8 8位或位或1616位位移量之和:位位移量之和:有效地址有效地址BX/BPBX/BPSI/DISI/DI8/168/16位偏移量位偏移量段地址对应段地址对应BXBX基址寄存器基址寄存器默认是默认是DS
29、DS,对应,对应BPBP基址寄存基址寄存器器默认是默认是SSSS;可用段超越前缀改变;可用段超越前缀改变MOV AX, BX+DI+6;AXDS:BX+DI+6MOV AX, 6BX+DIMOV AX, 6BXDI格式格式: :操作码操作码 寄存器,寄存器,DISP+DISP+(基址寄存器)(基址寄存器)+ +(变址寄存器)(变址寄存器)相对基址变址寻址方式操作数的地址是由基址、变址方式得到的地址再加上由指令指明的8位或16位的相对偏移量而得到的。 操作数在存储器内,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)的内容之和再加上位移量(8位或16位),得到操作数所在单元的有效地址。
30、(BX) (SI) DISP8 (BP) (DI) DISP16有效地址有效地址=+例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,DISP=0250H 指令: MOV AX,DISP BXSI 或 MOV AX,DISP BX+SI 或 MOV AX,DISP+BX+SI有效地址: DISP +(BX)+(SI)=0250H+2000H+0100H=3250H物理地址:(DS)*16 +有效地址=30000H+3250H=33250H执行结果:将33250H单元内容送AL,33251H内容送AH。MOV AX,DISPBXS1完成的操作: AX=BX+SI+DS*
31、16+DISP AH=BX+SI+DS*16+DISPAL=BX+SI+DS*16+DISP+1 操作数.33200H33201HAHAL020033200DS30002000SIDISP1000BX.代码段数据段举例举例若(若(BXBX) 0313H0313H,(,(SISI)1123H1123H,(,(DIDI)0606H0606H,(DSDS) 2000H2000H,(,(SSSS) 6800H6800H,(,(BPBP) 0100H0100H。指出下列指令中画线的操作数的寻址方式,如果为存储指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。器
32、操作数,请计算该操作数的有效地址与物理地址。 MOVAX,1117H MOVBX,SP MOVDX,BXEA0313H,PA20000H+0313H20313H:立即寻址立即寻址:寄存器寻址寄存器寻址:寄存器间接寻址寄存器间接寻址举例举例若(若(BXBX) 0313H0313H,(,(SISI)1123H1123H,(,(DIDI)0606H0606H,(DSDS) 2000H2000H,(,(SSSS) 6800H6800H,(,(BPBP) 0100H0100H。指出下列指令中画线的操作数的寻址方式,如果为存储指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地
33、址与物理地址。器操作数,请计算该操作数的有效地址与物理地址。 MOV AX MOV AX,100HSI100HSI MOV AX MOV AX,BP100HBP100H: :寄存器相对寻址寄存器相对寻址:寄存器相对寻址寄存器相对寻址举例举例若(若(BXBX) 0313H0313H,(,(SISI)1123H1123H,(,(DIDI)0606H0606H,(DSDS) 2000H2000H,(,(SSSS) 6800H6800H,(,(BPBP) 0100H0100H。指出下列指令中画线的操作数的寻址方式,如果为存储指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效
34、地址与物理地址。器操作数,请计算该操作数的有效地址与物理地址。 MOV AX MOV AX,BP+SI+100HBP+SI+100H MOV AL MOV AL,BXSIBXSI: :基址变址寻址基址变址寻址:相对基址加变址相对基址加变址寻址寻址当操作数在内存单元时,系统根据隐含约定,自动将当操作数在内存单元时,系统根据隐含约定,自动将寄存器寄存器DSDS或或SSSS的值作为段地址的值作为段地址。然而,当操作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。 段超越前缀形式为(:) 段寄存器名(:)例如:MOV AX,ES:BP ;段地址在ESMOV AX,SS:BX SI ;段
35、地址在SS注意:不是所有的段都可做段超越前缀段超越段超越 1段内相对寻址 在段内相对寻址方式中,指令应指明一个8位或16位的相对地址位移量DISP(有正负符号, 为负时用补码表示)。此时,转移地址应该是代码段寄存器CS内容加上指令指针IP内容,再加上相对地址位移量DISP。 例:JMP DISP 其过程如图3-8所示。 3.1.2 3.1.2 转移地址的寻址方式转移地址的寻址方式JMP DISP 其过程如图3-8所示。图3-8 段内相对寻址 DISP=50 H操作码.50H.2000:1050H+5021050CS20001000IP操作码2000:1000H2000:0FFFH注意:这个过程
36、都在代码段内!注意:这个过程都在代码段内! 也可以是16位如为:1000H 1000H2000H 2段内间接寻址 在段内间接寻址方式中,转移地址的段内偏移地址要么存放在一个16位的寄存器中,要么存放在存贮器的两个相邻单元中。存放偏移地址的寄存器和存贮器的地址将按指令码中规定的寻址方式给出。此时,寻址所得到的不是操作数,而是转移地址。 例:JMP CX;CX的内容为转移地址的段内偏移量 注意:必须是在段内转移! 其过程如图3-9所示。 JMP WORD PTR CXWORD PTR是寻址一个字的标记,指令中必须加上图3-9 段内间接寻址 操作码.2000:4000H+400024000CS200
37、0操作码2000:0FFFHCX(新IP)CX的内容为新的IP值,程序转移到新的入口处 ,在指令中CX的内容为4000H,CX值不能超出该段的区域 3 3段间直接寻址段间直接寻址 在段间直接寻址方式中,指令码中将直接给出16位的段地址和16位的段内偏移地址。 例:JMP FAR PTR ADD1; ADD1ADD1为转移地址的标号为转移地址的标号 FAR表示转移距离大于32K,或是不同段之间转移。 PTRPTR用来建立一个符号地址,但它本身并不分配存储用来建立一个符号地址,但它本身并不分配存储器,只是用来对已分配的存储地址赋予另一种属性,使器,只是用来对已分配的存储地址赋予另一种属性,使该地址
38、具有另一种类型。该地址具有另一种类型。 在执行段间直接寻址指令时,指令操作码后的第二个字将赋予代码段寄存器CS,第一个字将赋予指令指针寄存器IP。最后CS内容和IP内容相加则得转移地址,如图3-10所示。 ADD1的值由计算机自动给出图3-10 段间直接寻址 操作码偏移量低字节00H偏移量高字节30H段地址低字节00H段地址高字节40H.操作码.43000H+400043000CS3000IP转移转移新位置新位置段段1段段2ADD1ADDRADDR 4段间间接寻址 段间间接寻址方式和段内间接寻址相似。但是,由于确定转移地址需要32位信息,因此段间间接寻址只适用于存贮器寻址方式。用这种寻址方式可
39、计算出存放转移地址的存贮单元的首地址,与此相邻的4个单元中,前两个单元存放16位的段内偏移地址,而后两单元存放的是16位的段地址,如图3-11所示。 例:JMP DWORD PTRBPDI在这里是32位,两个字,所以要加DWORD,如为BP寄存器,要在SS段中取数。图3-11 段间间接寻址 执行该指令之前:SS=3000HBP=1000HDI=2000H执行该指令之后有了新的CS和IP的值注意:如无BP,则在DS段内求存放转移地址的存贮单元的首地址偏移量低字节00H偏移量高字节20H段地址低字节00H段地址高字节80H.操作码.82000H操作码.33000H+800082000CS2000I
40、P330002000+DI1000BP3000SS本节小结:1)寻址中的操作数(二、十、十六进制)的形式。2)源操作数与目的操作数的位数必须一致。3)立即数与地址的区别。4)操作数物理地址的计算,如有BP寄存时应在SS段内取数。5)变址寻址和相对寻址时,偏移量的计算方法。6)直接寻址和间接寻址、相对寻址之间的差别。7)各种指令的书写格式和要求。1、“8086执行了一个总线周期执行了一个总线周期”是指是指8086做了哪些可能的操作?基本总线做了哪些可能的操作?基本总线周期如何组成?在一个典型的读存储器总线周期中,地址信号、周期如何组成?在一个典型的读存储器总线周期中,地址信号、ALE信号、信号、
41、RD信号、数据信号分别在何时产生?信号、数据信号分别在何时产生?(画出时序波形图并给予解释画出时序波形图并给予解释)3、请写出下列指令单独执行后,有关寄存器及存储单元的内容。、请写出下列指令单独执行后,有关寄存器及存储单元的内容。假设指令执行前假设指令执行前(DS)=(ES)=3000H, (AX)=2000H, (BX)=1200H, (SI)=2, (31200H)=2400H, (31202H)=90F7H(1)ADDES:BX,900H(2)MOVAX, BX+SI4、给定一个存放数据的内存单元的偏移地址是、给定一个存放数据的内存单元的偏移地址是20C0H,(,(DS)=C00EH,求
42、出该内存单元的物理地址。求出该内存单元的物理地址。5、8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序?程序?6、指出下列指令的错误、指出下列指令的错误:(1) MOV AH,BX (2) MOV SI,BX (3) MOV AX,SIDI(4) MOV AX,BXBP (5) MOV BX,ES:AX (6) MOV CS,AX (7) MOV DS,2000H3.2 指令系统指令系统8086/8088的指令系统大致可分为7种类型:1、数据传送指令2、算数运算指令3、逻辑运算和移位指令4、串操作指令5、程序控制指
43、令6、处理器控制指令7、输入/输出指令 数据传送指令是最简单、最常用的一类指令,它是负责把数据、地址、或立即数传送到寄存器或存储单元中 。 1 1MOVMOV指令指令 MOVMOV指令的格式为:指令的格式为: MOV DSTMOV DST, SRCSRC功能:将源操作数src的内容复制到目的操作数dest中,结果目的操作数的内容等于源操作数的内容,源操作数src的内容不变。 对标志位的影响对标志位的影响:无语法格式:MOV reg/mem/seg MOV reg/mem/seg ,reg/mem/seg/immreg/mem/seg/immReg:寄存器,mem:存储器,seg:段寄存器,im
44、m立即数 3.2.13.2.1数据传送指令数据传送指令数据传送是计算机中最基本、最重要的一种操作数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位除标志寄存器传送指令外,均不影响标志位图3-12 MOV指令的数据传送方向 段寄存器CS,DS,SS,ES通用寄存器AX,BX,CX,DX,BP,SP,SI,DIAH,AL,BH,BL,CH,CL,DH,DL立即数存贮器通用寄存器说明:(1)双操作数指令不允许两个操作数同时为段寄存器
45、或存储器操作数。 MOV seg ,seg ;错误 MOV mem ,mem ;错误 (2)立即数不能传送到段寄存器中。 MOV seg ,imm ; 错误(3)目的操作数不允许使用CS段寄存器。(4)destdest与与srcsrc必须类型匹配,即同时是字节或字类必须类型匹配,即同时是字节或字类型。型。以下几点要注意:寄存器具有明确的类型,例如,AL、AX分别为字节、字类型。各种数据传送指令例举如下:在CPU各内部寄存器之间传送数据。 MOV AL,BL;8位数据传送指令(1个字节) AL BL MOV AX,DX;16位数据传送指令(1个字) AX DX 立即数传送至CPU的通用寄存器(即
46、AX、BX、CX、DX、BP、SP、SI、DI)。 MOV CL,4 ;8位数据传送(1个字节) CL=04 MOV AX,03FFH;16位数据传送(1个字) AX 03FFH注意注意:立即数如为立即数如为10进制形式,则进制形式,则8086自动转换为自动转换为16进制进制 CPU内部寄存器(除了CS和IP以外)与存贮器存贮器(所有寻址方式)之间的数据传送,可以传送一个字节也可以传送一个字。( )或 为其内容的地址在CPU通用寄存器与存贮器存贮器之间传送数据: MOV DI,CX CPU寄存器与存贮器之间传送数据: MOV AX,D1SIBX MOV BPD1,AX ;D1都为数值 使用中需
47、要注意的是:使用中需要注意的是: MOV指令不能在两个存贮器单元之间进行数据直接传送。如:如:MOV MOV (2000H2000H),(),(3000H3000H)或)或 MOV MOV (AXAX),(),(BXBX) MOV指令不能在两个段寄存器之间进行数据直接传送。如:如:MOV DSMOV DS,SSSS 立即数不能直接传送给段寄存器。如:如:MOV DSMOV DS,2000H2000H 目的操作数不能为CS、IP。如:如:MOV CSMOV CS,AX AX , MOV IPMOV IP,AX AX (会改变指令执行的顺序)(会改变指令执行的顺序) MOV指令不影响标志位MOVM
48、OV指令的实质是:把指令的实质是:把SRCSRC的内容复制到的内容复制到DSTDST中,执行操作后中,执行操作后 SRCSRC的内容不变!的内容不变! 其中,的传送可用通用寄存器作为中介,用两条传送指令完成。 例如,为了将在同一个段内的偏移地址为AREA1的数据传送到偏移地址为AREA2单元中去,可执行以下两条传送指令: MOV AL,AREA1 MOV AREA2,AL 例如,为了将立即数传送给DS,可执行以下两条传送指令: MOV AX,1000H MOV DS,AX在这两个实例中,在这两个实例中, AREA1AREA1和和 AREA2AREA2在段定义时已经给了明确的在段定义时已经给了明
49、确的定义!定义!例:错误的MOV 指令如下所示:MOV AX,BL ;类型不匹配(数据长度不一致)MOV DS,1000H ;不允许立即数送段寄存器MOV BX ,SI ;不允许内存操作数之间传送MOV ES,CS ;不允许段寄存器之间传送MOV CS,AX ;CS不能作为目的操作数 例如,将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中,若AREA1和AREA2都在当前数据段中,可以用带有循环控制的数据传送程序来实现。程序如下: MOV SI,OFFSETAREA1;(OFFSET是取地址 MOV DI,OFFSETAREA2; 偏移量,必须加上) MOV CX,1
50、00 AGAIN:MOV AL,SI;RD为低 MOV DI,AL ;WR为低 INC SI INC DI DEC CX JNZ AGAIN XXYYXXYYAREA2AREA1非法指令非法指令无法确定是字节还是字操作无法确定是字节还是字操作当无法通过任一个操作数确定是操作类型时,需要利用当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明汇编语言的操作符显式指明MOV BX+SI, 255MOV BX+SI, 255;非法指令非法指令,修正,修正:MOV BYTE PTR BX+SI,255MOV BYTE PTR BX+SI,255;BYTE PTRBYTE PTR说明
51、是字节操作MOV WORD PTR BX+SI,255MOV WORD PTR BX+SI,255;WORD PTRWORD PTR说明是字操作 2 2交换指令交换指令 XCHG指令的格式为:XCHG DST , SRC 执行的操作:交换DST与SRC的内容 DST SRC 语法格式为: XCHG reg/mem,reg/mem 交换指令把一个字节或一个字的源操作数与目的操作数相交换。这种交换只能在交换只能在通用寄存器之间、通用寄通用寄存器之间、通用寄存器与存贮器之间进行存器与存贮器之间进行,存储器与存储器之间不能交换存储器与存储器之间不能交换段寄存器不能作为一个操作数。段寄存器不能作为一个操
52、作数。 XCHG指令不影响标志位。例:XCHG BX ,BP+SI如指令执行前:(BX)=6F30H,(BP)=0200H,2F246H=54H 2F247H=51H ,(SI)=0046H,(SS)=2F00H,(2F00H)=4254H,OPR2的物理地址=2F0016+0200+0046=2F246H则指令执行后:(BX)=5154H,(2F246H)=6F30H。例如: XCHG AL,CL ;(8位交换) XCHG AX,DI ;(16位交换) XCHG BX,SI ;(16位交换) XCHG AX,BUFFER;寄存器与存贮器(定义为)之间交换 XCHG BX,DATASI ;相对
53、寻址的交换 3 3地址传送指令地址传送指令将操作数所在存储器的地址送入目标寄存器。 8086/8088有3条地址传送指令。 (1)LEA指令 (有效地址送寄存器)指令格式: LEA reg16 ,存储器寻址方式存储器寻址方式 指令功能:如果源操作数为地址标号,则将该地址标号的地址偏移量传送到目的操作数reg16 中。如果源操作数为一种存储器寻址方式,则将该寻址方式决定的内存操作数的地址偏移量送到目的操作数reg16 中,而不是将内存中的内容送到目的操作数reg16 中。注意:不是存储器的内容,是地址!是地址! 不影响标志位存储器存储器MEMREG 16位AX、BX、LEA指令(有效地址送寄存器
54、)操作示意图例: LEA BX,BX+SI+0F62H如指令执行前:(BX)=0400H,(SI)=003CH则指令执行后:(BX)=0400H+003CH+ 0F62H =139EH139EH139EH是偏移地址!不是是偏移地址!不是DS:139EHDS:139EH中的内容中的内容! !注意与注意与MOVMOV指令的区别指令的区别LEA LEA 指令与指令与MOV MOV 指令的区别:指令的区别:LEA SILEA SI,BUFFBUFF;将标号;将标号BUFFBUFF的的偏移地址偏移地址送入寄存器中送入寄存器中MOV SIMOV SI,BUFFBUFF;将标号;将标号BUFFBUFF所所指
55、存储单元指存储单元的内容送入的内容送入SISILEA SI,BUFF;执行后:(执行后:(SI)=0002HMOV SI,BUFF;执行后:(执行后:(SI)=0048HBUFF =0000000100020003000400054800FEFF段地址:段地址:例:如指令执行前(SI)=3000H,(BX)=0400H,MEEM=12000H,DS=1000H,执行LEA BX,MEEM指令后BX的内容为(BX)=12000H10000H=2000H,BX的内容为地址标号MEEM的偏移地址,而执行LEA BX,(SI)指令后BX的内容为(BX)=3000H,不是将由BX与段地址决定的物理地址D
56、S:(SI)的内容送到BX中,在使用中一定要注意地址传送指在使用中一定要注意地址传送指令中的存储器寻址方式与其它数据传送指令的区别。令中的存储器寻址方式与其它数据传送指令的区别。 存储器MEEM= DS:2000HREG 16位AX、BX、DX、CX SI、DI、BP、SSBXSILEA BX,MEEMLEA BX,(SI)指令格式:LDS reg16 ,存储器寻址方式 语法格式:LDS reg16 ,reg16/mem/lable ;指令功能:从从srcsrc指定的存储单元开始,指定的存储单元开始,由由4 4个连续存储个连续存储单元中取出前单元中取出前2 2字节送到字节送到regreg,取出
57、后取出后2 2字节送到字节送到DSDS中中 。例:LDS AX,20(SI)或 LDS AX,(SI +20 ) 假设执行前为(20050H)=1234H,(20052H)=5678H,AX=0000H,DS=2000H,SI=0030H,则物理地址=2000H16+20+0030H=20050H。执行的结果为:AX=1234H(偏移地址!),DS=5678H (地址中的数据)(注意取数据的顺序!)(2) LDS(2) LDS指令指令 (指针送寄存器和(指针送寄存器和DSDS)例:已知指令执行前(22000H22005H)=12H、34H,56H、78H,9AH、BCH,AX=0000H,DS
58、=2000H,BX=2000H,MEEM=22002H,执行指令LDS AX,MEEM和执行指令LDS AX,(BX)的过程如图所示执行执行LDSLDS指令是要注意取数据的顺序,前两个字节的内容送指定指令是要注意取数据的顺序,前两个字节的内容送指定1616位寄存器,后两个字节的内容送数据段寄存器位寄存器,后两个字节的内容送数据段寄存器DSDS中中。指令格式:指令格式:LES reg16 ,存储器寻址方式,存储器寻址方式 语法格式:语法格式: LES reg16 ,reg16/mem/lable ;指令功能:指令功能:从从srcsrc指定的存储单元开始,指定的存储单元开始,由由4 4个连续存储个
59、连续存储单元中取出前单元中取出前2 2字节送到字节送到regreg,取出后取出后2 2字节送到字节送到ESES中中。例:LES AX,20(SI)或 LES AX,(SI +20 ) 假设执行前为(20050H)=1234H,(20052H)=5678H,AX=0000H,DS=2000H,SI=0030H,则物理地址=20020+0030H=20050H。执行的结果为: AX=1234H,ES=5678H(3) LES(3) LES指令指令 (指针送寄存器和(指针送寄存器和ESES)34SRCES=5678HSRC=AX、BX、SI127856AL=34HAH=12H图3-13 LES指令操
60、作示意注意:注意:LDSLDS或或LESLES指令的区别:指令的区别:LDS:低:低16位送到一个指定的字寄存器,高位送到一个指定的字寄存器,高16位送到位送到DS中。中。LES:低:低1616位送到一个指定的字寄存器,高位送到一个指定的字寄存器,高1616位送到位送到ESES中。中。例:(例:(DS)=C000H,(,(C2480H)=1357H,(,(C2482H)=2468H57H13H68H24HDS:2480HDS:2481HDS:2482HDS:2483H 13 57 24 68 SIDS ESLDS SI,2480LES SI,2480注意:LDS和 LES指令的区别为LDS指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度公务员(省考)考前冲刺练习题【有一套】附答案详解
- 2024-2025学年度反射疗法师3级能力检测试卷及答案详解【夺冠】
- 心肌病患者的护理理念
- 血小板减少的泌尿系统护理
- 2024-2025学年度燃气职业技能鉴定题库试题【重点】附答案详解
- 2024-2025学年度中医助理医师检测卷及完整答案详解(有一套)
- 2024-2025学年冶金工业技能鉴定过关检测试卷(达标题)附答案详解
- 2024-2025学年度江门职业技术学院电视播音主持期末考试通关题库【巩固】附答案详解
- 2024-2025学年度临床执业医师检测卷(研优卷)附答案详解
- 2024-2025学年度辅警招聘考试测试卷附答案详解【完整版】
- 2026年滁州城市职业学院单招综合素质考试题库与答案详解
- 2026广东惠州市疾病预防控制中心(惠州市卫生监督所)招聘卫生专业技术人员7人笔试模拟试题及答案解析
- 2026年南京铁道职业技术学院单招职业适应性考试题库及答案详解(各地真题)
- 2026年黑龙江农业职业技术学院单招职业技能考试题库附答案解析
- 2025-2026学年浙教版(新教材)小学劳动技术五年级下册教学计划及进度表
- 2026年南京机电职业技术学院单招职业技能考试题库附参考答案详解(考试直接用)
- 腹腔引流护理实践指南(2025年版)
- 2026年中考百日冲刺誓师大会校长动员讲话:锁定目标高效冲刺决胜2026中考
- 2026年春新教材统编版八年级下册道德与法治第二课2.2 尊崇宪法 教案
- 新能源汽车驱动电机与控制技术(第2版)课件:新能源汽车认知
- 企业绩效管理与绩效考核指南(标准版)
评论
0/150
提交评论