数据寻址方式
指令和数据的寻址方式

4.5.2 基本指令系统
指令系统的基本指令见表4.7。
4.5.3 精简指令系统
RISC指令系统的特征:
选取使用频率最高的一些简单指令;(指令总数较少) 指令长度固定,指令格式种类少,寻址方式种类少; 只有取数/存数指令访问存储器,其余的指令操作都在寄存器之间进行。
因此,RISC的CPU的寄存器较多。
1. 顺序寻址方式
指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一 条指令的顺序执行。 为此,必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序 号,该顺序号就是指令在内存中的地址。
2. 跳跃寻址方式
当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是 指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。程序跳 跃后,按新的指令地址开始顺序执行。
4.3 指令和数据的寻址方式
操作数或指令在存储器中的地址:某个操作数或某条指令存放在某个存储单 元时其存储单元的编号。 在存储器中,操作数或指令写入或读出的方式,有三种:地址指定方式、相 联存储方式和 堆栈存储方式。 当采用地址指定方式时,形成操作数或指令地址的方式,称为寻址方式。寻 址方式分为两类,即指令寻址方式和数据寻址方式。 指令的寻址方式有两种,一种是顺序寻址方式,另一种是跳跃寻址方式。 4.3.1 指令的寻址方式
4.3.2 操作数寻址方式
1.
1.
1.
寄存器寻址方式和寄存器间接寻址方式:当操作数不放在内存中,而是 放在CPU的通用寄存器中时,可采用寄存器寻址方式。此时指令中给出的 操作数地址不是内存的地址单元号,而是通用寄存器的编号。 寄存器寻址方式和寄存器间接寻址方式的区别在于:指令中的寄存器内 容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。 相对寻址:是把程序计数器PC的内容加上指令格式中的形式地址D而形成 操作数的有效地址。 程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当 前的指令地址而言。 采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,所编程 序可以放在内存任何地方。 此时形式地址D通常称为偏移量,其值可正 可负,相对于当前指令地址进行浮动。 基址寻址方式:将CPU中基址寄存器的内容加上指令格式中的形式地址而 形成操作数的有效地址。 它的优点是可以扩大寻址能力。同形式地址相比,基址寄存器的位数可 以设置得很长,从而可以在较大的存储空间中寻址。
七种寻址方式举例例题

七种寻址方式举例例题
1. 直接寻址方式:例如,要访问内存中地址为100的数据,直接将地址100传递给内存控制器即可。
2. 立即寻址方式:例如,要将立即数5存储到寄存器R1中,直接将立即数5传递给寄存器R1即可。
3. 间接寻址方式:例如,要访问内存中地址存储在寄存器R2中的数据,先从寄存器R2中获取地址,再将该地址传递给内存控制器。
4. 寄存器寻址方式:例如,要将寄存器R3中的数据存储到寄存器R4中,直接将寄存器R3和寄存器R4传递给寄存器控制器。
5. 寄存器间接寻址方式:例如,要访问内存中地址为寄存器R5中存储的地址的数据,先从寄存器R5中获取地址,再将该地址传递给内存控制器。
6. 基址寻址方式:例如,要访问内存中基地址为寄存器R6中存储的地址加上一个偏移量的数据,先从寄存器R6中获取基地址,再将基地址加上偏移量得到目标地址,最后将目标地址传递给内存控制器。
7. 变址寻址方式:例如,要访问内存中地址为寄存器R7中存储的地址加上寄存器R8中存储的地址的数据,先从寄存器
R7中获取地址,再从寄存器R8中获取地址,最后将两个地址相加得到目标地址,将目标地址传递给内存控制器。
与数据有关的寻址方式

EA=基址+(变址×比例因子)+位移量
有效地址可以由以下四种成分组成:
1). 位移量(displacement)是存放在指令中的一个8位、16位或32位的数,但它不是立即数,而是一个地址。
7. 相对基址变址寻址方式:操作数的有效地址EA是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和。可使用段跨越前缀。如:MOV ES: MASK[BX][SI], AX
8. 比例变址寻址方式:操作数的有效地址EA是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和。如:MOV MASK[ESI*4], EAX
2). PUSH指令的目的和POP指令的源必须用SS段;
3). 指令代码必须存放在CS段中。
(4). 80x86 CPU中为了使指令字不要过长,规定双操作数指令的两个操作数中,只能有一个使用存储器寻址方式,这就是一个变量常常先要送到寄存器的原因。
4. 寄存器间接寻址方式:操作数的有效地址只包含基址寄存器或变址寄存器内容一种成份。有效地址就在某个寄存器中,而操作数则在存储器中。可使用段跨越前缀。如:MOV AX, ES: [BX]
5. 寄存器相对寻址方式(或称直接变址寻址方式):操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,有效地址由两部分组成。可使用段跨越前缀(又称为段超越)。如:MOV ES: STRING[SI]的有效地址EA是一个基址寄存器和一个变址寄存器的内容之和。可使用段跨越前缀。如:MOV AX, ES: [BX][SI]
数据寻址方式介绍

数据寻址方式介绍数据寻址方式是计算机中的一种技术,用于确定存储器中数据元素的位置。
在计算机系统中,存储器是一个重要的组成部分,用于存储数据和程序。
为了有效地存取存储器中的数据,需要一种确定数据所在位置的方式。
数据寻址方式可以分为以下几种类型:1.直接寻址:直接寻址是最简单的寻址方式,通过给定一个绝对地址来确定数据元素的位置。
在直接寻址方式中,每个数据元素都有一个唯一的地址,计算机可以直接通过这个地址访问数据。
这种寻址方式的优点是简单快速,但是缺点是地址空间受限,浪费存储空间。
2.间接寻址:间接寻址是通过给定一个地址的地址来确定数据元素的位置。
在间接寻址方式中,存储器中的每个地址都指向存储器中的另一个地址,进而确定数据元素的位置。
这种寻址方式的优点是地址空间较大,可以充分利用存储空间。
但是缺点是多次访问存储器,时间效率较低。
3.寄存器寻址:寄存器寻址是通过将数据元素存储在寄存器中,然后通过寄存器编号来访问数据元素。
在寄存器寻址方式中,计算机系统中有一组寄存器可以用于数据存储,这些寄存器具有较快的访问速度。
这种寻址方式的优点是访问速度快,但是缺点是寄存器数量有限,存储容量有限。
4.索引寻址:索引寻址是通过给定一个索引来确定数据元素的位置。
在索引寻址方式中,存储器中的每个地址都存储了数据元素的索引值,通过给定的索引值可以快速确定数据元素的位置。
这种寻址方式的优点是可以通过索引值快速定位数据元素,但是缺点是需要额外的索引存储空间。
5.相对寻址:相对寻址是根据当前指令的位置来确定数据元素的位置。
在相对寻址方式中,指令中的地址是相对于当前指令的位置的偏移量,通过加上这个偏移量可以计算出数据元素的位置。
这种寻址方式的优点是灵活,可以根据当前指令的位置动态计算数据元素的位置,但是缺点是指令中的地址需要较多的位数。
6.基址寻址:基址寻址是通过给定一个基地址和一个偏移量来确定数据元素的位置。
在基址寻址方式中,基址是存储器中的一个地址,偏移量是相对于基址的地址的偏移量,通过将基址和偏移量相加可以计算出数据元素的位置。
七种寻址方式

七种寻址方式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。
8种寻址方式算法

8种寻址方式算法
寻址方式是计算机指令系统中的一种指令,用于指示程序中操作数的有效地址。
以下是8种常见的寻址方式:
1.立即寻址:操作数直接包含在指令中,即操作码后面紧跟的是
操作数本身。
2.寄存器寻址:操作数存储在寄存器中,指令指定寄存器名。
3.间接寻址:操作数的有效地址通过寄存器间接给出,指令指定
寄存器名。
4.相对寻址:操作数的有效地址是程序计数器的当前值与位移量
之和。
5.变址寻址:操作数是变址寄存器的内容加上一个偏移量。
6.基址寻址:操作数的有效地址是基址寄存器和位移量之和。
7.多重寻址:一个指令中同时使用多个操作数地址来源。
8.堆栈寻址:操作数的有效地址是堆栈指针寄存器和位移量之
和。
以上是8种常见的寻址方式,每种方式都有其特定的应用场景,用于满足不同的数据处理需求。
九种寻址方式

九种寻址方式
计算机中,寻址方式是指指令或数据在内存中的存储地址的计算方式。
简单来说就是CPU执行指令或读取数据时所需要使用的地址。
目前常见的寻址方式有9种,分别是:
1. 直接寻址:所需数据存储地址直接在指令中给出,CPU直接读取指定地址中的数据。
直接寻址速度快,但内存空间利用率不高。
2. 间接寻址:所需数据存储地址存储在寄存器或内存单元中,通过读取该寄存器或内存单元的值获得数据的存储地址。
适用于数据地址动态变化的情况。
3. 寄存器寻址:所需数据存储在寄存器中,CPU直接读取该寄存器中的数据。
寄存器寻址速度快,但容量限制。
4. 自增寻址:每次读取数据后,地址自动加1,继续读取下一个数据。
适用于连续存储的数据,如数组。
5. 自减寻址:每次读取数据后,地址自动减1,继续读取前一个数据。
6. 索引寻址:先读取索引值,再加上一个偏移量得到数据存储地址,读取数据。
适用于多维数组和结构体的访问。
7. 相对寻址:读取相对于当前地址偏移量的数据。
适用于分支指令,如条件分支指令。
8. 基址寻址:用一个基地址加上一个偏移量得到数据存储地址。
基址寻址适用于大型程序中的数据分段。
9. 堆栈寻址:数据存储在堆栈中,CPU按照堆栈规则读取数据。
堆栈寻址适用于程序调用和中断处理。
以上就是常见的九种寻址方式,每种方式都有其适用场景和优劣势。
在程序设计时需要根据实际情况选择最适合的寻址方式,以提高程序的运行效率和内存利用率。
内存寻址的方式

内存寻址的方式内存寻址的方式是计算机中进行数据存取的基本方法,它决定了计算机如何将数据存储到内存中,并且在需要时如何从内存中读取数据。
本文将介绍几种常见的内存寻址方式。
1. 直接寻址直接寻址是最简单的内存寻址方式,也是最常用的方式之一。
在直接寻址中,CPU通过将数据的地址直接传递给内存控制器,从而实现对内存的读取或写入操作。
这种方式的优点是速度快,但缺点是地址空间有限,无法处理大于地址空间的数据。
2. 间接寻址间接寻址是通过使用一个指针或地址寄存器来间接访问内存中的数据。
CPU首先从指针或地址寄存器中读取一个内存地址,然后再通过该地址去访问内存中的数据。
这种方式的优点是可以间接地访问内存中的数据,适用于处理复杂的数据结构,但缺点是需要多次访问内存,速度相对较慢。
3. 寄存器间接寻址寄存器间接寻址是一种特殊的间接寻址方式,它使用一个寄存器来存储内存地址。
CPU首先从寄存器中读取一个地址,然后再通过该地址去访问内存中的数据。
这种方式的优点是速度快,但缺点是寄存器的数量有限,无法处理大量的地址。
4. 基址寻址基址寻址是一种常见的寻址方式,它使用一个基址寄存器来存储内存地址的起始位置。
CPU通过将基址寄存器中的值与偏移量相加,得到实际的内存地址。
这种方式的优点是可以处理大量的地址,适用于处理数组或数据结构,但缺点是需要多次计算地址,速度相对较慢。
5. 变址寻址变址寻址是一种常见的寻址方式,它使用一个变址寄存器来存储内存地址的偏移量。
CPU通过将变址寄存器中的值与基址相加,得到实际的内存地址。
这种方式的优点是可以处理不同偏移量的地址,适用于处理多维数组或数据结构,但缺点是需要多次计算地址,速度相对较慢。
6. 相对寻址相对寻址是一种常见的寻址方式,它使用一个相对地址来访问内存中的数据。
CPU通过将相对地址与当前指令的地址相加,得到实际的内存地址。
这种方式的优点是可以在程序中使用相对地址,简化了程序的编写,但缺点是需要多次计算地址,速度相对较慢。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM #X,AR1 ;将#X送到AR1中
LD *AR1+,A ;((AR1))→A ,AR1=AR1+1
ADD *AR1+,A ;((AR1))+(A)→A
ADD *AR1+,A ; +X3
ADD *AR1,A ;
+X4
AR1
STL A,*(y) ;A中的低位数送到y中
x 1000h
. .
X1 X2 X3
立即寻址:
﹡ 就是指令中包含有执行指令所需要的立即数
(不用寻址)。在数字前面加 # 号,表示一个立 即数;
﹡立即数可为3、5、8、9位短立即数,也可为
16位长立即数;指令可为1 字或2字。 如:1)LD #80h,A
2)LD #7h,ARP 3)RPT #FFh 4)LD #1Fh,ASM;将5位立即数加载到 ASM中 5)LD #1FFh,DP;将9位立即数加载到 DP中
※ 在偏移地址前加@来设定
举例:注意(流水线等待..) 见p34 1、LD #1234h,SP
SSBX CPL ST #5678h,@30h; (1264h)=#5678h
2、LD #020h,DP RSBX CPL ST #1234h,@30h;(1030h)=#1234h
0 0010 0000 011 0000=1030
间接寻址:❖ 使用辅助寄来自器16位的地址,访问数据存储 空间的任意单元
❖ 间接寻址类型 ❖ 循环寻址 (*) ❖ 位倒序寻址(*)
例:完成下列表达式的程序
4
y xn n1
.bss x,4 ;伪指令,为变量X,Y保留一个5个字的空间
.bss y,1
.text
;程序开始,该段后包含了可执行的代码
绝对寻址:
﹡指令中包含有所要寻址的存储单元的16位地址。
﹡有四种绝对寻址:dmad寻址,pmad寻址, PA寻址, *(lk)寻址。
数据页分配情况:
地址 0000-----007Fh 0080-----00FF 0100-----017F 0180-----01FF 0200-----027F 0280-----02FF 0300-----037F 0380-----03FF …..
ADD *AR1+,A ; ((AR1))+ (A)→A
ADD *AR1+,A ; +X3
ADD *AR1,A ;
+X4
STL A,*(y) ;A中的低位数送到y中
;---------1111111111111111----
;-----2222222222---rpt---stm #x,ar1 ld *ar1+,a rpt #3 add *ar1+,a stl a,*(y)
start: stm #0,swwsr stm #x,ar1 rpt #4 mvpd table,*ar1+ ;
初始化数据
;------------1111111111---------normal-----
STM #x,AR1 ;将#X送到AR1中
LD *AR1+,A ;((AR1))→A , AR1=AR1+1
;----222222222222-------
❖ ;-------3333- add-- 1 3 5 STM #x,AR1 STM #2,AR0 ld *ar1+0,a add *ar1+0,a add *ar1+0,a stl a,*(y)
;--------3333--
xh:
b
xh ; 空循环
例:求Y=X2+X4+X6+X8+X10
.bss x,10 ;给变量x保留10个空间
.bss y,1 ;给变量y保留1个空间
.text
;程序开始
STM #X+1,AR1
寻址用到的缩写语
❖ Lk:16位长立即数; ❖ Dst:目的累加器; ❖ Src:源累加器; ❖ PA:16位立即数---I/O口地址; ❖ Pmad: 16位立即数---程序存储器地址; ❖ Dmad: 16位立即数---数据存储器地址; ❖ Xmem:16位双寻址操作数,用于双/单操作数指令。从DB总线读出; ❖ Ymem: 16位双寻址操作数,用于双操作数指令。从CB数据总线读出 。 ❖ Smem:16位单寻址操作数。
PA寻址:
❖ PORTR 05,INDAT ❖ PORTW OUTDAT,5h
*(lk)寻址:
❖ LD *(2000h),A ❖ STL A,*(200h)
累加器寻址:
❖ 利用累加器的内容作为地址来访问程序存储 器中的数据
❖ READA:从程序存储器中(A的内容为地址) 读数据到数据存储器中
❖ WRITA:将数据存储器中的数写到程序存储 器中(A的内容为地址)
﹡直接寻址指令编码格式:
15~8
7
opcode I=0
I=0,表示直接寻址
6~0
dam
直接寻址的地址产生:
※ DP的取值范围:0~511(29=512),dma的取值范围从0~128, 所以,DP指向全部的512页之一,dma指向这一页的128个字 地址之一。
※ SP指向全空间的任意一个地址,dma指向某页的特定地址。从 一个数据空间的任何一个基地址访问连续的128个字的块。
DP 第0页
1 2 3 4 5 6 7
27=128
Dmad寻址:
❖ MVDK *AR3-,1000h ❖ MVDM 300h,BK ❖ MVKD 1000h,*+AR5 ❖ MVMD AR7,8000h
Pmad寻址:
❖ MVDP DAT0,0FE00h ❖ MVPD 2000h,*AR7 ❖ MVPD 0FE00h,DAT5
.
X4
1004h Y
.title “add001.asm” .mmregs .def start .bss x,5 .bss y,1 .data Table: .word 1,2,3,4,5 .text
ld *ar1+,a add *ar1+,a add *ar1+,a add *ar1+,a add *ar1+,a stl a,@y
直接寻址:
﹡指令包含了数据地址的低7位,作为偏移地址与DP或SP中
的基地址组合形成完整的16位数据地址。在DP和SP不变的情 况下,可以直接访问128个地址。
﹡使用SP还是DP由状态寄存器中的CPL位决定:
CPL=0,使用DP的9位作为高9位与偏移地址相加 CPL=1,使用SP的16位与偏移地址相加