CPU及汇编第二章寻址方式_第1页
CPU及汇编第二章寻址方式_第2页
CPU及汇编第二章寻址方式_第3页
CPU及汇编第二章寻址方式_第4页
CPU及汇编第二章寻址方式_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章第二章 Intel 8086/8088 CPUIntel 8086/8088 CPU的寻址方式和指令系统的寻址方式和指令系统2.1 计算机组织结构运算器控制器存储器输入设备输出设备计算机系统计算机系统硬件:硬件:中央处理机中央处理机 CPU总线控制 逻辑接 口接 口存储器存储器大容量存储器I/O设备I/O子系统子系统系统总线系统总线.软件:软件:系统软件 用户软件MainmemoryI/O bridgeBus interfaceALURegister fileCPUSystem busMemory busDisk controllerGraphicsadapterUSBcontrolle

2、rMouse KeyboardDisplayDiskI/O busExpansion slots forother devices suchas network adaptersPChardwareMainmemoryI/O bridgeBus interfaceALURegister fileCPUSystem busMemory busDisk controllerGraphicsadapterUSBcontrollerMouse KeyboardDisplayDiskI/O busExpansion slots forother devices suchas network adapte

3、rshello executable stored on diskPChello codehello.c汇编汇编语言语言MainmemoryI/O bridgeBus interfaceALURegister fileCPUSystem busMemory busDisk controllerGraphicsadapterUSBcontrollerMouse KeyboardDisplayDiskI/O busExpansion slots forother devices suchas network adaptershello executable stored on diskPChell

4、o codehello,worldnhello,worldn微型计算机的工作过程 微型计算机的工作过程就是执行程序的过程,而程序由指令序列组成,因此,执行程序的过程,就是执行指令序列的过程,即逐条地从存储器中取出指令并完成指令所指定的操作。 由于执行每一条指令,都包括取指、译码和执行三个基本步骤,所以,微型计算机的工作过程,也就是不断地取指令、译码和执行的过程,直到遇到停机指令时才结束机器的运行。取指令,P C值加1停机?译码并执行结束YN优点:处理器简单通用,把复杂问题转移到存放解释程序存储器中,即把复杂的硬件设计转化为复杂的软件设计。8086微处理器 8086/8088 CPU内部的寄存器

5、组内部的寄存器组寄存器是CPU内部存放操作数的地方,它的操作速度比内存操作数速度快。8086共有14个寄存器,它们都是16位的,可以存放16位二进制数。通用寄存器:4个数据寄存器:AX、BX、CX和DX 每个寄存器又可分为2个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL2个变址寄存器:DI和SI2个指针寄存器:SP和BP段寄存器4个段寄存器:ES、CS、SS和DS控制寄存器1个标志寄存器:FLAG( CF、AF、PF、ZF、OF、SF、IF、DF、TF)1个指令指针寄存器:IP通用寄存器的作用 (1) 数据寄存器数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读

6、取操作数所需占用总线和访问存储器的时间。 4个16位寄存器: AX:Accumulator,累加器累加器 BX:Base Register, 基址寄存器基址寄存器 CX:Count Register,计数寄存器计数寄存器 DX:Data Register,数据寄存器数据寄存器 上述4个寄存器可分为8个8位寄存器,分别为AH和AL、BH和BL、CH和CL、DH和DL。 每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器“能分可合”的特性,灵活地处理双字、字和字节等信息。 在32位处理器中,有4个32位寄存器:EAX、EBX、ECX和EDX。通用寄存器 AX(accumulator):作

7、为累加器,是算术运算的主要寄存器。所有I/O指令都使用它和外部设备传送信息。 BX(base):除了作为一般的数据寄存器使用外,经常用做基址寄存器。 CX(count):除了作为一般的数据寄存器使用外,常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。 DX(data):除了作为一般的数据寄存器使用外,可以在处理双字长运算时把DX和AX组合使用,DX存放高位字。通用寄存器 SP(stack pointer):除了作为一般的数据寄存器使用外,用来指示栈顶的偏移地址; BP(base pointer):除了作为一般的数据寄存器使用外,可以和堆栈段寄存器SS联合使用来指示堆栈段

8、中的存储单元地址; SI(source index)和DI(destination index):除了作为一般的数据寄存器使用外,可以和数据段寄存器DS联合使用来确定数据段中存储单元的地址 注意:这四个寄存器只能以16位为单位一起使用标志寄存器(程序状态字寄存器 PSW) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0状态标志: 控制标志:OF 溢出标志 DF 方向标志 SF 符号标志 IF 中断标志ZF 零标志 TF 陷阱标志CF 进位标志AF 辅助进位标志PF 奇偶标志OF DF IF TF SF ZF AF PF CF例:例: MOV AX, 1 MOV BX

9、, 2 ADD AX, BX 指令执行后,(AX)=3, OF=0, CF=0, ZF=0, SF=0例:例: MOV AX, FFFFH MOV BX, 1 ADD AX, BX 指令执行后,(AX)=0, OF=0, CF=1, ZF=1, SF=0Debug下的内存和寄存器下的内存和寄存器(1)PSPPSPDSDSESESSSSSCSCSEXE 程序的内存映象图装入模块文件头Debug下的内存和寄存器下的内存和寄存器(2) 一个16位寄存器可以存储一个16位的数据。(数据的存放情况) 一个16位寄存器所能存储的数据的最大值为多少? 答案:216-1。通用寄存器16位数据在寄存器中的存放情

10、况 数据:18 二进制表示:10010 在寄存器AX中的存储:16位数据在寄存器中的存放情况 数据:20000 二进制表示:0100111000100000 在寄存器AX中的存储:通用寄存器 以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况:通用寄存器通用寄存器的作用 (2)变址寄存器)变址寄存器(Index Register) SI:Source Index Register,源变址寄存器,源变址寄存器 DI:Destination Index Register,目标变址寄存器,目标变址寄存器 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,且

11、具有特殊的功能。(3) 指针寄存器指针寄存器(Pointer Register) 它们主要用于访问堆栈内的存储单元,并且规定: BP:基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据 SP:堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶通用寄存器的作用寄寄 存存 器器用用 途途AX乘法指令作累加器,I/O指令作数据寄存器由累加器做立即数运算,比其他指令少占字节ALBCD码,ASCII码运算的累加器,查表指令XLAT的累加器字节乘法,字节除法,字节I/O,十进制算术运算AH作为取指令标志LAHF的目的寄存器,字节乘法,字节除法BX间接寻址作基址寄存器,XLAT

12、指令中作基址寄存器CX串操作或循环控制中的计数器,指令执行后内容会自动变化CL移位,循环计数,指令执行后内容不变DX字乘法,字除法,I/O指令中作端口间接寻址SI存储器指针(串操作中的源指针)DI存储器指针(串操作中的目的指针)BP存储器指针(存取堆栈的指针)SP堆栈指针通用寄存器的隐含使用及特殊用途通用寄存器的隐含使用及特殊用途 几条汇编指令汇编指令不区分大小写几条汇编指令 CPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。几条汇编指令寄存器与存储器的比较:寄存器与存储器的比较: 寄 存 器 存 储 器 在CPU内部 在CPU外部访问速度快 访问速度慢容量小,成本高 容量大,

13、成本低用名字表示 用地址表示RegistersOn-chip L1cache (SRAM)Main memory(DRAM)Local secondary storage(local disks)Larger, slower, and cheaper (per byte)storagedevicesRemote secondary storage(distributed file systems, Web servers)Local disks hold files retrieved from disks on remote network servers.Main memory holds

14、 disk blocks retrieved from local disks.Off-chip L2cache (SRAM)L1 cache holds cache lines retrieved from the L2 cache.CPU registers hold words retrieved from cache memory.L2 cache holds cache lines retrieved from memory.L0:L1:L2:L3:L4:L5:Smaller,faster,and costlier(per byte)storage devices8086在取指令和寻

15、找内存操作数的地址时,采用了分段寻找的方式,在同一时刻可将内存分成4个段:代码段、数据段、堆栈段和特别数据段,段与段之间允许有重叠。4个段寄存器是: CS (Code Segment Register,代码分段寄存器) DS (Data Segment Register,数据分段寄存器) SS (Stack Segment Register,堆栈分段寄存器) ES (Extra Segment Register,特别分段寄存器)。 这4个寄存器都只能够作为16位寄存器使用。 8086内部有20根地址线,它可以直接访问的物理空间为1M字节,其编码区间为:00000H0FFFFFH。而CPU内部存

16、放存储单元偏移量的寄存器(如IP、SP、BP、SI、DI和BX等)都是16位,它们的编码范围仅为:00000H0FFFFH。 如何用16位寄存器有效地访问1MB的存储空间,8086采用了内存分段的管理模式,并引入存储器分段的概念。段寄存器的作用8086内存分段管理模式(1)存储器的分段)存储器的分段 计算机的内存单元是以“字节”为最小单位进行线性编址的。为了标识每个存储单元,就给每个存储单元规定一个编号,此编号就是该存储单元的物理地址。 16位微机把内存空间划分成若干个逻辑段,每个逻辑段的要求如下: 逻辑段的起始地址(通常简称为:段地址)必须是16的倍数,即最低4位二进制必须全为0; 逻辑段的

17、最大容量为64K,这由16位寄存器的寻址空间所决定。 按上述规定,1M内存最多可分成64K个段,即65536个段(段之间相互重叠),至少可分成16个相互不重叠的段。(2)物理地址的形成方式)物理地址的形成方式 存储单元的逻辑地址分为两部分:段地址和偏移量。由逻辑地址得到其物理地址(PAPhysical Address)的计算方法如下:物理地址物理地址PA段地址段地址16 + 偏移量偏移量 逻辑地址到物理地址的生成加法器 逻辑 地址191500 偏移地址 段 地 址 0 0 0 0 20 - bit 物理存储器地址 150物理地址:每个存储单元唯一的 20 位地址 段地址:段起始地址的高 16

18、位 偏移地址:段内相对于段起始地址的偏移值(16 位) (有效地址 EA)8086内存分段管理模式(3)段寄存器的引用)段寄存器的引用 段寄存器是因为对内存的分段管理而设置的。一般情况下,段寄存器及其指针寄存器的引用关系方面有如下规定:取指令所用的段寄存器和偏移量一定是用CS和IP;堆栈操作所用的段寄存器和偏移量一定是SS和SP;串操作的目标操作数所用的段寄存器和偏移量一定是ES和DI;其它情况,段寄存器除其默认段寄存器外,还可以强行改变为其它段寄存器。访问存储器方式缺省的段寄存器可选用的段寄存器偏 移 量取指令CSIP堆栈操作SSSP一般取操作数DSCS、ES、SS有效地址串操作源操作数DS

19、SI目标操作数ESDI使用指针寄存器BPSSCS、DS、ES有效地址CS和IP CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。 CS为代码段寄存器; IP为指令指针寄存器。8086PC工作过程的简要描述 (1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器; (2)IP = IP + 所读取指令的长度,从而指向下一条指令; (3)执行指令。 转到步骤 (1),重复这个过程。8086PC工作过程的简要描述 在 8086CPU 加电启动或复位后( 即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时

20、,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。CS和IP 内存中指令和数据都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。 CPU根据什么将内存中的信息看作指令? CPU将CS:IP指向的内存单元中的内容看作指令。CS和IP 在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。 如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。修改CS、IP的指令 在CPU中,程序员能够用指令读写的部件只有寄存器,程

21、序员可以通过改变寄存器中的内容实现对CPU的控制。 CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。 我们如何改变CS、IP的值呢?修改CS、IP的指令 8086CPU必须提供相应的指令 mov指令不能用于设置CS、IP的值, 8086CPU没有提供这样的功能。 8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令修改CS、IP的指令 同时修改CS、IP的内容:jmp 段地址:偏移地址jmp 2AE3:3jmp 3:0B16功能:用指令中给出的段地址修改CS,偏移地址修改IP。修改CS、IP的指令 仅修改IP的内容:

22、jmp 某一合法寄存器jmp ax (类似于 mov IP,ax)jmp bx功能:用寄存器中的值修改IP。(4) 存储单元的内容存储单元的内容 存储单元中所存放的二进制信息称为该存储单元的内容或值,并且规定:一个字节的内容是该字节单元内存放的二进制信息;一个字的内容是该字地址所指向的单元及其后继一个单元的内容拼接而成;一个双字的内容是该字地址所指向的单元及其后三个单元的内容拼接而成。 在拼接“字内容”时,我们按“高高低低”的原则来处理,即:高存储单元(地址大的存储单元)的值是“字内容”的高8位,低存储单元(地址小的存储单元)的值是“字内容”的低8位。 在拼接“双字内容”时也是如此。8086内

23、存分段管理模式3. 存储器存储器存储单元的存储单元的地址地址和和内容内容: 存储器以字节(8 bit)为单位存储信息 每个字节单元有一个地址,从 0 编号,顺序加 1 地址用二进制数表示(无符号整数,写成十六进制) 一个字要占用相继的两个字节 低位字节存入低地址,高位字节存入高地址 机器以偶地址访问(读 / 写)存储器 字单元地址用它的低地址来表示 1 0 0 1 1 1 1 1 1000H ( 1000H ) = 9F H0 0 1 0 0 1 1 0 1001H 0 0 0 1 1 1 1 0 1002H ( 1002H ) = 1E H1 1 0 1 0 1 1 1 1003H ( 10

24、00H ) = 269F H ( 1002H ) = D71E H ( 1001H ) = 1E26 H 访问两次存储器( 1001H ) = 26 H( 1003H ) = D7 H存储器存储器的分段:存储器的分段:20 根地址线: 地址范围 00000H FFFFFH机器字长16位:仅能表示地址范围 0000H FFFFH小段:每16个字节为一小段,共有64K个小段 小段的首地址小段的首地址 00000 H 0000F H 00010 H 0001F H 00020 H 0002F H FFFF0 H FFFFF H 段起始地址:小段首地址段的大小: 64K 范围内的任意字节存储器的逻辑逻

25、辑分段: 存储器存储器64K代码01500H42000H1CD00H0150H4200H1CD0H段寄存器段寄存器CSDSSSES64K堆栈64K数据 64K附加数据B0000HB000H 存储器存储器 8K代码 2K数据 256堆栈02000H04800H04000H0200H0400H0480HCSDSSS例:(DS) = 0400H, EA = 1234H, 物理地址 = 16d (DS) + EA = 05234HCPU可以用不同的段地址和偏移地址形成同一个可以用不同的段地址和偏移地址形成同一个物理地址物理地址:物理地址物理地址 段地址段地址 偏移地址偏移地址05234H 0400H

26、1234H 0523H 0004H 0520H 0034H 8086/8088有两个独立的存储空间和I/O地址空间,地址空间为1MB,I/O地址空间为64KB。 数据按字节、字或双字存放,存放方式可按对正的双字边界或非对正的双字为边界。 逻辑地址(logical address) 物理地址(physical address)。 物理地址=段地址*16+偏移地址地址00001H00008H00007H00006H00005H00004H00003H00002HByte 8Byte 7Byte 6Byte 5Byte 4Byte 3Byte 2Byte 1Word 6Word 4Word 2Wor

27、d 0Byte 000000HWord 5Word 1物理存储器 双字对齐字对齐 Double word 0Double word 4图3.2 对正的数据字和双字Byte 8 图(a)中数据5AF0H存放在对正的双字地址02000H,其中0F0H存放在低字节地址02000H,5AH存放在高字节地址02001H。 图(b)中数据2C96H,对正的双字地址边界是0200CH。 地址 存储器(二进制) 存储器(十六进制) 地址020011602000160101 10101111 0000 存储器(二进制)0010 11001001 0110 0200E160200D16 5A F0 (b) (a)

28、 物理存储器 图3.4非对正的字或双字为边界的例子地址00001H00008H00007H00006H00005H00004H00003H00002HByte8Byte7Byte6Byte5Byte4Byte3Byte2Byte1Word 7Word 3Byte000000H字未对齐Double word 1Double word 2Double word 5 Double word 3双字未对齐 (a)非对正的双字边界的双字存储(b)对正的双字存储 A01100 1101 AB 地址存储器(二进制)存储器(十六进制) 地址021051602104160000 00010010 0011存储器

29、(十六进制)000210F160210E16 01 23 (b) (a)02103160210216021011602100161010 1011 CD 55 FF0210D160210C160210B160210A16 (a)其中0123H存放在02104H处,此地址是对正的双字边界地址,而ABCD存放的起始地址是02102H,而该字的对正的双字边界应为02100H。完整的双字是0123ABCDH。 逻辑地址与物理地址之间的关系: 段基址为002B0H, 偏移地址为0013H, 物理地址为002C3H。 段基址为002C0H,偏移地址为0003H, 物理地址为002C3H。 逻辑地址 2C4

30、H2C3H2C2H2C1H2C0H2BFH2BEH2BDH2BCH2BBH2BAH2B9H2B8H2B7H2B6H2B5H2B4H2B3H2B2H2B1H2B0H段基址 偏移(3H) 偏移(13H)段基址物理地址图表示堆栈结构 堆栈是一个特殊的随机存储区,用于临时存放一些信息如数据或地址。 对于实模式,堆栈区为64KB,按32K个字组织 . . . 堆栈段 . 存储器 (字宽) 0000HSPSS FFFEH堆栈底部 堆栈顶部 图PUSH AX指令执行前的堆栈状态堆栈 00 11 22 33 44 55 66 77 88 99AA BB 01 23 45 67 89 AB CD EF 01 0

31、5 00 08 1062 1060105E 105C 105A 1058 1056 1054 10521050SSSPTOS 堆栈底部 PUSH AX指令执行后、 POP AX和和POP BX执行后 堆栈状况 12 34 00 11 22 33 44 55 66 77 88 99 AA BB 34 12 45 67 89 AB CD EF 0 1 05 00 06 1062 1060105E 105C 105A 1058 1056 1054 10521050SSSPPUSH AXAXTOS 00 11 22 33 44 55 66 77 88 99 AA BB 34 12 45 67 89 A

32、B CD EF 01 05 00 08 1062 1060105E 105C 105A 1058 1056 1054 10521050 12 34SSSPPOP AXTOP控制寄存器的作用(1)指令指针寄存器(Instruction Pointer) 指令指针IP是16位的寄存器,存放着下次将要执行的指令在代码段的偏移量。 在80386及其高档处理器处于保护模式时,其指令指针寄存器是32位的EIP。(2)标志寄存器(Flags Register) FLAG寄存器的各位用来存放各种不同的标志。算术运算指令和逻辑运算指令的运行结果都将定性地反映在不同的标志位上,以便后续的条件判断指令根据这些标志实

33、现判断转移,判断转移的实质是修改CS和IP。这也正是计算机能够实现判断转移的底层原理。 6个状态标志:OF、SF、ZF、AF、PF、CF3个控制标志:IF、DF、TF;7位保留;标志寄存器 CF:进位标志,在进行字/字节运算产生进位或借位时置1,否则置0。 PF:奇偶性标志,结果有偶数位为1时置1,否则置0。 AF:辅助进位标志,当进行字节运算有低4位向高4位进位或借位时置1,否则置0。 在作BCD码运算时常常使用。 ZF:零标志,当运算结果为0时置1,否则置0。 SF:符号标志,运算结果为负,即结果最高位为1时置1,否则置0。 TF:陷阱标志,若IF=1,则在执行指令时产生单步中断。 IF:

34、中断标志,若IF=1开中断,响应可屏蔽中断;IF=0,关中断。 DF:方向标志,DF置1引起串操作指令的变址寄存器自动减值,DF置0引起串 操作指令的变址寄存器自动增值。 OF:溢出标志,运算溢出时自动置1,当它为1时可用溢出中断指令产生中断。机器语言(machine language) CPU执行的程序都是用机器语言写成的。机器代码是二进制代码,一条机器语言指令长度,可以是1个字节或多个字节。微处理器只能理解机器语言,但直接用机器语言写程序几乎是不可能的。因此程序常采用其它语言来编写。汇编语言(Assembler)2.2寻址方式程序(program) 源代码 (source code) 目标

35、代码 (object code)编译(assember)连接(link)指令 (instruction)指令系统(指令集) 操作码 (opcode)操作数(operand) 目标操作数(destination operand) 源操作数 (source operand) 指令格式 操作码字段 操作数地址字段 地址结构 二地址 单地址 隐含地址 基本指令长度 1-6字节。 寻址方式 形式地址 有效地址 EA 物理地址 PA利用汇编语言编写程序具有以下优点: (1)用汇编语言编写的程序,程序的代码短,程序占 用的内存少,程序运行速度要比用高级语言写的程序快; (2)汇编语言给予程序设计者更强的能力

36、,实现高技术任务,而这些任务若用高级语言是难以实现或根本不能实现; (3)汇编语言的知识,有助于理解微处理器的结构,这是高级语言所没有的; (4)驻留程序和中断服务程序总是用汇编语言开发 汇编语言语句的一般格式是: 标号:指令 ;注释例:START:MOV AX,BX ;COPY BX INTO AX START是该指令的地址标识,叫做标号(Label)。 在指令后面由分号(;)标识的是注释。 0013 8A 24 NEXT:MOV AH, SI ;MOVE A BYTE 其中8A 24是指令MOV AH,SI的机器码,这是一条双字节指令,该指令的存储器地址是0013H和0014H。 汇编指令

37、的书写形式汇编指令的书写形式 一条汇编指令通常可以写成如下形式: 标号标号: 操作码操作码 目标操作数目标操作数 , 源操作数源操作数 ;注释注释 (1)其中 中的内容为可选项。 (2)标号必须是用字母打头的字母或数字组成的字符串,标号供转移指令作为转移的目标。 (3)指令末尾的分号表示由 ;起直至ENTER前均为注释部分,在输入源程序时,每一条汇编指令的末尾必须输入换行键ENTER表示本指令的结束,下一指令的开始。汇编指令的书写形式操作码操作码 目标操作数目标操作数, 源操作数源操作数 一条能汇编成机器代码指令的汇编指令必须有唯一的操作码。操作码是汇编指令的关键字,它指出该指令要做什么。一条

38、汇编指令中的源操作数用来指出指令处理的对象来自何处。一条汇编指令中的目标操作数用来指出指令的处理结果置于何处。在许多指令中目标操作数既表示处理的对象之一来自何处,又指出处理的结果置于何处。目标操作数总是紧接着操作码出现在源操作数的左边,因此有也称目标操作数为左源左源。汇编指令的书写形式操作码操作码 目标操作数目标操作数, 源操作数源操作数 指令行中可以没有源操作数和目标操作数。在这种情况下通常是对某一固定的或称作隐含操作数的操作。指令行中可以没有源操作数而仅含目标操作数。这时目标操作数既指出处理对象来自何处,又指出处理结果置于何处。这种指令被称为单操作数指令。指令行中既有源操作数又有目标操作数

39、的指令称为双操作数指令。双操作数指令中目标操作数一定出现在源操作数的左边。 寻址方式寻址方式就是寻找指令中的操作数的方式,寻址主要是指寻找内存数据的地址。几个概念 寻址方式:根据指令中给出的地址寻找真实操作数地址的方式 形式地址:指令中的地址码字段给出的地址 有效地址:能够直接访问的存储器地址 物理地址:存储器地址汇编指令的书写形式举例:举例: LOOP1:AAA ; 此处可添加注释 MOV AX, 053H;此处可添加注释 INC DH ;此处可添加注释第一条指令:带标号LOOP1,AAA是操作码,这一指令隐含使用固定操作数AL;第二条指令: MOV是操作码,双操作数指令, AX是目标操作数

40、,053H是源操作数第三条指令: INC是操作码单操作数指令 在DOS下运行汇编程序,注释部分只能用英文和ASCII码符号书写,在中文操作系统下则可用中文书写,是指换行键。操作码通常是指指令功能的助记符,它给出了指令功能便于记忆的形式,例如,MOV是Movement的缩写等。三种类型的操作数(1)立即数)立即数(2)寄存器)寄存器(3)内存)内存单操作数指令的操作数只能是寄存器操作数或内存操作数。双操作数指令的目标操作数只能是寄存器操作数或内存操作数,而源操作数可以是三者之一,但是两操作数不能同时为内存操作数。 (1)立即数操作数 立即数操作数作为代码指令的一部分出现在双操作数指令中。除了乘法

41、、除法和字符串操作指令之外,立即数操作数均可作为源操作数。立即数操作数在汇编指令中可以以十六进、八进制、二进制十六进、八进制、二进制或十进制或十进制形式书写,例如0F0H、777Q、101B、99D等,注意,在用十六进制书写时第一个字符是非数字09时,前面一定要补一个0,例如,FAH应记为0FAH。汇编指令中立即数操作数还可以以一个表达式的形式出现,此时该立即数就是表达式的值。(2)寄存器操作数 寄存器操作数是以寄存器的内容参加运算,或用寄存器存放结果。MOV AX, 3456H中的AX,MOV DL, 41H中的DL就是寄存器操作数。段寄存器的内容指出当前4个段的基址,这些寄存器不能用一般的

42、传送指令将立即数送入。如果需要将立即数置入段寄存器中的DS、ES或SS,则首先应将该值送入AX或其他通用寄存器,然后再由AX传送给DS、ES或SS。至于CS因其与指令地址有关,一般不需用户干预。标志寄存器FLAG的各位在执行算术逻辑运算指令后一般均被修改,其状态将依指令及执行结果而定,它可以反映出当时处理器和累加器所检测到的结果。标志寄存器一般不能作为操作数,但可用标志指令或INC、DEC、ADD、MUL、DIV等来处理。通用寄存器(AX、BX、CX、DX、SP、BP、SI、DI、AH、AL、BH、BL、CH、CL、DH、DL)和指针及变址寄存器(BX、BP、SI、DI)均可参加算术和逻辑运算

43、操作。虽然经常把AX作为累加器,但所有通用寄存器均可用作累加器。通用寄存器在单操作数指令中可作目标操作数,在双操作数指令中既可作源操作数也可作目标操作数。(2)寄存器操作数一些汇编指令中虽然没有显式地写有寄存器,但是它却隐含着使用所指定的通用寄存器,详见表。 指令指令隐含应用隐含应用AAA, AAD, AAM, AASAL, AHCBW, CWDAL, AH或AX, DXDAA, DASALIN, OUTAL或AXMUL, IMUL, DIV, IDIVAL, AX或AX, DXLAHF, SAHFAHLESESLDSDS循环或移位指令CL字符串操作指令CX, SI, DIXLATAL, BX

44、(3)内存操作数 内存操作数又称为存储器操作数,是指把内存某地址存放的字节、字作为指令的处理对象。这时要将该字节、字作为源操作数或目标操作数,当其作为源操作数时从内存中取出,或送到某个寄存器,或参加运算等;当其作为目标操作数时,则是将操作的结果置入该内存单元。无论是何种内存操作数,关键是必须找到其所在地址,即必须指出其所在段和相对于段首的位移(即有效地址EA),才能确定其物理地址。内存操作数地址的确定是寻址规则的重点。内存操作数所在段的段寄存器的名字在汇编指令中一般是不写的,它遵循着如前面的表所示的隐含原则,根据内存操作数类型的不同相应使用不同的段寄存器。 寻址方式与数据有关的寻址方式与数据有

45、关的寻址方式(1)隐含寻址方式(2)立即数寻址(Immediate Addressing) (3)寄存器寻址(Register Addressing)(4)直接寻址(Direct Addressing)(5)寄存器间接寻址(Register Index Addressing) (6)寄存器相对寻址(Register Relative Addressing) (7)基址加变址寻址 (Based Indexed Addressing) (8)相对基址变址寻址 (Based Indexed Addressing) 与转移地址有关的寻址方式与转移地址有关的寻址方式(1)段内直接寻址(2)段内间接寻址(

46、3)段间直接寻址(4)段间间接寻址I/O端口寻址端口寻址(I/O PORT Addressing) 1. 8086 的寻址方式的寻址方式 与与数据数据有关的寻址方式有关的寻址方式: 立即寻址 MOV AX , 3069H寄存器寻址 MOV AL , BH直接寻址 MOV AX , 2000H 寄存器间接寻址 MOV AX , BX 寄存器相对寻址 MOV AX , COUNT SI 基址变址寻址 MOV AX , BP DI 相对基址变址寻址 MOV AX , MASK BX SI 存储器寻址存储器寻址1隐含寻址方式隐含寻址方式2 立即寻址方式立即寻址方式 操作数直接存放在指令中,紧跟在操作码

47、后,它作为指令的一部分存放在代码中。操作数叫做立即数。立即数可以是8位、16位。例:MOV AL,15H机器码如下:地址 存储器内容 指令01000H B0 15 MOV AL,15H01002H XX 下一条指令(1) 立即寻址方式立即寻址方式 * 操作数在指令中给出 MOV AL , 5 MOV AX , 3064H MOV AL , A* 只能用于 SRC 字段* SRC 和 DST 的字长一致 MOV AH , 3064H 3寄存器寻址方式寄存器寻址方式 指令的操作数存放在处理器的寄存器中,指令指明寄存器号,这些内部寄存器包括段寄存器和通用寄存器,寄存器可以分 8位、16位。例:MOV

48、 AX,BX BX为源操作数,AX是目的操作数, 该指令是将BX中的内容传送至AX,即传送后,BX的内容保持不变。 地址 储器内容 指令 01000 8B C3 MOV AX,BX 01002 XX 下一条指令 (2) 寄存器寻址方式寄存器寻址方式 * 操作数在指定的寄存器中 MOV AX , BX MOV AL , BH MOV AX , 3064H* 字节寄存器只有 AH AL BH BL CH CL DH DL* SRC 和 DST 的字长一致 MOV AH , BX * CS 不能用 MOV 指令改变 MOV CS , AX 4存储器寻址存储器寻址 操作数存放在存储器中。 CPU 首先

49、计算这个操作数的物理地址PA(physical address),然后读或写这个操作数。 PA= SBA:EA段基址*16+偏移量 SBA (segment base address)一个物理存储器段的起始地址。 EA (effective address)为操作数相对该存储器段开始的偏移量。 其有效地址计算的公式如下: EA=base+index +displacement Base为基址寄存器:BX、BP。 Index为变址寄存器:SI、DI , Displacement为位移量:16位或8位。 隐含段前缀:DS:BX、DS:SI、DS:DI、SS:BP 超越段前缀:可以利用其它的段寄存器

50、作为段基址,需要使用段超越,即将段寄存器用显式方式“段寄存器”:放在间接寻址寄存器的左方括号前, 如:MOV AL,ES:SI变址器汇编书写形式有效地址(EA)段寄存器物理地址SISI(SI)DS(DS)*10H+(SI)DIDI(DI)DS(DS)*10H+(DI)BXBX(BX)DS(DS)*10H+(BX)BPBP(BP)SS(SS)*10H+(BP)(1)、直接寻址方式)、直接寻址方式 指令中地址码中给出的是有效地址,即形式地址就是有效地址。 PA=段基址:直接地址 段基址指:CS、 DS、 SS、 ES 例: MOV CX,DS:BETA 地址 存储器内容 指令 01000 8B0E

51、3412 MOV CX,DS:BETA 01004 XX 设(03234)=0EDH,(03235)=0BEH, (DS)=0200H,BETA=1234H,指令执行后,将操作数0BEEDH传至CX。(3) 直接寻址方式直接寻址方式 * 有效地址 EA 由指令直接给出 例:MOV AX , 2000H EA = 2000H , 假设 (DS) = 3000H , 那么 PA = 32000H* 隐含的段为数据段隐含的段为数据段 DS* 可使用可使用段跨越前缀段跨越前缀 MOV AX , ES: 2000H * 操作数地址可由变量(符号地址)表示操作数地址可由变量(符号地址)表示VALUE DB

52、 10MOV AH , VALUE MOV AX , VALUE MOV AX , WORD PTR VALUE 50H30H32000AH AL3050(AX) = 3050HMOV AX, 2000H; 设(DS)=3000H执行结果(AX)=3050H可以用符号地址代替数值地址,如:MOV AX, VALUE;或者MOV AX, VALUEVALUE为存放操作数单元的符号地址。DATA SEGMENT DB 41H ;偏移量0 DB 42H ;偏移量1DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATAGO: MOV AX, DATA MOV D

53、S, AX MOV DL,DS:0; MOV AH, 2 INT 21H MOV DL,DS:1; INT 21H MOV AH, 4CH INT 21HCODE ENDS END GODATA SEGMENTA1 DB 41H ;变量A1,偏移量0B1 DB 42H ;变量B1,偏移量1DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATAGO: MOV AX, DATA MOV DS, AX MOV DL,A1; MOV AH, 2 INT 21H MOV DL,B1; INT 21H MOV AH, 4CH INT 21HCODE ENDS END

54、 GO (2)、寄存器间接寻址方式寄存器间接寻址方式 操作数的有效地址存放在通用寄存器BX、BP、SI、DI中。 例:MOV AX,SI ;其隐含的段寄存器为DS, 设DS=0200H,SI=1234H,所读取的操作数物理地址为03234H,读取的操作数为0BEEDH,传送至寄存器AX中。 地址 存储器内容 指令 01000 8B 04 MOV AX,SI 01002 XX 下一条指令 . . 03234 ED 源操作数 03235 BE(4) 寄存器间接寻址寄存器间接寻址 * EA 在基址寄存器 ( BX / BP ) 或变址寄存器 ( SI / DI ) 中 MOV AX , BX PA

55、= 16d ( DS ) + ( BX ) MOV AX , ES: BX PA = 16d ( ES ) + ( BX ) MOV AX , BP PA = 16d ( SS ) + ( BP )* 不允许使用AX、CX、DX 存放 EA MOV AX , CX * SRC 和 DST 的字长一致 MOV DL , BX ; BX 指示一个字节单元 MOV DX , BX ; BX 指示一个字单元* 适于数组、字符串、表格的处理举例 假设有指令:MOV AX, BX; 在执行时,(DS)=2000H,(BX)=1000H,执行指令后AX50A0H. EA=1000H,物理地址为21000H这

56、种寻址方式可以用于表格处理,执行完一条指令后,只需修改寄存器内容就可取出表格中的下一项。(3)、基址(变址)寻址方式(寄存器相对寻址)操作数的有效地址是由基址(变址)寄存器中的内容加上偏移量。偏移量是8位或16位的。 基址寄存器:BX、BP 变址寄存器:SI、DI 例: MOV BX+BETA,AL 其 中 B E TA 为 立 即 数 , 操 作 数 的 有 效 地 址 是 EA=BX+BETA 该指令也可以写成如下形式: MOV BETABX,AL 或 MOV BX+BETA,AL 有效地址 = ( BX ) ( BP ) 8 位 ( SI ) 16 位 ( DI )+ 位移量(5) 寄存

57、器相对寻址方式寄存器相对寻址方式 *例: MOV AX , COUNT SI 或 MOV AX , COUNT + SI 假设 ( DS ) = 3000H, ( SI ) = 2000H, COUNT = 100H, 那么 PA = 32100H 假设 ( 32100H ) = 1234H, 那么 ( AX ) = 1234H* 适于数组、字符串、表格的处理 若DS=0200H,BX=1000H,BETA=1234H,AL=0EDH,则指令执行后,指令的机器码及操作数按下述方式在存储器中存储: 地址 存储器内容 指令 01000 88873412 MOV BX+BETA,AL 01004 X

58、X 下一条指令 . . 04234 ED 04235 XX基址寻址常用于对一维数组的访问,用基地址指向一维数组的第一个元素的地址指针,用偏移量指向数组中要访问的元素。如图:Element 0Element 2 . . . 数据 结构 . . .Element n 偏移量基址寄存器+存储器Element n-1Element 1 一个数组元素的变址寻址 Element n-1Element n . . . 数组 . . .变址寄存器 偏移地址+存储器Element 0Element 1Element 2例如: MOV AX,BPVARA MOV AX,VARABP MOV AX,BPVARA变址

59、器汇编书写形式有效地址段寄存器物理地址SISI+disp(SI)+dispDS(DS)*10H+(SI)+dispDIDI+disp(DI)+dispDS(DS)*10H+(DI)+dispBXBX+disp(BX)+dispDS(DS)*10H+(BX)+dispBPBP+disp(BP)+dispSS(SS)*10H+(BP)+disp举例:MOV AX, COUNTSI, 其中,COUNT为16位偏移量的符号地址。如果(DS)=3000H,(SI)=2000H,COUNT=3000H,则EA=2000H+3000H=5000H物理地址=30000H+5000H=35000H执行结果(AX

60、)=1234H(4)、基址变址寻址方式 有效地址是基址寄存器与变址寄存器中数据之和。 这种寻址模式可以被用于访问复杂的数据结构如二维数组。 基址变址寻址的物理地址如下式所示: PA=段基址:基址+变址 其有效地址如下: BXSI或BXSI 表示:EA=(BX)(SI) BXDI或BXDI 表示:EA=(BX)(DI) BPSI或BPSI 表示:EA=(BP)(SI) BPDI或BXDI 表示:EA=(BP)(DI)(6) 基址变址寻址方式基址变址寻址方式 * MOV AX , BX DI 或 MOV AX , BX + DI MOV AX , ES: BX SI * 适于数组、字符串、表格的处

温馨提示

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

评论

0/150

提交评论