七种寻址方式

合集下载

七种寻址方式及单片机执行过程

七种寻址方式及单片机执行过程


JC
03H ;若进位C=0,则程序顺序执行,即 不跳转,PC= PC+2 ;若进位C=1, 则以PC 中的当前内容为基地址, 加上偏移量03H 后所得到的结果为 该转移指令的目的地址 。
程序存储区
1000 1001
40 03 1002 PC


ALU 1005 C2
单片机的工作过程
例:
取指过程 执行过程
运算器 ①② 累加器A
MOV A,#09H
程序计数器
74H 09H
;把09H送到累加器A中
地址寄存器
外部地址总线AB
0002H PC= 0000H 0001H
内 部 数 据 总 线
0000H
存 储 器
(PC) (PC) (PC) 0002H 0001H 0 0 0 0 1 0 0 1 0000H 0 1 1 1 0 1 0 0

MOV
A, 3AH
程序存储区
;把3AH单元的内容送A。
500 501
E5 3A 3A
片内RAM区 10
ACC
10
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
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 1 0 0 0 0 0 38

80C51单片机指令系统的7种寻址方式

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种寻址方式

寄存器与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内部的寄存器中,指令指定寄存器号。

七种寻址方式

七种寻址方式
取指过程
程序计数器 地址寄存器 外部地址总线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是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式

七种寻址方式.ppt

七种寻址方式.ppt
其中Ri中的内容为40H,把内部RAM中40H单元的内容送 到A。
寻址范围: (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中的七种寻址⽅式寻址⽅式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。

8051单片机指令系统的7种寻址方式解析

8051单片机指令系统的7种寻址方式解析

8051单片机指令系统的7种寻址方式解析寻址方式:寻址就是寻找操作数的地址。

绝大多数指令执行时都需要操作数,因此就存在如何确定操作数地址的问题。

所谓寻址方式就是通过什么途径获取操作数的方式。

根据指令操作的需要,计算机总是提供多种寻址方式。

一般来说,寻址方式越多计算机的寻址能力就越强,但指令系统也就越复杂。

8051指令系统有7种寻址方式:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,下面分别介绍。

寄存器寻址寄存器寻址:寄存器寻址就是操作数在寄存器中,因此指定了寄存器就得到了操作数。

采用寄存器寻址方式的指令都是一字节的指令,指令中以符号名称来表示寄存器。

例如:MOV A R1 这条指令的功能是把工作寄存器R1的内容传送到累加器A中,由于操作数在R1中,因此指令中指定了R1,也就得到了操作数。

寄存器寻址方式的寻址范围包括:工作寄存器组R0~R7,部分特殊寄存器ACC,B,DPTR 等。

直接寻址直接寻址:直接寻址就是在指令中直接给出操作数所在单元的真实地址。

这里给出的操作数直接地址为8位二进制地址。

程序中一般用十六进制数表示。

例如:指令MOV A,30H 把内部RAM单元30H中的数据传送给累加器A,指令中30H就是操作数的直接地址。

直接寻址方式的寻址范围包括:内部数据存储器低128单元,特殊功能寄存器。

特殊功能寄存器在指令的表示中除了可以以直接地址形式给出外,还可以以寄存器符号形式给出,如对累加器A,在指令中可使用其直接地址OEOH,也可使用其符号形式ACC。

立即寻址立即寻址:立即寻址方式就是实际操作数作为指令的一部分,在指令中直接给出,取指令时,可在程序存储器中直接取得操作数。

通常把出现在指令中的操作数称为立即数。

采用立即寻址方式的指令,在立即数前面加上。

数据的7种寻址方式

数据的7种寻址方式

第3章数据的7种寻址方式,包括指令的格式,功能,指令的正误判断。

20位物理地址的生成:将段地址添上一个0(十六进制),再加上偏移地址。

数据传送指令:MOV PUSH,POP,XCHG,LEA,IN,OUT1、MOV ,注意指令的正误判断,可从3点入手。

(1)指令格式(2)数据大小是否超出范围(3)类型是否匹配。

通常,不能在两个内存单元间直接传送,段寄存器间不能直接传送,立即数不能直接传送到段寄存器,不能用CS作目的操作数。

2、PUSH 入栈指令,先减后压。

不能对字节进行压栈操作。

3、POP 出栈指令,先弹后加,将栈顶的一个字弹出到目的操作数。

4、EXCHG 交换指令。

不能在两个内存单元间直接交换。

5、LEA 取有效地址指令。

6、IN 输入指令,当端口大于255时,要用DX来表示端口号。

7、OUT 输出指令,当端口大于255时,要用DX来表示端口号算术运算等指令1、ADD AL,[1000H]例:AL=85H,BL=79H,执行指令ADD AL,BLAL= 0FEH ,CF= 0 ,OF= 02、SUB AL,BL3、INC [1000H] ERRORINC BYTE PTR [1000H]INC WORD PTR [1000H]该指令不影响CF标志4、DEC [1000H] ERRORDEC BX5、NEG AL 求相反数例:Y=X,X>=0; Y=|X|,X<0,编写程序段实现该功能MOV AL,XCMP AL,0JGE Y1NEG ALY1:MOV Y,ALHLT编程序的思路:取数据,在CPU里做运算,存数据;如果数据较多,通常要设指针,再取数据,取完数据后,修改地址指针,又取下一个数据,循环下去。

6、CMP AL,BL无符号数,A表示大,B表示小,E表示相等。

有符号数,G表示大,L表示小,E表示相等。

例:CMP AX,BXJGE NEXTXCHG AX,BXNEXT: CMP AX,CXJGE DONEXCHG AX,CXDONE:该程序段的功能是找AX,BX,CX中最大的数,并把最大的数放在AX中。

七种寻址方式的寻址范围

七种寻址方式的寻址范围

七种寻址方式的寻址范围
寻址方式是指计算机的指令寻址方式,常见的有以下七种寻址方式:
1. 直接寻址:寻址范围是CPU的寻址范围,通常为2的n次方个单元,例如32位CPU的寻址范围为0~2^32-1。

2. 寄存器寻址:寻址范围是CPU的寄存器,通常寄存器的个数有限,例如32位CPU通常有16个通用寄存器,寻址范围为0~15。

3. 立即寻址:寻址范围是一个常数或者立即数,通常是一个字节或者一个字的大小,例如0~255。

4. 间接寻址:寻址范围是由另一个寄存器或内存单元中存储的地址指定的,通常是一个字节或一个字的大小。

5. 寄存器间接寻址:寻址范围是由两个寄存器的内容组成的地址。

6. 基址寻址:寻址范围是由一个基址寄存器和一个偏移量组成的地址,通常用于访问数组或者数据块等结构。

7. 相对寻址:寻址范围是相对于当前指令地址的一个偏移量,通常用于实现跳转或者分支等指令。

7种寻址方式

7种寻址方式

7种寻址⽅式七种寻址⽅式1、(直接寻址⽅式)指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址⽅式为直接寻址⽅式。

在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么,操作数可存放在其它段。

例:假设有指令:MOV BX, [1234H],在执⾏时,(DS)=2000H,内存单元21234H的值为5213H。

问该指令执⾏后,BX的值是什么?解:根据直接寻址⽅式的寻址规则,把该指令的具体执⾏过程⽤下图来表⽰。

从图中,可看出执⾏该指令要分三部分:由于1234H是⼀个直接地址,它紧跟在指令的操作码之后,随取指令⽽被读出;访问数据段的段寄存器是DS,所以,⽤DS的值和偏移量1234H 相加,得存储单元的物理地址:21234H;取单元21234H的值5213H,并按“⾼⾼低低”的原则存⼊寄存器BX中。

所以,在执⾏该指令后,BX的值就为5213H。

由于数据段的段寄存器默认为DS,如果要指定访问其它段内的数据,可在指令中⽤段前缀的⽅式显式地书写出来。

下⾯指令的⽬标操作数就是带有段前缀的直接寻址⽅式。

MOV ES:[1000H], AX直接寻址⽅式常⽤于处理内存单元的数据,其操作数是内存变量的值,该寻址⽅式可在64K字节的段内进⾏寻址。

注意:⽴即寻址⽅式和直接寻址⽅式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。

在程序中,直接地址通常⽤内存变量名来表⽰,如:MOV BX, VARW,其中,VARW是内存字变量。

试⽐较下列指令中源操作数的寻址⽅式(VARW是内存字变量):MOV AX, 1234H MOV AX, [1234H] ;前者是⽴即寻址,后者是直接寻址MOV AX, VARW MOV AX, [VARW] ;两者是等效的,均为直接寻址2、(寄存器间接寻址⽅式)操作数在存储器中,操作数的有效地址⽤SI、DI、BX和BP等四个寄存器之⼀来指定,称这种寻址⽅式为寄存器间接寻址⽅式。

经典:7种寻址方式

经典:7种寻址方式

MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A
说明: 1.在51中,与外部存储器RAM打交道的只可以是A累加器。所有
需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部 RAM中的数据也必需通过A读入。
在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进 行数据的传递,而外部则不行。
例:MOV DPTR,#1234H
执行完了之后DPH中的值为12H,DPL中的值为34H。
如果我们分别向DPH,DPL送数,则结果也一样。
如下面两条指令: MOV DPH,#35H
MOV DPL,#12H。
则就相当于执行了 MOV DPTR,#3512H。
15.12.2020
21
3.3.6 累加器A与片外RAM之间的数据传递类指令(4条)
程序存储区 指令代码
2040H 83 2041H …
当前P…C

2120H 47 2121H 45
15.12.2020
A 4E50
ALU 2121H
12
改变PC
3.2.6 相对寻址
Relative Addressing
将PC中的当前内容与指令第二字节给出的数相加,结 果作为跳转指令的转移地址(转移目的地址)。 PC中的当前内容称为基地址(本指令后的字节地址) 指令第二字节给出的数据称为偏移量,1字节带符号数.
寄存器间接寻址
变址寻址 相对寻址
位寻址
15.12.2020
寻址空间(操作数存放空间) 程序存储器
片内RAM低128字节、SFR 工作寄存器R0~R7,A,B,DPTR 片内RAM:@R0,@R1,SP 片外RAM:@R0 ,@R1,@DPTR 程序存储器:@A+PC,@A+DPTR 程序存储器256字节范围内:PC+偏移量 片内RAM的位寻址区(20H~2FH字节地址) 某些可位寻址的SFR

100寻址方式

100寻址方式

100寻址方式寻址方式是计算机系统中用于定位和访问存储单元的一种方式。

在计算机系统中,寻址方式可以分为直接寻址、间接寻址、寄存器寻址、立即寻址、相对寻址等多种方式。

下面将详细介绍这100种寻址方式。

1.直接寻址:直接给出存储单元的地址,将数据直接存取到或者从指定的内存地址中读取数据。

2.立即寻址:将操作数直接给出,不需要通过寄存器或者内存来获取操作数。

3.间接寻址:通过首先获取引用存储地址(指针),然后再通过这个存储地址来间接引用数据。

4.寄存器寻址:将操作数存储在寄存器中,然后进行操作。

5.相对寻址:相对于当前指令的地址,获取指定地址中的数据。

6.基址寻址:在操作数中加上一个基址寄存器的内容,求得实际的操作数地址。

7.变址寻址:在基址寻址的基础上,再加上一个变址寄存器的内容,计算最终操作数地址。

8.通过堆栈寻址:将操作数存储在堆栈中,通过堆栈指针获取操作数。

9.通过堆栈寻址(相对):通过基址寄存器和变址寄存器作为堆栈指针的相对指针,获取操作数。

10.间接寄存器寻址:通过间接寄存器的内容来访问内存中的数据,而不是直接使用地址。

11.通过PC寻址:将程序计数器(PC)作为操作数地址,获取操作数。

12.通过条件寻址:通过指定的条件判断是否需要进行操作数的寻址。

13.通过比较结果寻址:通过比较指令的结果来判断是否需要进行操作数的寻址。

14.通过条件寄存器寻址:通过条件寄存器中的值来判断是否需要进行操作数的寻址。

15.比较状态标志位寻址:通过CPU中的比较状态标志位来判断是否需要进行操作数的寻址。

16.执行跳转指令寻址:通过跳转指令的目标地址来寻址操作数。

17.通过数据缓存寻址:通过缓存中存储的数据来寻址操作数。

18.通过地址缓存寻址:通过缓存中存储的地址来寻址操作数。

19.通过控制器寻址:通过外部控制器来寻址操作数。

20.通过DMA寻址:通过直接存储器访问(DMA)来寻址操作数。

21.通过虚拟内存寻址:通过虚拟内存映射表来寻址操作数。

七种寻址方式

七种寻址方式

七种寻址方式标签:it一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。

立即数可以是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分别是字节、字和双字单元。

以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。

该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。

立即数寻址方式通常用于对通用寄存器或内存单元赋初值。

图是指令“MOV AX, 4576H”存储形式和执行示意图。

二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。

把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。

指令中可以引用的寄存器及其符号名称如下: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等。

7 种寻址方式及其基本 指令

7 种寻址方式及其基本 指令

7 种寻址方式及其基本指令1. 立即寻址(Immediate Addressing)立即寻址方式是将操作数直接嵌入到指令中作为常数,指令执行时直接使用该常数作为操作数。

例如,一条指令可以是“ADD R1, #5”,表示将寄存器R1中的值与常数5相加。

2. 直接寻址(Direct Addressing)直接寻址方式是将操作数的地址直接指定在指令中,指令执行时直接使用该地址读取操作数。

例如,一条指令可以是“LOAD R1, 1000”,表示将地址1000处的内容加载到寄存器R1中。

3. 寄存器寻址(Register Addressing)寄存器寻址方式是将操作数的值存储在寄存器中,指令执行时直接使用该寄存器作为操作数。

例如,一条指令可以是“ADD R2, R3”,表示将寄存器R2中的值与寄存器R3中的值相加。

4. 间接寻址(Indirect Addressing)间接寻址方式是将操作数的地址存储在一个寄存器或内存单元中,指令执行时先读取该地址,再根据该地址读取操作数。

例如,一条指令可以是“LOAD R1, (R2)”,表示先从寄存器R2中读取一个地址,再根据该地址将内容加载到寄存器R1中。

5. 寄存器间接寻址(Register Indirect Addressing)寄存器间接寻址方式是将操作数的地址存储在一个寄存器中,指令执行时先读取该地址,再根据该地址读取操作数。

例如,一条指令可以是“LOAD R1, (R2)+”,表示先从寄存器R2中读取一个地址,再根据该地址将内容加载到寄存器R1中,并将寄存器R2的值增加。

6. 相对寻址(Relative Addressing)相对寻址方式是将操作数的地址与指令的地址相加或相减得到实际的操作数地址,指令执行时直接使用该地址读取操作数。

例如,一条指令可以是“LOAD R1, label”,表示将标签label的地址与指令的地址相加得到实际的地址,并将该地址处的内容加载到寄存器R1中。

七种寻址方式举例例题

七种寻址方式举例例题

七种寻址方式举例例题:
1. 立即寻址:指令直接包含操作数,不需要经过任何地址计算。

例:MOV AL, 5 //把5赋值给AL寄存器。

2. 寄存器寻址:操作数在寄存器中,不需要经过任何地址计算。

例:MOV AX, CX //把CX寄存器的内容(即计数器的值)赋给AX寄存器。

3. 寄存器间接寻址:操作数需要经过地址计算才能取出,常用于寄存器间接寻址。

例:MOV DX, 8000H //把偏移地址8000H处的数据(即偏移地址加起来,实质是访问内存地址)赋给DX寄存器。

4. 直接寻址:指令直接给出操作数,需要经过地址计算。

例:MOV AL, [DX] //把偏移地址为DX的数据赋给AL寄存器。

5. 零页寻址:对于某一段指令来说,0页至1页的1024个字节被作为一个整体来处理,称这一段地址为零页。

例:MOV AX, [0F00H] //把偏移地址为0F00H的数据(即偏移地址加起来,实质是访问内存地址)赋给AX寄存器。

6. 间接寻址:指令给出的是内存地址,需要经过地址计算才能取出操作数。

例:MOV AX, [ES:DX] //把ES段的偏移地址DX(即ES段中偏移地址为DX的数据)处的数据赋给AX寄存器。

7. 偷窥寻址:在X86指令集中,有些指令后面可以跟一个“偷窥”码,该码指示该指令后面紧跟的某一条指令(即偷窥指令)被执行时,其内容被自动设置为零。

例如,在8086微处理器的汇编语言中,LOP指令用于循环执行一段指令,当执行LOP时,LOP后面的指令被执行,其内容被自动设置为零。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


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
b.位名称的表示方法。例如:PSW.5是F0标志位,可使用 F0表示该位。 c.单元地址加位数的表示方法。例如 :(0D0H).5。 d.特殊功能寄存器符号加位数的表示方法。例如:PSW.5。 例 SETB 3DH ;将片内RAM位地址3DH即27H 单元的第5位置“1”。
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 0 0 0 0 0 0 38 3F 3E 3D 3C 3B 3A 39
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
图4.9 SETB 3DH 指令执行示意图
7.相对寻址方式 在相对寻址的转移指令中,给出了地址偏 移量,以“rel”表示,即把PC的当前值加上偏 移量就构成了程序转移的目的地址: 目的地址=转移指令所在的地址 + 转移指令的字 节数 + rel 偏移量rel是一带符号的8位二进制数补码数 。 范围是:–128 ~ +127 向地址增加方向最大可转移(127+转移指令字节) 个单元地址,向地址减少方向最大可转移 (128-转移指令字节)个单元地址。 7种寻址方式及寻址空间,见表3-1(P43)。
运算器 ①② 累加器A
MOV A,#09H
程序计数器
74H 09H
;把09H送到累加器A中
地址寄存器
外部地址总线AB
0002H PC= 0000H 0001H
内 部 数 据 总 线
0000H
存 储 器
(PC) (PC) (PC) 0002H 0001H 0 0 0 0 1 0 0 1 0000H 0 1 1 1 0 1 0 0
MOV A, ቤተ መጻሕፍቲ ባይዱ3AH
程序存储区 100 101 74 3A
;立即数3AH送累加器A
操作码 立即数
ACC 3A
MOV
A,#3AH执行示意图
5.基址寄存器加变址寄存器间址寻址方式 本寻址方式是以DPTR或PC作基址寄存器,以 累加器A作为变址寄存器。 说明: (1)本寻址方式是专门针对程序存储器的寻址 方式,寻址范围可达到64KB。 (2)本寻址方式的指令只有3条: MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR
地址 译码
你知道PC 的作用吗?
寄存器区 数据缓冲器 内部控制信号 指令 寄存器 译码 外部数据总线DB
时钟及清零
外部控制总线CB
返回
程序存储区 1020 EA 12 R2
片内RAM区 4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: MOV A,40H 寻址范围: (1) 内部RAM的128个单元 (2) 特殊功能寄存器。除了以单元地址的形式外, 还可用寄存器符号的形式给出。例如: MOV A,80H 与 MOV A,P0是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式

JC
03H ;若进位C=0,则程序顺序执行,即 不跳转,PC= PC+2 ;若进位C=1, 则以PC 中的当前内容为基地址, 加上偏移量03H 后所得到的结果为 该转移指令的目的地址 。
程序存储区
1000 1001
40 03 1002 PC


1005
ALU C2
单片机的工作过程
例:
取指过程 执行过程
(3)片外数据存储器的低256字节 例如:MOVX A,@Ri (4)堆栈区 堆栈操作指令PUSH(压栈)和POP(出栈)使用堆 栈指针(SP)作间址寄存器 例 MOV R0,#50H MOV A,@R0
MOV A,@R0执行示意图
4.立即寻址方式 操作数在指令中直接给出,需在操作数前面 加前缀标志“#”。例如:
相关文档
最新文档