收藏 分享(赏)

cpu与汇编第二章寻址方式.ppt

上传人:天天快乐 文档编号:763841 上传时间:2018-04-21 格式:PPT 页数:117 大小:1.15MB
下载 相关 举报
cpu与汇编第二章寻址方式.ppt_第1页
第1页 / 共117页
cpu与汇编第二章寻址方式.ppt_第2页
第2页 / 共117页
cpu与汇编第二章寻址方式.ppt_第3页
第3页 / 共117页
cpu与汇编第二章寻址方式.ppt_第4页
第4页 / 共117页
cpu与汇编第二章寻址方式.ppt_第5页
第5页 / 共117页
点击查看更多>>
资源描述

1、第二章 Intel 8086/8088 CPU的寻址方式和指令系统,2.1 计算机组织结构,计算机系统,硬件:,软件:系统软件 用户软件,Mainmemory,I/O bridge,Bus interface,ALU,Register file,CPU,System bus,Memory bus,Disk controller,Graphicsadapter,USBcontroller,Mouse,Keyboard,Display,Disk,I/O bus,Expansion slots forother devices suchas network adapters,PC,hardware,

2、Mainmemory,I/O bridge,Bus interface,ALU,Register file,CPU,System bus,Memory bus,Disk controller,Graphicsadapter,USBcontroller,Mouse,Keyboard,Display,Disk,I/O bus,Expansion slots forother devices suchas network adapters,hello executable stored on disk,PC,hello code,hello.c,Mainmemory,I/O bridge,Bus i

3、nterface,ALU,Register file,CPU,System bus,Memory bus,Disk controller,Graphicsadapter,USBcontroller,Mouse,Keyboard,Display,Disk,I/O bus,Expansion slots forother devices suchas network adapters,hello executable stored on disk,PC,hello code,hello,worldn,hello,worldn,微型计算机的工作过程,微型计算机的工作过程就是执行程序的过程,而程序由指

4、令序列组成,因此,执行程序的过程,就是执行指令序列的过程,即逐条地从存储器中取出指令并完成指令所指定的操作。 由于执行每一条指令,都包括取指、译码和执行三个基本步骤,所以,微型计算机的工作过程,也就是不断地取指令、译码和执行的过程,直到遇到停机指令时才结束机器的运行。,优点:处理器简单通用,把复杂问题转移到存放解释程序存储器中,即把复杂的硬件设计转化为复杂的软件设计。,8086微处理器,8086/8088 CPU内部的寄存器组,寄存器是CPU内部存放操作数的地方,它的操作速度比内存操作数速度快。8086共有14个寄存器,它们都是16位的,可以存放16位二进制数。通用寄存器:4个数据寄存器:AX

5、、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) 数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 4个16位寄存器: AX:Accumulator,累加器 BX:Base Register, 基址寄存器 CX:Count Register,计数寄存

6、器 DX:Data Register,数据寄存器 上述4个寄存器可分为8个8位寄存器,分别为AH和AL、BH和BL、CH和CL、DH和DL。 每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器“能分可合”的特性,灵活地处理双字、字和字节等信息。 在32位处理器中,有4个32位寄存器:EAX、EBX、ECX和EDX。,通用寄存器,AX(accumulator):作为累加器,是算术运算的主要寄存器。所有I/O指令都使用它和外部设备传送信息。BX(base):除了作为一般的数据寄存器使用外,经常用做基址寄存器。CX(count):除了作为一般的数据寄存器使用外,常用来保存计数值,如在移位指

7、令、循环指令和串处理指令中用作隐含的计数器。DX(data):除了作为一般的数据寄存器使用外,可以在处理双字长运算时把DX和AX组合使用,DX存放高位字。,通用寄存器,SP(stack pointer):除了作为一般的数据寄存器使用外,用来指示栈顶的偏移地址;BP(base pointer):除了作为一般的数据寄存器使用外,可以和堆栈段寄存器SS联合使用来指示堆栈段中的存储单元地址;SI(source index)和DI(destination index):除了作为一般的数据寄存器使用外,可以和数据段寄存器DS联合使用来确定数据段中存储单元的地址注意:这四个寄存器只能以16位为单位一起使用,

8、标志寄存器(程序状态字寄存器 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, 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,

9、ZF=1, SF=0,Debug下的内存和寄存器(1),Debug下的内存和寄存器(2),一个16位寄存器可以存储一个16位的数据。(数据的存放情况)一个16位寄存器所能存储的数据的最大值为多少? 答案:216-1。,通用寄存器,16位数据在寄存器中的存放情况,数据:18二进制表示:10010在寄存器AX中的存储:,16位数据在寄存器中的存放情况,数据:20000二进制表示:0100111000100000在寄存器AX中的存储:,通用寄存器,以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况:,通用寄存器,通用寄存器的作用,(2)变址寄存器(Index Register) SI:

10、Source Index Register,源变址寄存器 DI:Destination Index Register,目标变址寄存器 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,且具有特殊的功能。(3) 指针寄存器(Pointer Register) 它们主要用于访问堆栈内的存储单元,并且规定: BP:基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据 SP:堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶,通用寄存器的作用,通用寄存器的隐含使用及特殊用途,几条汇编指令,汇编指令不区分大小写,几条汇编指令,CPU执行下表中的程

11、序段的每条指令后,对寄存器中的数据进行的改变。,几条汇编指令,寄存器与存储器的比较: 寄 存 器 存 储 器,在CPU内部 在CPU外部访问速度快 访问速度慢容量小,成本高 容量大,成本低用名字表示 用地址表示,Registers,On-chip L1cache (SRAM),Main memory(DRAM),Local secondary storage(local disks),Larger, slower, and cheaper (per byte)storagedevices,Remote secondary storage(distributed file systems, We

12、b servers),Off-chip L2cache (SRAM),CPU registers hold words retrieved from cache memory.,L0:,L1:,L2:,L3:,L4:,L5:,Smaller,faster,and costlier(per byte)storage devices,8086在取指令和寻找内存操作数的地址时,采用了分段寻找的方式,在同一时刻可将内存分成4个段:代码段、数据段、堆栈段和特别数据段,段与段之间允许有重叠。4个段寄存器是: CS (Code Segment Register,代码分段寄存器) DS (Data Segme

13、nt Register,数据分段寄存器) SS (Stack Segment Register,堆栈分段寄存器) ES (Extra Segment Register,特别分段寄存器)。 这4个寄存器都只能够作为16位寄存器使用。 8086内部有20根地址线,它可以直接访问的物理空间为1M字节,其编码区间为:00000H0FFFFFH。而CPU内部存放存储单元偏移量的寄存器(如IP、SP、BP、SI、DI和BX等)都是16位,它们的编码范围仅为:00000H0FFFFH。 如何用16位寄存器有效地访问1MB的存储空间,8086采用了内存分段的管理模式,并引入存储器分段的概念。,段寄存器的作用,

14、8086内存分段管理模式,(1)存储器的分段 计算机的内存单元是以“字节”为最小单位进行线性编址的。为了标识每个存储单元,就给每个存储单元规定一个编号,此编号就是该存储单元的物理地址。 16位微机把内存空间划分成若干个逻辑段,每个逻辑段的要求如下:逻辑段的起始地址(通常简称为:段地址)必须是16的倍数,即最低4位二进制必须全为0;逻辑段的最大容量为64K,这由16位寄存器的寻址空间所决定。 按上述规定,1M内存最多可分成64K个段,即65536个段(段之间相互重叠),至少可分成16个相互不重叠的段。(2)物理地址的形成方式 存储单元的逻辑地址分为两部分:段地址和偏移量。由逻辑地址得到其物理地址

15、(PAPhysical Address)的计算方法如下:物理地址PA段地址16 + 偏移量,逻辑地址到物理地址的生成,加法器,逻辑 地址,19,15,0,0,偏移地址,段 地 址 0 0 0 0,20 - bit 物理存储器地址,15,0,物理地址:每个存储单元唯一的 20 位地址 段地址:段起始地址的高 16 位 偏移地址:段内相对于段起始地址的偏移值(16 位) (有效地址 EA),8086内存分段管理模式,(3)段寄存器的引用 段寄存器是因为对内存的分段管理而设置的。一般情况下,段寄存器及其指针寄存器的引用关系方面有如下规定:取指令所用的段寄存器和偏移量一定是用CS和IP;堆栈操作所用的

16、段寄存器和偏移量一定是SS和SP;串操作的目标操作数所用的段寄存器和偏移量一定是ES和DI;其它情况,段寄存器除其默认段寄存器外,还可以强行改变为其它段寄存器。,CS和IP,CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。 CS为代码段寄存器; IP为指令指针寄存器。,8086PC工作过程的简要描述,(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;(2)IP = IP + 所读取指令的长度,从而指向下一条指令;(3)执行指令。 转到步骤 (1),重复这个过程。,8086PC工作过程的简要描述,在 8086CPU 加电启动或复位后( 即 CPU

17、刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。,CS和IP,内存中指令和数据都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。CPU根据什么将内存中的信息看作指令? CPU将CS:IP指向的内存单元中的内容看作指令。,CS和IP,在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然

18、被CS:IP指向过。,修改CS、IP的指令,在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对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功

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

20、小的存储单元)的值是“字内容”的低8位。 在拼接“双字内容”时也是如此。,8086内存分段管理模式,3. 存储器,存储单元的地址和内容:, 存储器以字节(8 bit)为单位存储信息 每个字节单元有一个地址,从 0 编号,顺序加 1 地址用二进制数表示(无符号整数,写成十六进制) 一个字要占用相继的两个字节 低位字节存入低地址,高位字节存入高地址 机器以偶地址访问(读 / 写)存储器 字单元地址用它的低地址来表示,存储器的分段:,20 根地址线: 地址范围 00000H FFFFFH机器字长16位:仅能表示地址范围 0000H FFFFH小段:每16个字节为一小段,共有64K个小段 小段的首地址

21、 00000 H 0000F H 00010 H 0001F H 00020 H 0002F H FFFF0 H FFFFF H 段起始地址:小段首地址段的大小: 64K 范围内的任意字节,存储器的逻辑分段:,例:(DS) = 0400H, EA = 1234H, 物理地址 = 16d (DS) + EA = 05234H,CPU可以用不同的段地址和偏移地址形成同一个物理地址:物理地址 段地址 偏移地址05234H 0400H 1234H 0523H 0004H 0520H 0034H ,8086/8088有两个独立的存储空间和I/O地址空间,地址空间为1MB,I/O地址空间为64KB。数据按

22、字节、字或双字存放,存放方式可按对正的双字边界或非对正的双字为边界。逻辑地址(logical address)物理地址(physical address)。物理地址=段地址*16+偏移地址,地址,00001H,00008H,00007H,00006H,00005H,00004H,00003H,00002H,Byte 8,Byte 7,Byte 6,Byte 5,Byte 4,Byte 3,Byte 2,Byte 1,Word 6,Word 4,Word 2,Word 0,Byte 0,00000H,Word 5,Word 1,物理存储器,双字对齐,字对齐,Double word 0,Doubl

23、e word 4,图3.2 对正的数据字和双字,Byte 8,图(a)中数据5AF0H存放在对正的双字地址02000H,其中0F0H存放在低字节地址02000H,5AH存放在高字节地址02001H。图(b)中数据2C96H,对正的双字地址边界是0200CH。,地址,存储器(二进制),存储器(十六进制),地址,0200116,0200016,0101 1010,1111 0000,存储器(二进制),0010 1100,1001 0110,0200E16,0200D16,5A,F0,(b),(a),物理存储器,图3.4非对正的字或双字为边界的例子,地址,00001H,00008H,00007H,0

24、0006H,00005H,00004H,00003H,00002H,Byte8,Byte7,Byte6,Byte5,Byte4,Byte3,Byte2,Byte1,Word 7,Word 3,Byte0,00000H,字未对齐,Double word 1,Double word 2,Double word 5,Double word 3,双字未对齐,(a)非对正的双字边界的双字存储(b)对正的双字存储,(a)其中0123H存放在02104H处,此地址是对正的双字边界地址,而ABCD存放的起始地址是02102H,而该字的对正的双字边界应为02100H。完整的双字是0123ABCDH。,逻辑地址与

25、物理地址之间的关系:段基址为002B0H, 偏移地址为0013H, 物理地址为002C3H。 段基址为002C0H,偏移地址为0003H, 物理地址为002C3H。,逻辑地址,2C4H,2C3H,2C2H,2C1H,2C0H,2BFH,2BEH,2BDH,2BCH,2BBH,2BAH,2B9H,2B8H,2B7H,2B6H,2B5H,2B4H,2B3H,2B2H,2B1H,2B0H,段基址,偏移(3H),偏移(13H),段基址,物理地址,图表示堆栈结构堆栈是一个特殊的随机存储区,用于临时存放一些信息如数据或地址。对于实模式,堆栈区为64KB,按32K个字组织,. . .,. 堆栈段 .,存储器

26、 (字宽),0000H,SP,SS,FFFEH,堆栈底部,堆栈顶部,图PUSH AX指令执行前的堆栈状态,堆栈,00 11,22 33,44 55,66 77,88 99,AA BB,01 23,45 67,89 AB,CD EF,01 05,00 08,1062,1060,105E,105C,105A,1058,1056,1054,1052,1050,SS,SP,TOS,堆栈底部,PUSH AX指令执行后、 POP AX和POP BX执行后 堆栈状况,1062,1060,105E,105C,105A,1058,1056,1054,1052,1050,SS,SP,POP AX,TOP,控制寄存

27、器的作用,(1)指令指针寄存器(Instruction Pointer) 指令指针IP是16位的寄存器,存放着下次将要执行的指令在代码段的偏移量。 在80386及其高档处理器处于保护模式时,其指令指针寄存器是32位的EIP。(2)标志寄存器(Flags Register) FLAG寄存器的各位用来存放各种不同的标志。算术运算指令和逻辑运算指令的运行结果都将定性地反映在不同的标志位上,以便后续的条件判断指令根据这些标志实现判断转移,判断转移的实质是修改CS和IP。这也正是计算机能够实现判断转移的底层原理。,6个状态标志:OF、SF、ZF、AF、PF、CF3个控制标志:IF、DF、TF;7位保留;

28、,标志寄存器,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:中断标志,若IF=1开中断,响应可屏蔽中断;IF=0,关中断。 DF:方向标志,DF置1引起串操作指令的变址寄存器自动减值,DF置0引起串 操作指令的变址寄存器自动增值。 OF

29、:溢出标志,运算溢出时自动置1,当它为1时可用溢出中断指令产生中断。,机器语言(machine language) CPU执行的程序都是用机器语言写成的。机器代码是二进制代码,一条机器语言指令长度,可以是1个字节或多个字节。微处理器只能理解机器语言,但直接用机器语言写程序几乎是不可能的。因此程序常采用其它语言来编写。汇编语言(Assembler),2.2寻址方式,程序(program) 源代码 (source code) 目标代码 (object code)编译(assember)连接(link)指令 (instruction)指令系统(指令集) 操作码 (opcode)操作数(operand

30、) 目标操作数(destination operand) 源操作数 (source operand),指令格式 操作码字段 操作数地址字段地址结构 二地址 单地址 隐含地址基本指令长度 1-6字节。寻址方式 形式地址 有效地址 EA 物理地址 PA,利用汇编语言编写程序具有以下优点: (1)用汇编语言编写的程序,程序的代码短,程序占 用的内存少,程序运行速度要比用高级语言写的程序快; (2)汇编语言给予程序设计者更强的能力,实现高技术任务,而这些任务若用高级语言是难以实现或根本不能实现; (3)汇编语言的知识,有助于理解微处理器的结构,这是高级语言所没有的; (4)驻留程序和中断服务程序总是用

31、汇编语言开发,汇编语言语句的一般格式是: 标号:指令 ;注释例: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。,汇编指令的书写形式 一条汇编指令通常可以写成如下形式: 标号: 操作码 目标操作数 , 源操作数 ;注释 (1)其中 中的内容为可选项。 (2)标号必须是用字母打头的字母或数字组成的字符

32、串,标号供转移指令作为转移的目标。 (3)指令末尾的分号表示由 ;起直至ENTER前均为注释部分,在输入源程序时,每一条汇编指令的末尾必须输入换行键ENTER表示本指令的结束,下一指令的开始。,汇编指令的书写形式,操作码 目标操作数, 源操作数 一条能汇编成机器代码指令的汇编指令必须有唯一的操作码。操作码是汇编指令的关键字,它指出该指令要做什么。一条汇编指令中的源操作数用来指出指令处理的对象来自何处。一条汇编指令中的目标操作数用来指出指令的处理结果置于何处。在许多指令中目标操作数既表示处理的对象之一来自何处,又指出处理的结果置于何处。目标操作数总是紧接着操作码出现在源操作数的左边,因此有也称目

33、标操作数为左源。,汇编指令的书写形式,操作码 目标操作数, 源操作数 指令行中可以没有源操作数和目标操作数。在这种情况下通常是对某一固定的或称作隐含操作数的操作。指令行中可以没有源操作数而仅含目标操作数。这时目标操作数既指出处理对象来自何处,又指出处理结果置于何处。这种指令被称为单操作数指令。指令行中既有源操作数又有目标操作数的指令称为双操作数指令。双操作数指令中目标操作数一定出现在源操作数的左边。,寻址方式就是寻找指令中的操作数的方式,寻址主要是指寻找内存数据的地址。,几个概念,寻址方式:根据指令中给出的地址寻找真实操作数地址的方式形式地址:指令中的地址码字段给出的地址有效地址:能够直接访问

34、的存储器地址物理地址:存储器地址,汇编指令的书写形式,举例: LOOP1:AAA ; 此处可添加注释 MOV AX, 053H;此处可添加注释 INC DH ;此处可添加注释第一条指令:带标号LOOP1,AAA是操作码,这一指令隐含使用固定操作数AL;第二条指令: MOV是操作码,双操作数指令, AX是目标操作数,053H是源操作数第三条指令: INC是操作码单操作数指令 在DOS下运行汇编程序,注释部分只能用英文和ASCII码符号书写,在中文操作系统下则可用中文书写,是指换行键。操作码通常是指指令功能的助记符,它给出了指令功能便于记忆的形式,例如,MOV是Movement的缩写等。,三种类型

35、的操作数,(1)立即数(2)寄存器(3)内存,单操作数指令的操作数只能是寄存器操作数或内存操作数。双操作数指令的目标操作数只能是寄存器操作数或内存操作数,而源操作数可以是三者之一,但是两操作数不能同时为内存操作数。,(1)立即数操作数,立即数操作数作为代码指令的一部分出现在双操作数指令中。除了乘法、除法和字符串操作指令之外,立即数操作数均可作为源操作数。立即数操作数在汇编指令中可以以十六进、八进制、二进制或十进制形式书写,例如0F0H、777Q、101B、99D等,注意,在用十六进制书写时第一个字符是非数字09时,前面一定要补一个0,例如,FAH应记为0FAH。汇编指令中立即数操作数还可以以一

36、个表达式的形式出现,此时该立即数就是表达式的值。,(2)寄存器操作数,寄存器操作数是以寄存器的内容参加运算,或用寄存器存放结果。MOV AX, 3456H中的AX,MOV DL, 41H中的DL就是寄存器操作数。段寄存器的内容指出当前4个段的基址,这些寄存器不能用一般的传送指令将立即数送入。如果需要将立即数置入段寄存器中的DS、ES或SS,则首先应将该值送入AX或其他通用寄存器,然后再由AX传送给DS、ES或SS。至于CS因其与指令地址有关,一般不需用户干预。标志寄存器FLAG的各位在执行算术逻辑运算指令后一般均被修改,其状态将依指令及执行结果而定,它可以反映出当时处理器和累加器所检测到的结果

37、。标志寄存器一般不能作为操作数,但可用标志指令或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)均可参加算术和逻辑运算操作。虽然经常把AX作为累加器,但所有通用寄存器均可用作累加器。通用寄存器在单操作数指令中可作目标操作数,在双操作数指令中既可作源操作数也可作目标操作数。,(2)寄存器操作数,一些汇编指令中虽然没有显式地写有寄存器,但是它却隐含着使用所指定的通用寄存器,详见表。,(3)内存操作数,内存操作数又称为存储器操作数,是指把内存某地址存

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

39、ng) (3)寄存器寻址(Register Addressing)(4)直接寻址(Direct Addressing)(5)寄存器间接寻址(Register Index Addressing) (6)寄存器相对寻址(Register Relative Addressing) (7)基址加变址寻址 (Based Indexed Addressing) (8)相对基址变址寻址 (Based Indexed Addressing) 与转移地址有关的寻址方式(1)段内直接寻址(2)段内间接寻址(3)段间直接寻址(4)段间间接寻址I/O端口寻址(I/O PORT Addressing),1. 8086

40、的寻址方式,与数据有关的寻址方式: 立即寻址 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 立即寻址方式 操作数直接存放在指令中,紧跟在操作码后,它作为指令的一部分存放在代码中。操作数叫做立即数。立即数可以是8位、16位。例:MOV AL,15H机器码如下:地址 存储器内容 指令01000H B0 15 MOV AL,15H01

41、002H XX 下一条指令,(1) 立即寻址方式 * 操作数在指令中给出 MOV AL , 5 MOV AX , 3064H MOV AL , A* 只能用于 SRC 字段* SRC 和 DST 的字长一致 MOV AH , 3064H ,3寄存器寻址方式 指令的操作数存放在处理器的寄存器中,指令指明寄存器号,这些内部寄存器包括段寄存器和通用寄存器,寄存器可以分 8位、16位。例:MOV AX,BXBX为源操作数,AX是目的操作数,该指令是将BX中的内容传送至AX,即传送后,BX的内容保持不变。 地址 储器内容 指令 01000 8B C3 MOV AX,BX 01002 XX 下一条指令,(

42、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 首先计算这个操作数的物理地址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位。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报