七种寻址方式
程序计数器 地址寄存器 外部地址总线AB 外部地址总线AB
0002H PC= 0000H 0001H
0000H
内 部 数 据 总 线
(PC) (PC) (PC)
执行过程
运算器 ①② 累加器A 累加器A 存 储 器
0002H 0001H 0 0 0 0 1 0 0 1 0000H 0 1 1 1 0 1 0 0
…Leabharlann MOVC A,@A+DPTR执行示意图 ,@A+DPTR执行示意图
…
6.位寻址方式 MCS-51有位处理功能 可以对数据位进行操作,例如: 有位处理功能, MCS-51有位处理功能,可以对数据位进行操作,例如: MOV C,40H C, 是把位40H的值送到进位位C 40H的值送到进位位 是把位40H的值送到进位位C。 寻址范围包括: 寻址范围包括: 内部RAM中的位寻址区。位有两种表示方法,例如, RAM中的位寻址区 (1)内部RAM中的位寻址区。位有两种表示方法,例如, 40H;另一种是单元地址加上位,例如,(28H).0, 40H;另一种是单元地址加上位,例如,(28H).0,指 的是28H单元中的最低位。它们是等价的。 28H单元中的最低位 的是28H单元中的最低位。它们是等价的。 (2)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: 可寻址位在指令中有如下4种的表示方法: 直接使用位地址。例如PSW.5的位地址为0D5H PSW.5的位地址为0D5H。 a. 直接使用位地址。例如PSW.5的位地址为0D5H。
程序存储区 1020 EA 12 R2
片内RAM区 4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: 操作数直接以单元地址的形式给出: A, MOV A,40H 寻址范围: 寻址范围: 内部RAM 128个单元 RAM的 (1) 内部RAM的128个单元 特殊功能寄存器。除了以单元地址的形式外, (2) 特殊功能寄存器。除了以单元地址的形式外, 可用寄存器符号的形式给出 例如: 的形式给出。 还可用寄存器符号的形式给出。例如: A, A,P0是等价的 是等价的。 MOV A,80H 与 MOV A,P0是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式
MOV A,@R0执行示意图 , 执行示意图
4.立即寻址方式 操作数在指令中直接给出, 操作数在指令中直接给出,需在操作数前面 加前缀标志“ 。例如: 加前缀标志“#”。例如: MOV A, #3AH ;立即数3AH送累加器A
MOV
A,#3AH执行示意图
5.基址寄存器加变址寄存器间址寻址方式 本寻址方式是以DPTR PC作基址寄存器 DPTR或 作基址寄存器, 本寻址方式是以DPTR或PC作基址寄存器,以 累加器A作为变址寄存器。 累加器A作为变址寄存器。 说明: 说明: (1)本寻址方式是专门针对程序存储器的寻址 方式,寻址范围可达到64KB。 64KB 方式,寻址范围可达到64KB。 本寻址方式的指令只有3 (2)本寻址方式的指令只有3条: MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR
(3)片外数据存储器的低256字节 片外数据存储器的低256字节 256 例如: A, 例如:MOVX A,@Ri (4)堆栈区 堆栈操作指令PUSH 压栈) POP(出栈) PUSH( 堆栈操作指令PUSH(压栈)和POP(出栈)使用堆 栈指针(SP) 栈指针(SP)作间址寄存器 R0, 例 MOV R0,#50H MOV A,@R0
例
MOV
A, 3AH
;把3AH单元的内容送A。
MOV
A, 3AH执行示意图
3. 寄存器间接寻址方式 寄存器中存放的是操作数的地址 在寄存器的名称前面加前缀标志 前缀标志“ 在寄存器的名称前面加前缀标志“@” 访问内部RAM或外部数据存储器的低256个字节时, RAM或外部数据存储器的低256个字节时 访问内部RAM或外部数据存储器的低256个字节时,只 能采用R0 R1作为间址寄存器 例如: R0或 作为间址寄存器。 能采用R0或R1作为间址寄存器。例如: A, i=0或 MOV A,@Ri ;i=0或1 其中Ri中的内容为40H 把内部RAM 40H单元的内容送 Ri中的内容为40H, RAM中 其中Ri中的内容为40H,把内部RAM中40H单元的内容送 到A 。 寻址范围: 寻址范围: 访问内部RAM 128个单元 其通用形式为@Ri RAM低 个单元, (1)访问内部RAM低128个单元,其通用形式为@Ri 对片外数据存储器的64K字节的间接寻址,例如: 64K字节的间接寻址 (2)对片外数据存储器的64K字节的间接寻址,例如: A, MOVX A,@DPTR
地址 译码
你知道PC 你知道PC 的作用吗? 的作用吗?
寄存器区
数据缓冲器 外部数据总线DB 外部数据总线DB 内部控制信号
指令 时钟及清零 寄存器 译码
外部控制总线CB 外部控制总线CB
返回
例
指令存放在70 单元, 70H 现假设MOVC A,@A+DPTR指令存放在70H单元,ACC @A+ 中原存放值为E DPTR中值为2000H 中值为2000 DPTR形 中原存放值为E0H,DPTR 中值为2000H , 则A +DPTR 形 成的地址为20 20E 20E 单元中内容为47 47H 成的地址为20E0H 。20E0H 单元中内容为47H , 则执行 该指令后,ACC中原 中原E 47H代替。 该指令后 ,ACC中原E0H被47H 代替。该指令执行过程 示于图。 示于图。
标志位, b.位名称的表示方法。例如:PSW.5是F0标志位,可使用 位名称的表示方法。例如:PSW. 方法 表示该位。 F0表示该位。 单元地址加位数的表示方法 的表示方法。 H). c.单元地址加位数的表示方法。例如 :(0D0H).5。 特殊功能寄存器符号加位数的表示方法 例如:PSW. 的表示方法。 d.特殊功能寄存器符号加位数的表示方法。 例如:PSW.5 。 将片内RAM位地址3DH即27H RAM位地址 例 SETB 3DH ;将片内RAM位地址3DH即27H 单元的第5位置“ 单元的第5位置“1”。
例
JC
03H ;若进位C=0,则程序顺序执行,即 不跳转,PC= PC+2 ;若进位C=1, 则以PC 中的当前内容为基地址, 加上偏移量03H 后所得到的结果为 该转移指令的目的地址 。
…
…
单片机的工作过程
例: MOV A,#09H 74H 09H ;把09H送到累加器A中 09H送到累加器A 送到累加器
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 0 0 0 0 0 0 38
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 1 0 0 0 0 0 38
3F 3E 3D 3C 3B 3A 39
3F 3E 3D 3C 3B 3A 39
7.相对寻址方式 在相对寻址的转移指令中, 在相对寻址的转移指令中 , 给出了地址偏 移量, 表示,即把PC PC的当前值加上偏 移量,以“rel”表示,即把PC的当前值加上偏 移量就构成了程序转移的目的地址: 移量就构成了程序转移的目的地址: 目的地址= 目的地址=转移指令所在的地址 + 转移指令的字 节数 + rel 偏移量rel是一带符号的8 rel是一带符号的 偏移量rel是一带符号的8位二进制数补码数 。 范围是: 128 范围是:–128 ~ +127 向地址增加方向最大可转移(127+转移指令字节) 向地址增加方向最大可转移(127+转移指令字节) 个单元地址,向地址减少方向最大可转移 (128-转移指令字节)个单元地址。 128-转移指令字节)个单元地址。 种寻址方式及寻址空间,见表3 43) 7种寻址方式及寻址空间,见表3-1(P43)。
3.3 指令系统的寻址方式 寻址方式就是在指令中说明操作数所在地址的方法。 寻址方式就是在指令中说明操作数所在地址的方法。 就是在指令中说明操作数所在地址的方法 寻址方式。 共7种寻址方式。 1.寄存器寻址方式 操作数在寄存器中 A, ;(Rn Rn) n=0~ MOV A,Rn ;(Rn)→A,n=0~7 表示把寄存器Rn的内容传送给累加器A Rn的内容传送给累加器 表示把寄存器Rn的内容传送给累加器A 寻址范围包括: 寻址范围包括: 组通用工作寄存区共32个工作寄存器。 32个工作寄存器 (1)4组通用工作寄存区共32个工作寄存器。 部分特殊功能寄存器,例如A (2)部分特殊功能寄存器,例如A、B 以及数据指针 寄存器DPTR DPTR等 寄存器DPTR等。
七种寻址方式定义
七种寻址方式定义1. 直接寻址(Direct Addressing)直接寻址是一种最简单的寻址方式,它通过使用一个固定的地址来引用存储器中的数据。
在直接寻址中,程序员可以直接指定要访问的内存地址,使得数据能够被快速地检索和处理。
优点: - 简单直观,易于理解和实现。
- 访问速度快,因为没有额外的计算操作。
缺点: - 空间浪费:由于每个变量都需要分配一个独立的内存地址,可能会导致内存空间的浪费。
- 灵活性差:无法动态地分配和管理内存。
2. 间接寻址(Indirect Addressing)间接寻址是一种通过使用指针来间接访问数据的寻址方式。
在间接寻址中,指针包含了要访问的数据的地址,程序员通过操作指针来获取或修改这些数据。
优点: - 灵活性高:可以动态地分配和管理内存。
- 节省空间:多个变量可以共享同一个指针,减少了内存占用。
缺点: - 访问速度相对较慢:由于需要额外的指针操作,访问数据比直接寻址要慢一些。
3. 寄存器寻址(Register Addressing)寄存器寻址是一种通过使用CPU内部的寄存器来访问数据的寻址方式。
在寄存器寻址中,操作数直接存储在CPU的寄存器中,而不是通过内存地址来获取。
优点: - 访问速度极快:由于数据直接存储在CPU的寄存器中,不需要额外的内存访问操作。
- 节省空间:不占用内存空间。
缺点: - 寄存器数量有限:由于现代计算机中可用的寄存器数量有限,可能无法满足大量数据的需求。
- 可移植性差:不同的计算机架构可能具有不同数量和类型的寄存器。
4. 立即寻址(Immediate Addressing)立即寻址是一种通过使用指令本身或指令后面紧跟着的常量值来访问数据的寻址方式。
在立即寻址中,操作数直接包含在指令中,而不需要额外的地址信息。
优点: - 简单直观:操作数直接包含在指令中,易于理解和实现。
- 节省空间:不需要额外的地址信息。
缺点: - 数据大小受限:由于操作数直接包含在指令中,所以通常只能表示较小的常量值。
80C51单片机指令系统的7种寻址方式
80C51单片机指令系统的7种寻址方式寻址方式就是寻找操作数或指令地址的方式。
寻址方式包含两方面的内容:一是操作数的寻址,二是指令地址的寻址(如转移指令、调用指令)。
寻址方式是计算机性能的具体表达,也是编写汇编语言程序的根底,必须非***悉并灵活运用。
对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。
若不特别声明,后面提到的寻址方式均指源操作数的寻址方式。
80C51单片机指令系统共有7种寻址方式,包括:立即寻址、存放器寻址、直接寻址、存放器间接寻址、变址寻址、相对寻址和位寻址。
现以7条指令为例说明这7种寻址方式。
(1)立即寻址:将操作数直接写在指令中。
如指令①:MOV A,#3AH 执行的操作是将立即数3AH送到累加器A中,因为指令中有立即数3AH,所以称此寻址方式为立即寻址。
注意,立即数前面必须加“#”号,以区别立即数和直接寻址。
该指令的执行过程如图1所示。
图1 立即数寻址示意图(2)存放器寻址:是指将指令操作数存放于存放器中,存放器包括工作存放器R0~R7、累加器A、通用存放器B、地址存放器DPTR等。
如指令②:MOV A,R0 ;(A)←(R0)该指令将存放器R0中的数送入累加器A中,因为指令源操作数为存放器R0,所以称此寻址方式为存放器寻址。
如果程序状态存放器PSW的RS1RS0=00(选中第0组工作存放器,对应地址为(00H~07H),设RAM区00H 的内容为20H,则执行MOV A,R0指令后,累加器A中的内容变为20H。
该指令执行过程如图2所示。
图2 存放器寻址示意图(3)直接寻址:是指把存放操作数的内存单元的地址直接写在指令中。
在80C51单片机中可以直接寻址的存储器主要有内部RAM区和特殊功能存放器SFR区。
如指令③:MOV A,30H ;(A)←(30H)该指令将地址为30H的存储单元的内容送入累加器A,因为指令源操作数为地址直接给出的存储单元,故称此寻址方式为直接寻址。
七种寻址方式
七种寻址⽅式在存储器中,操作数和指令字写⼊或读出的⽅式,有地址指定的⽅式,相联存储⽅式和堆栈存取⽅式,⼏乎所有的计算机,在内存中都采⽤地址指定⽅式,当采⽤地址指定⽅式的时候,形成操作数或指令地址的⽅式称为寻址⽅式,寻址⽅式分为两类,即为指令寻址⽅式和数据寻址⽅式,在传统⽅式设计的计算机中,内存中指令的寻址与数据的寻址是交替进⾏的⽴即数寻址⽅式:将操作数放在操作码的后⾯。
⼀起放在指令代码段中,在程序运⾏的过程中,程序直接调⽤该操作数,⽽不⽤到其他的地址的单元中去取得相应的操作数。
上述中的操作数也被称为⽴即数。
可以有不同的进制寄存器寻址⽅式:指令所要的操作数已经存储在某个寄存器中,或把⽬标操作数存⼊寄存器中,把在指令中指出所⽤的寄存器(寄存器助忆符)的寻址⽅式称为寄存器寻址⽅式寄存器寻址⽅式是⼀种简单快捷的寻址⽅式,源和⽬的操作数都可以是寄存器直接寻址⽅式:在指令格式的地址字段中直接指出操作数在内存中的地址id。
⼀般情况下数据放在数据段中,所以物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么操作数可存放在其他段直接寻址⽅式常⽤于处理内存单元的数据,操作数是内存变量的值,指令中直接给出操作数地址(DIR)的寻址⽅式称为直接寻址⽅式,寻址的对象为:1内存数据存储器,指令中直接地址表⽰2、特殊功能的寄存器SFR,在指令中⽤寄存器名称表⽰寄存器间接寻址⽅式:是指将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数,MCS-51规定R0或R1为间接寻址寄存器,他可寻址内部RAM低地位的12个字节单元内容,还可以采⽤数据指针(DPTR)作为直接寻址寄存器,寻址外部数据存储器的64k字节空间,但不能⽤本寻址⽅式寻址特殊功能寄存器寄存器的间接寻址需要以寄存器符号的形式来表⽰,并且在寄存器名称前⾯加上间接寻址符号“@”。
例如指令MOV A,@RO就使⽤了寄存器间接寻址⽅式,这条指令的意义就是将地址指针RO指向内部数据存储单元中的数据送⼊累加器A中。
寄存器与7种寻址方式
一、寄存器总共有14个16位寄存器,8个8位寄存器通用寄存器:数据寄存器:AH(8位) AL(8位) AX(16位) (AX和AL又称累加器)BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器)CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循环的次数,CL 用于移位)DH(8位) DL(8位) DX(16位) (DX一般用来做32位的乘除法时存放被除数或者保留余数)指针寄存器:SP 堆栈指针(存放栈顶地址)BP 基址指针(存放堆栈基址偏移)变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移,即作为存储器(短)指针使用。
作为通用寄存器,它们可以保存16位算术逻辑运算中的操作数和运算结果,有时运算结果就是需要的存储单元地址的偏移.SI 源地址(源变址寄存器)DI 目的地址(目的变址寄存器)控制寄存器:IP 指令指针FLAG 标志寄存器①进位标志CF,记录运算时最高有效位产生的进位值。
②符号标志SF,记录运算结果的符号。
结果为负时置1,否则置0。
③零标志ZF,运算结果为0时ZF位置1,否则置0。
④溢出标志OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。
溢出时OF位置1,否则置0。
⑤辅助进位标志AF,记录运算时第3位(半个字节)产生的进位值。
⑥奇偶标志PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。
当结果操作数中1的个数为偶数时置1,否则置0。
段寄存器CS 代码段IPDS 数据段SS 堆栈段SP BPES 附加段二、七种寻址方式:1、立即寻址方式:操作数就包含在指令中。
作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。
立即数可以是8位的,也可以是16位的。
例如:指令: MOV AX,1234H则: AX = 1234H2、寄存器寻址方式:操作数在CPU内部的寄存器中,指令指定寄存器号。
七种寻址方式
…
20E0
…
47
ALU
MOVC A,@A+DPTR执行示意图
6.位寻址方式 MCS-51有位处理功能,可以对数据位进行操作,例如: MOV C,40H 是把位40H的值送到进位位C。 寻址范围包括: (1)内部RAM中的位寻址区。位有两种表示方法,例如, 40H;另一种是单元地址加上位,例如,(28H).0,指 的是28H单元中的最低位。它们是等价的。 (2)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: a. 直接使用位地址。例如PSW.5的位地址为0D5H。
例
MOV
A, 3AH
程序存储区
;把3AH单元的内容送A。
500 501
E5 3A 3A
片内RAM区 10 10
ACC
MOV
A, 3AH执行示意图
3. 寄存器间接寻址方式 寄存器中存放的是操作数的地址 在寄存器的名称前面加前缀标志“@” 访问内部RAM或外部数据存储器的低256个字节时,只 能采用R0或R1作为间址寄存器。例如: MOV A,@Ri ;i=0或1 其中Ri中的内容为40H,把内部RAM中40H单元的内容送 到 A。 寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对片外数据存储器的64K字节的间接寻址,例如: MOVX A,@DPTR
例
现假设MOVC A,@A+DPTR指令存放在70H单元,ACC 中原存放值为 E0H,DPTR中值为2000H,则A +DPTR形 成的地址为20E0H。 20E0H单元中内容为 47H,则执行 该指令后,ACC中原E0H被47H 代替。该指令执行过程 示于图。
程序存储区 70 93 ACC (47)E0 DPH DPL 20 00
简述计算机指令的寻址方式
简述计算机指令的寻址方式
计算机指令的寻址方式是指指令通过哪种方式来访问和处理操作数。
常见的计算机指令的寻址方式包括以下几种:
1. 直接寻址:指令中给出了操作数的地址,直接通过该地址访问操作数。
2. 即时寻址:指令直接给出了操作数的值,而不必访问内存。
3. 寄存器寻址:指令中给出了一个寄存器的编号,操作数存储在该寄存器中。
4. 寄存器间接寻址:指令中给出了一个寄存器的编号,该寄存器中存储了操作数在内存中的地址,需要通过寄存器访问内存。
5. 相对寻址:指令中给出了与指令本身相对地址的偏移量,操作数的地址通过指令本身相对地址加上偏移量得到。
6. 基址寻址:指令中给出了一个基址寄存器的编号和一个偏移地址,操作数的地址通过基址寄存器和偏移地址结合得到。
7. 变址寻址:指令中给出了一个变址寄存器的编号和一个偏移地址,操作数的地址通过变址寄存器和偏移地址结合得到。
8. 相对寄存器寻址:指令中给出了一个相对寄存器的编号,操作数的地址通过相对寄存器和指令中的寄存器的值结合得到。
以上是常见的计算机指令的寻址方式,不同的计算机体系架构可能支持不同的寻址方式,寻址方式的选择取决于具体的指令集设计和计算机架构设计。
七种寻址方式.ppt
寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对片外数据存储器的64K字节的间接寻址,例如:
MOVX A,@DPTR
(3)片外数据存储器的低256字节
例如:MOVX A,@Ri
(4)堆栈区
堆栈操作指令PUSH(压栈)和POP(出栈)使用堆 栈指针(SP)作间址寄存器
寄存器DPTR等。
1020
程序存储区 EA
片内RAM区
12
R2
4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: MOV A,40H 寻址范围: (1) 内部RAM的128个单元 (2) 特殊功能寄存器。除了以单元地址的形式外, 还可用寄存器符号的形式给出。例如: MOV A,80H 与 MOV A,P0是等价的。
地址 译码
寄存器区 内部控制信号
数据缓冲器 外部数据总线DB
指令 时钟及清零 寄存器
译码
外部控制总线CB
返回
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 1 0 0 0 0 0
3F 3E 3D 3C 3B 3A 39 38
图4.9 SETB 3DH 指令执行示意图
7.相对寻址方式
在相对寻址的转移指令中,给出了地址偏 移量,以“rel”表示,即把PC的当前值加上偏 移量就构成了程序转移的目的地址:
目的地址=转移指令所在的地址 + 转移指令的字 节数 + rel
偏移量rel是一带符号的8位二进制数补码数 。
范围是:–128 ~ +127
向地址增加方向最大可转移(127+转移指令字节) 个单元地址,向地址减少方向最大可转移 (128-转移指令字节)个单元地址。
8086中的七种寻址方式
8086中的七种寻址⽅式寻址⽅式8086/8088有七种基本的寻址⽅式:⽴即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。
其中,后五种寻址⽅式(即直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址)属于存储器寻址,⽤于说明操作数或操作数地址所在存储单元的地址。
这五种⽅式也就是确定存放操作数的存储单元有效地址EA的⽅法,这⾥所说的有效地址就是在前⾯⼀节讲存储器分段中所说的段内偏移地址。
除了这些基本的寻址⽅式以外,还有固定寻址和I/O端⼝寻址等,但不会在本节中介绍到。
基本寻址⽅式下⾯重点说⼀下这七种基本寻址⽅式的特点:1. ⽴即寻址⽅式先解释⼀个概念,叫做⽴即数。
操作数包含在指令中,它作为指令的⼀部分,跟在操作码后存放在代码段。
这种操作数称为⽴即数。
⽴即寻址⽅式所提供的操作数紧跟在操作码后⾯,与操作码⼀起放在指令代码段中,不需要到其他地址单元中去取。
⽴即数可以是8位,也可以是16位。
这种寻址⽅式主要⽤于给寄存器或存储单元赋初值的场合。
⽴即寻址⽅式是这七种寻址⽅式中速度最快的寻址⽅式。
举例:MOV AX, 1234H ; 给AX寄存器赋值为1234H2. 寄存器寻址⽅式寄存器寻址的特点是操作数在CPU内部的寄存器中,在指令中指定寄存器号。
对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI和SP等;对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。
例如:MOV SI, AXMOV AL, DH由于操作数在寄存器中,不需要通过访问存储器来取得操作数,所以采⽤寄存器寻址⽅式的指令执⾏速度较快。
3. 直接寻址⽅式直接寻址的操作数在存储器中,指令直接包含有操作数的有效地址。
由于操作数⼀般存放在数据段,所以操作数的地址由DS加上指令中给出的16位偏移得到。
假如DS内容是5000H,地址为51234H字存储单元中的内容时6789H,那么在执⾏“MOV AX, [1234H]”后寄存器AX的内容是6789H。
七种寻址方式
七种寻址方式一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。
例如:MOV AH,80H ADD AX,1234H MOV ECX,123456HMOV B1,12H MOV W1,3456H ADD D1,32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式如:ADD VARD,EAX ADD VARW,AX MOV VARB,BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。
在第4章将会学到如何定义它们。
2、目的操作数是寄存器寻址方式如:ADD BH,78h ADD AX,1234h MOV EBX,12345678H等。
3、源和目的操作数都是寄存器寻址方式如:MOV EAX,EBX MOV AX,BX MOV DH,BL等。
三、直接寻址方式指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。
在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。
七种寻址方式
七种寻址方式1、立即寻址方式:操作数就包含在指令中。
作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。
立即数可以是8位的,也可以是16位的。
例如:指令: MOV AX,1234H则: AX = 1234H2、寄存器寻址方式:操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP 和BP等。
对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数因而可以取得较高的运算数度。
3、直接寻址方式:操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)注:操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
例如:MOV AX,[8054]如(DS) = 2000H,则执行结果为(AX) = 3050H(物理地址=20000+8054=28054H)28054H里的内容为3050H在汇编语言指令中,可以用符号地址代替数值地址如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是等效的。
如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE 或MOV AX,ES:[VALUE]4、寄存器间接寻址方式:操作数在寄存器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。
在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。
如果有效地址在BP中,则以SS段寄存器中的内容为段值例如:MOV AX,[SI]如果(DS) = 5000H (SI) = 1234H则物理地址= 50000 + 1234 = 51234H51234H地址中的内容为:6789H执行该指令后,(AX) = 6789H5、寄存器相对寻址方式:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和BX 8位位移量EA(有效地址) = BP +SI 16位位移量DI在一般情况下,如果SI、DI、或BX中的内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的段寄存器是SS。
