寻址方式总结

合集下载

微机原理寻址方式

微机原理寻址方式

微机原理寻址方式1、立即寻址(immediate addressing )双字节指令,第一个字节是操作码,第二个字节是操作数,操作数在指令中直接给出,故称为立即数。

在立即数前面必须加上前缀“#”。

如:MOV DPTR,#1234H1234H是立即数,指令功能是把16位立即数1234H送到数据指针DPTR中,如图。

注意:立即寻址只能用于源操作数。

MOV A,#12H (√)MOV DPTR,#1200H (√)MOV #1200H,DPTR (×)2、直接寻址(direct addressing)在指令中直接给出操作数单元的地址。

如:MOV A,3AH指令功能:把片内RAM中3AH单元内的数据传送给累加器A。

如图所示:直接寻址方式只能给出8位地址,限于片内RAM:(1)低128单元,在指令中直接以单元地址形式给出。

(2)特殊功能寄存器,在指令中直接以单元地址形式给出,还可以寄存器符号形式给出。

如:PUSH DPH==PUSH 83H。

直接寻址访问累加器A时,用ACC表示累加器,以便与寄存器寻址方式区别。

3、寄存器寻址(register addressing)在指令中将指定寄存器的内容作为操作数。

寄存器寻址方式中,用寄存器名表示寄存器。

寻址范围:四组通用寄存器Rn(R0~R7)、部分专用寄存器( A, B, DPTR,)。

如:INC R0指令功能:把寄存器R0的内容加1,再送回R0中。

4、寄存器间接寻址(register indirect addressing )在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才是操作数。

在该寻址中,寄存器的名称前需加前缀“@”。

例如,指令MOV A,@R0指令功能:若R0寄存器的内容是3AH,指令的功能是以3AH为地址,将3AH地址单元的内容送到累加器A中。

如下图:寄存器间接寻址的寻址范围:(1)片内RAM的低128单元,只能采用R0或R1为间接寻址寄存器。

寻址方式

寻址方式

计算机指令系统
1.寻址方式:指CPU指令中规定的寻找操作数所在的地址的方式。

操作数:MOV AL , 05H 操作码目的操作数,源操作数操作数引用时的字节顺序:若存放的信息是字节,则按顺序存放若存放的信息是字,则将字的低位字节存放在低地址,高位字节存放在高地址注:如果没有特别说明,寻址方式是指源操作数的寻址方式。

2.寻址方式之一:立即寻址操作数作为立即数直接存在指令中,可为字节或字。

3.寻址方式之二:寄存器(直接)寻址操作数包含在指令规定的8位、16位寄存器中。

寄存器寻址由于无需从存储器中取操作数,故执行速度快。

4.寻址方式之三:直接寻址在指令的操作码后面直接给出操作数的16位偏移地址。

这个偏移地址也称为有效地址EA。

操作数默认在DS段中。

如果操作数在DS以外的其他段(CS,SS,ES)中,指令中必须指明段寄存器(段超越)。

5.寻址方式之四:寄存器间接寻址操作数地址的偏移量(有效地址EA)存放在寄存器中。

以SI,DI, BX间接寻址,默认操作数在DS段中;以BP间接寻址,默认操作数在SS段中。

6.寻址方式之五:基址寻址基址寻址将规定的基址寄存器的内容加上指令中给出的偏移量,即可得到操作数的有效地址。

基址寄存器包括基址寄存器BX和基址指针寄存器BP。

7.寻址方式之六:变址寻址变址寻址将规定的变址寄存器的内容加上指令中给出的偏移量,即可得到操作数的有效地址。

变址寄存器包括源变址寄存器SI和目的变址寄存器DI。

8.寻址方式之七:基址-变址寻址指令中规定一个基址寄存器和一个变址寄存器,同时还给出一个8位或16位偏移量,将三者的内容相加得到操作数的有效地址。

七种寻址方式

七种寻址方式

七种寻址⽅式在存储器中,操作数和指令字写⼊或读出的⽅式,有地址指定的⽅式,相联存储⽅式和堆栈存取⽅式,⼏乎所有的计算机,在内存中都采⽤地址指定⽅式,当采⽤地址指定⽅式的时候,形成操作数或指令地址的⽅式称为寻址⽅式,寻址⽅式分为两类,即为指令寻址⽅式和数据寻址⽅式,在传统⽅式设计的计算机中,内存中指令的寻址与数据的寻址是交替进⾏的⽴即数寻址⽅式:将操作数放在操作码的后⾯。

⼀起放在指令代码段中,在程序运⾏的过程中,程序直接调⽤该操作数,⽽不⽤到其他的地址的单元中去取得相应的操作数。

上述中的操作数也被称为⽴即数。

可以有不同的进制寄存器寻址⽅式:指令所要的操作数已经存储在某个寄存器中,或把⽬标操作数存⼊寄存器中,把在指令中指出所⽤的寄存器(寄存器助忆符)的寻址⽅式称为寄存器寻址⽅式寄存器寻址⽅式是⼀种简单快捷的寻址⽅式,源和⽬的操作数都可以是寄存器直接寻址⽅式:在指令格式的地址字段中直接指出操作数在内存中的地址id。

⼀般情况下数据放在数据段中,所以物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么操作数可存放在其他段直接寻址⽅式常⽤于处理内存单元的数据,操作数是内存变量的值,指令中直接给出操作数地址(DIR)的寻址⽅式称为直接寻址⽅式,寻址的对象为:1内存数据存储器,指令中直接地址表⽰2、特殊功能的寄存器SFR,在指令中⽤寄存器名称表⽰寄存器间接寻址⽅式:是指将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数,MCS-51规定R0或R1为间接寻址寄存器,他可寻址内部RAM低地位的12个字节单元内容,还可以采⽤数据指针(DPTR)作为直接寻址寄存器,寻址外部数据存储器的64k字节空间,但不能⽤本寻址⽅式寻址特殊功能寄存器寄存器的间接寻址需要以寄存器符号的形式来表⽰,并且在寄存器名称前⾯加上间接寻址符号“@”。

例如指令MOV A,@RO就使⽤了寄存器间接寻址⽅式,这条指令的意义就是将地址指针RO指向内部数据存储单元中的数据送⼊累加器A中。

七种寻址方式

七种寻址方式
程序存储区 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
单片机的工作过程
例:
取指过程 执行过程
运算器 ①② 累加器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
若进位c1则以pc中的当前内容为基地址加上偏移量03h后所得到的结果为该转移指令的目的地址程序存储区401000031001c21005alu1002pc指令指令寄存器寄存器译码译码地址地址译码译码程序计数器程序计数器地址寄存器地址寄存器累加器累加器a运算器运算器外部地址总线外部地址总线abab外部地址总线外部地址总线abab数据缓冲器数据缓冲器外部数据总线外部数据总线外部数据总线外部数据总线dbdb寄存器区寄存器区外部控制总线外部控制总线cbcb外部控制总线外部控制总线cbcb内部控制信号内部控制信号时钟及清零时钟及清零取指过程取指过程mova09h74h09h

简述计算机指令的寻址方式

简述计算机指令的寻址方式

简述计算机指令的寻址方式
计算机指令的寻址方式是指指令通过哪种方式来访问和处理操作数。

常见的计算机指令的寻址方式包括以下几种:
1. 直接寻址:指令中给出了操作数的地址,直接通过该地址访问操作数。

2. 即时寻址:指令直接给出了操作数的值,而不必访问内存。

3. 寄存器寻址:指令中给出了一个寄存器的编号,操作数存储在该寄存器中。

4. 寄存器间接寻址:指令中给出了一个寄存器的编号,该寄存器中存储了操作数在内存中的地址,需要通过寄存器访问内存。

5. 相对寻址:指令中给出了与指令本身相对地址的偏移量,操作数的地址通过指令本身相对地址加上偏移量得到。

6. 基址寻址:指令中给出了一个基址寄存器的编号和一个偏移地址,操作数的地址通过基址寄存器和偏移地址结合得到。

7. 变址寻址:指令中给出了一个变址寄存器的编号和一个偏移地址,操作数的地址通过变址寄存器和偏移地址结合得到。

8. 相对寄存器寻址:指令中给出了一个相对寄存器的编号,操作数的地址通过相对寄存器和指令中的寄存器的值结合得到。

以上是常见的计算机指令的寻址方式,不同的计算机体系架构可能支持不同的寻址方式,寻址方式的选择取决于具体的指令集设计和计算机架构设计。

七种寻址方式

七种寻址方式

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

立即数可以是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.立即寻址:操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分于操作码一起存放在程序储存器中,可以立即得到并执行,不需要经过别的途径去寻找,在数前常冠以#作为前缀。

2.寄存器寻址:在指令选定的某寄存器中存放或读取操作数3,寄存器间接寻址:由指令指出某一寄存器的内容,常有@前缀。

4,直接寻址:指令中直接给出操作数所在的存储器地址。

5,变址寻址:基址寄存器加变址寄存器间接寻址,MOVC A,@A+DPTR.6,相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel而构成实际操作数地址的寻址方法,它用于访问程序存储器,常出现在相对转移指令中。

7,位寻址:在位操作指令中直接给出位操作数的地址可以对片内RAM中128个位和特殊功能寄存器SFR中的93个位进行寻址。

数据传送类指令:一、以累加器为目的操作数的指令MOV A, Rn ; (Rn)→A,n=0~7MOV A, @Ri ; ((Ri))→A,i=0,1MOV A, direct ;(dir ect)→AMOV A, #data ; #data→A二、以Rn为目的操作数的指令MOV Rn, A ; (A)→Rn, n=0~7MOV Rn, direct ;(direct)→Rn, n=0~7MOV Rn, #data ; #data→Rn, n=0~7三、以直接地址direct为目的操作数的指令MOV direct, A ; (A)→directMOV direct, Rn ;(Rn)→direct, n=0~7MOV direct1, direct2;MOV direct, @Ri ;((Ri))→directMOV direct, #data ; #data→direct四、以寄存器间接地址为目的操作数的指令MOV @Ri, A ;(A)→((Ri)),i=0,1MOV @Ri, direct ;(direct)→((Ri))MOV @Ri, #data ; #data→((Ri))五、16位数传送指令MOV DPTR, #data16 ; #data16→DPTR唯一的16位数据的传送指令,立即数的高8位送入DPH,立即数的低8位送入DPL。

七种寻址方式

七种寻址方式

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

九种寻址方式

九种寻址方式

九种寻址方式
1.直接寻址:通过指定存储单元的地址,直接读取或写入该单元的值。

2. 立即寻址:直接将常数或变量的值作为操作数,不需要通过地址寻址。

3. 间接寻址:通过指定存储单元内存储的地址,间接读取或写入该单元的值。

4. 寄存器寻址:通过指定寄存器存储的地址,读取或写入寄存器内的值。

5. 寄存器间接寻址:通过指定寄存器内存储的地址,间接读取或写入该地址指向的存储单元的值。

6. 基址寻址:通过使用一个基址寄存器加上一个偏移量来计算出实际的存储地址,读取或写入该地址处的值。

7. 变址寻址:使用一个变址寄存器加上一个偏移量来计算出实际的存储地址,读取或写入该地址处的值。

8. 相对寻址:使用相对于当前指令地址的偏移量来计算出实际的存储地址,读取或写入该地址处的值。

9. 堆栈寻址:使用栈顶指针寄存器来管理栈空间,读取或写入栈顶指针指向的存储单元的值。

- 1 -。

计算机指令寻址总结,寻址方式的判断总结.docx

计算机指令寻址总结,寻址方式的判断总结.docx

计算机指令寻址总结,寻址⽅式的判断总结.docx寻址⽅式的判断总结微机寻址⽅式总结MCS51: 每⼀种计算机都具有多种寻址⽅式。

寻址⽅式的多少是反映指令系统优劣的主要指标之⼀。

MCS51单⽚机有7种寻址⽅式。

1、⽴即寻址 2、直接寻址 3、REG寻址 4、REG间址 5、变址寻址 6、相对寻址 7、位寻址 ⽴即寻址: 1、操作数包含在指令字节中。

紧跟在操作码后⾯,存放于ROM中。

例:MOVA,#05H; 2、跟在指令操作码后⾯的数就是参加运算的数,称该操作数为⽴即数。

直接寻址: 1、在指令中直接给出操作数的地址,这种寻址⽅式就属于直接寻址⽅式。

在这种⽅式中,指令的操作数部分直接是操作数的地址。

例:MOVA,32H; 2、在MCS-51单⽚机指令系统中,直接寻址⽅式中可以访问2种存储器空间: (1)RAM的低128个字节单元。

(2)特殊功能寄存器。

特殊功能寄存器只能⽤直接寻址⽅式进⾏访问。

寄存器寻址: "寄存器寻址"是在指令中给出存放操作数的寄存器名称,被寻址寄存器中的内容就是操作数。

由于这种寻址是在CPU内部的访问,所以运算速度最快。

1、在该寻址⽅式中,参加操作的数存放在寄存器⾥。

例:MOVA,R7; 2、寄存器包括8个⼯作寄存器R0~R7,累加器A,寄存器B、数据指针DPTR。

寄存器间接寻址: "寄存器间接寻址"是以指令中指定寄存器的内容作为操作数的地址,再以该地址对应单元中的内容作为操作数。

为了区别于寄存器寻址,因此在寄存器间接寻址中的寄存器名称前加地址符号"@"。

在寄存器间接寻址中,当访问内部RAM低128B空间、 或者访问外部RAM的页内256B空间时,⽤当前组⼯作寄存器R0或R1作地址指针,⽽当访问外部RAM的整个64KB空间时,⽤DPTR作地址指针。

例如:MOVA,@R1 1、在这种寻址⽅式中,寄存器的内容为操作数的地址。

10种寻址方式的定义

10种寻址方式的定义

10种寻址方式的定义寻址方式是指计算机系统用来定位并访问存储单元或数据的方式。

以下是常见的一些寻址方式:1.直接寻址(Direct Addressing):直接使用给定地址或指针来访问内存中的数据或指令。

2.间接寻址(Indirect Addressing):使用存储在一个地址或寄存器中的地址来访问数据,间接地定位到实际的数据存储位置。

3.相对寻址(Relative Addressing):使用相对于当前指令或指针的地址偏移量来定位数据,常用于访问数组或其他数据结构的元素。

4.基址寻址(Base Addressing):使用一个基址寄存器和一个偏移量来计算地址,定位到存储单元。

5.索引寻址(Index Addressing):通过一个索引寄存器的值和一个基地址来计算地址,以定位到数组或表中的元素。

6.变址寻址(Displacement Addressing):通过将寄存器中的地址与立即数相加或相减来计算目标地址。

7.间接相对寻址(Indirect Relative Addressing):通过使用相对地址来访问存储单元,但是该地址指向的是另一个存储位置的地址。

8.堆栈寻址(Stack Addressing):使用栈指针来访问栈中的数据,通常用于函数调用和返回时保存和恢复数据。

9.寄存器寻址(Register Addressing):直接使用CPU内部的寄存器地址来访问数据或指令。

10.变量寻址(Variable Addressing):在编程语言中,通过使用变量名来访问和操作变量的值。

这些寻址方式在不同的计算机体系结构和编程范式中有着不同的应用和特点,用于在计算机系统中有效地定位和访问数据。

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等四个寄存器之⼀来指定,称这种寻址⽅式为寄存器间接寻址⽅式。

微机原理寻址方式实验总结

微机原理寻址方式实验总结

微机原理寻址方式实验总结嘿,朋友们!咱来聊聊微机原理的寻址方式实验。

这寻址方式啊,就像是在一个大宝藏库里找宝贝。

你得知道怎么找才能最快最准地拿到你想要的那个宝贝。

直接寻址,这就好比你直接知道宝贝放在哪个柜子的哪个格子里,你一伸手就能拿到。

比如说,地址就在指令里明明白白地写着,多干脆!
寄存器寻址呢,就好像宝贝在你身边的几个小箱子里,你不用到处跑,打开身边的小箱子就行。

寄存器里存着数据或者地址,直接用,方便得很!
间接寻址就有点绕啦。

这就像是有个中间人知道宝贝在哪,你得通过他才能找到。

比如通过寄存器间接找到地址,再去拿宝贝。

基址加变址寻址,这就像是有个基础的大柜子,然后再根据一些变化的因素去找到具体的小格子。

是不是有点复杂?但搞明白了,那可就厉害了!
相对寻址呢,就好比你知道宝贝在离你现在位置不远处,按照相对的距离就能找到。

在做这个实验的时候,我可是费了不少心思。

一开始,那真叫一个晕头转向,感觉这些寻址方式就像一群调皮的小精灵,到处乱跑,我怎么都抓不住。

可咱不能认输啊!我就一个一个慢慢琢磨,反复试验。

做着做着,突然就有了那种“柳暗花明又一村”的感觉。

你说,如果连这寻址方式都搞不定,以后怎么去驾驭更复杂的微机世界?就像盖房子,基础不打牢,能盖出结实的大楼吗?
所以啊,朋友们,好好掌握这些寻址方式,这可是通往微机原理深处的关键钥匙。

只有把这钥匙握在手里,咱们才能在微机的世界里畅行无阻,发现更多的精彩!。

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.通过虚拟内存寻址:通过虚拟内存映射表来寻址操作数。

干货!寻址方式详解

干货!寻址方式详解

干货!寻址方式详解分类:寻址方式从大的方面可以分成直接寻址和间接寻址。

直接寻址就像甲要和乙说话直接叫乙的名字就可以了,甲直接和乙建立联。

间接寻址就像甲要和乙说话,而乙在另外一个城市,甲就写了一封信通过邮递员送给乙,甲通过邮递员间接和乙建立联系,这就叫间接寻址。

间接寻址中指针就充当了邮递员的角色。

直接寻址分为:绝对地址寻址,符号寻址间接寻址分为:存储器间接寻址,寄存器间接寻址。

一、直接寻址直接寻址是最简单的寻址方法,也是编程中最常用的寻址方式。

①绝对地址寻址绝对地址寻址就是直接调用要使用的地址示例:I0.0 Q1.0 MW0②符号寻址符号寻址就是通过符号表中的绝对地址的命名进行寻址示例:用下图中的I_Motor_Start进行寻址。

二、间接寻址间接寻址是比较复杂的寻址方式,也是我们这里重点讲解的地方,间接寻址需重点理解指针的概念。

指针:理解指针主要需要理解指针的两个特性。

A.存储性:存储性指的是指针也是一段存储空间,它的存储内容是地址。

B.指向性:因为指针存放的内容是地址,那么指针中存放的是哪一个地址,我们就说指针指向了这个地址所对应的存储空间,这就是指针的指向性。

A.存储器间接寻址【A1】16位指针寻址:1)、16位指针存储空间16位指针存储空间是16位,2个字节,通过这2个字节的空间来存放变量的地址。

2)、16位指针寻址范围16位指针只能对计时器(T),计数器(C),数据块(DB,DI)的号,程序块(FB,FC)的号进行寻址,也就是这2个字节的存储空间中只能存放计时器的编号,计数器的编号,数据块的编号,程序块的编号。

3)、16位指针寻址表示格式16位指针寻址表示格式为:区域标示符[16位地址指针] 示例:DB [MW0] //表示对DB块进行寻址,MW0中如果存储的是1,那么该寻址结果为DB1,也就是通过该指令找到了DB1数据块。

T [MW2] //表示对计时器进行寻址,MW2中如果存放的是2,那么该寻址结果为T2,也就是通过该指令找到了计时器T2。

寻址方式总结

寻址方式总结

1.立即数寻址:操作数的数值紧跟在操作码之后,直接在指令中出现。

注意:立即数不能直接作为目的操作数。

2.寄存器寻址:操作数在寄存器中,指令的操作码之后给出该寄存器的编号或名称。

注意:⑴通用寄存器和段寄存器均可用;⑵专用寄存器——IP、FLAG不可用。

3.直接寻址方式:操作数在存储单元中,指令的操作码之后给出该存储单元的有效地址EA。

注意:(1)EA有两种形式:数值形式和符号地址形式,例如:MOV AX ,[100H] ; 数值地址必须加方括号MOV AX ,X ; 符号地址X必须事先定义(符号地址X与[X]一样)(2)在默认情况下,数据在DS段中,可使用段超越前缀的方式改变默认段例如:MOV AX ,ES:[100H]4.寄存器间接寻址方式:操作数在存储单元中,指令的操作码之后给出存放该单元有效地址的寄存器编码或名称注意:(1)使用该寻址方式的寄存器称为间址寄存器:BX,BP,SI,DI;(2)默认情况下,数据在DS段或SS段,由间址寄存器下决定;使用DS : BX,SI,DI使用SS : BP5.寄存器相对寻址方式:与寄存器间接寻址方式的不同之处在于,操作数的偏移指令EA为指令中寄存器的内容加了一个位移量X。

汇编格式:X[R]6.基址变址寻址方式:操作数在存储单元中,操作数的有效地址为指令中指定的基址寄存器(BX、BP)的值与变址寄存器(SI、DI)的值之和。

汇编格式:[BR][IR]注意:(1)默认情况下,数据在DS段或SS段,由基址寄存器决定DS段:BXSS段:BP7.相对基址变址寻址方式:操作数在存数单元中,操作数的有效地址为指令中指定的基址寄存器的值、变址寄存器的值和位移量DISP三者之和。

总结:(1)指令中只有间址寄存器可以出现在方括号里,并且只能是一个或两个间址寄存器,且不能同时为基址寄存器或变址寄存器;(2)有效地址应为16位,多余16位按64K取模;例如:MOV AX , [BX+0FFFFH],若(BX)=100H,则EA=0FFFFH+100H=100FFH (mod 64K)= 0FFH。

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中。

【计算机组成原理】寻址方式

【计算机组成原理】寻址方式

【计算机组成原理】寻址⽅式寻址⽅式指根据地址码形成操作数地址或指令地址的⽅法。

实质—地址编码⽅式的逆,即地址=f(地址码)⽬标—缩短地址码长度,⽅便(编译程序)形成地址码指令中的MEM地址:有效地址(EA)——指令中形成的存储单元地址(逻辑地址,注意不是物理地址);{逻辑地址:程序在存储器中的地址;物理地址:程序在主存中的地址}形式地址(A)——地址码中给出的地址;⼀、指令寻址⽅式顺序寻址:EA=(PC)+“1”;由于顺序寻址的地址形成与当前指令⽆关,且只有⼀种,故通常⽤隐含寻址⽅式表⽰,指令字中没有指令地址码;跳跃寻址:PC=对IR的计算结果,下条指令地址由当前指令产⽣;跳跃寻址与当前指令有关,且可能有多种,故通常显⽰地⽤地址码表⽰;下条指令形成时间:⼆、数据寻址⽅式寻址⽅式识别:译码地址码格式:按照OPD存放位置的不同,⼤致有以下七种寻址⽅式(以单地址指令为例):1、OPD存放在REG中i)⽴即寻址⽅式OPD存放在指令REG中,地址参数为OPD本⾝;ii)寄存器寻址⽅式OPD存放在数据REG中,地址参数为数据REG编号;2、OPD存放在MEM中iii)直接寻址⽅式OPD存放在MEM中,地址参数为OPD的EA;iv)间接寻址⽅式OPD存放在MEM中,地址参数为存放OPD的EA的EA;因需要多访存⼀次,故使⽤较少,是⽤于**p的情况v)寄存器间接寻址⽅式OPD存放在MEM中,地址参数为存放EA的地址寄存器编号;vi)变址寻址⽅式OPD存放在MEM中,地址参数为变址REG编号以及形式地址(基准地址);特点:适⽤于数据块的访存(例如数组array[])vii)基址寻址⽅式OPD存放在MEM中,地址参数为基址REG编号以及形式地址(偏移量);特点:适⽤于程序段的管理;寄存器的常见组织:(1)变址寄存器,基址寄存器常为地址寄存器的⼦集;(2)数据寄存器与地址寄存器常混⽤,称作通⽤寄存器(GPR)viii)相对寻址(只有指令能使⽤该种寻址⽅式)指令放在MEM中,地址参数为形式地址(偏移量),基准地址隐含在PC中;注意:A为有符号数,因为指令进⾏跳跃寻址时可以往前跳跃;通常基址寻址与变址寻址的A为⽆符号数(由ISA指定)隐含寻址⽅式:⽆地址码,地址形成⽅式由操作码隐含指明⽐如OPD恒为定值,R0<-(R0)+1中的1;(可变常数不能隐含,采⽤⽴即寻址⽅式)⼜或OPD在栈顶或者固定的REG中,例如返回指令,顺序寻址等。

数据的7种寻址方式

数据的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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相对基址变址寻址 MOV AX , [基址寄存器 + 变址寄存器 + 偏移量]
与转移地址有关的寻址方式(CALL指令也可用下列四种中任何一种寻址):
寻址方式 格式 转移的有效地址
段内直接寻址 JMP SHORT 标号 IP=标号, CS值不变
段内间接寻址 JMP WORD PTR 标号[基/变址寄存器] IP=(EA), CS值不变
概念:
1.指令集:cpu能够执行的指令的集合。
2.指令:cpu所能够执行的操作。
3.操作数:参加指令运算的数据。
4.寻址方式:在指令中得到操作数的方式。
与数据有关的寻
直接寻址 MOV AX , [常数] ;加上中括号 或 MOV AX , 变量名或标号
3.寄存器间接相对寻址:偏移地址是bx,bp,si,di中的内容再与一个8bit或16bit 的位移量之和。
例5:mov ax,[bx]+12h
mov ax,[si]+5678h
mov ax,[bp]+1234h
在这里[bx]+12h,[si]+5678h,[bp]+1234h都是寄存器间接相对寻址。12h是8bit位移量,1234h和5678h是 16bit位移量。若使用bx,si,di则默认段寄存器是ds,若使用bp则默认段寄存器是ss,并且允许段跨越。
例1:mov ax,1234h
mov [bx],5678h
在这里1234h和5678h都是立即操作数,在指令当中直接给出。
2)寄存器寻址方式:是针对寄存器操作数的寻址方式,它在寄存器中我们就用这中方式来找到它。
例2:mov bx,ax
mov bp,[si]
在这里ax,bx,ds都算是寄存器寻址,例1中的ax也是寄存器寻址方式。
2.寄存器间接寻址:不是在指令中直接给出数据在内存中的偏移地址,而是把偏移地址放到了寄存器中。
例4:mov ax,[bx]
这里[bx]就是寄存器间接寻址,bx中应方入段内偏移地址。其中:若使用bx,si,di默认段地址为ds,若使用bp则默认段地址为ss,并且允许段跨越,也就是加段前缀符。注意:在寄存器两边加 [] 以与寄存器寻址区别。
1)数据操作数:全都是在指令当中参加操作的数据。
1.立即操作数:它在指令中直接给出。
2.寄存器操作数:它被放到寄存器中。
3.存储器操作数:当然在存储器也就是内存中。
4.i/o操作数:它在你给出的i/o端口中。
2)转移地址操作数:在指令当中不是参加运算或被处理的数据了,而是转移地址。
还可以按照下面分类方式:
3)存储器寻址方式:针对在内存中的数据(存储器操作数)都用这种方式来寻找,一共有5种(这是我自己的说法,便于记忆)。
不得不提及以下的概念:由于8086/8088的字长是16bit,能够直接寻址2的16次方也就是64kb,而地址总线是20bit,能够直接寻址2的 20次方也就是1M空间,所以把内存分为若干个段,每个段最小16byte(被称为小节),最大64kb,它们之间可以相互重叠,这样一来内存就被分成以 16byte为单元的64k小节,cpu就以1小节为单位寻址:在段寄存器中给出段地址(16bit),在指令当中给出段内偏移地址(16bit),然后把段地址左移4bit再与偏移地址求和就得到数据在内存当中的实际物理地址了,因而可以找到数据。
2)段内间接转移:cs的内容不变,而ip的内容放在寄存器中或者存储器中给出。
例10:jmp bx
jmp word ptr [bx]+1234h
这种寻址方式是在寄存器或存储器中找到要转移到的地址,而地址是16bit的,因而寄存器必须为16bit,如:bx,我们用word ptr来指定存储器单元也是16bit的。注意:它是间接的给出,只能使用类似于数据操作数中的除立即寻址以外的6种寻址方式(就在上面)。
1)源操作数src
2)目的操作数dst
源操作数都是指令当中的第2个操作数,在执行完指令后操作数不变。而目的操作数是指令当中的第1个操作数,在执行完操作指令后被新的数据替代。
我们就围绕这几种操作数,也就是操作数所在的位置展开讨论。
数据操作数,它分3大类共7种。
1)立即数寻址方式:是针对立即操作数的寻址方式。在指令当中直接给出,它根本就不用寻址。
寄存器寻址 MOV AX , 通用寄存器
寄存器间接寻址 MOV AX , [(BX,BP,SI,DI)中的一个] ;以下四行均需加上中括号
寄存器相对寻址 MOV AX , [(BX,BP,SI,DI)中的一个 + 偏移量]
基址变址寻址 MOV AX , [基址寄存器 + 变址寄存器]
段间直接寻址 MP FAR PTR 标号 IP=标号的偏移地址,CS=标号的段对址
段间间接寻址 JMP DWORD PTR 标号[基/变址寄存器] IP=(EA) , CS=(EA-2)
现在就重点讨论寻址方式,说白了也就是cpu怎么样从指令中得到操作数的问题。另外再强调一点操作数还分种类:
1.存储器直接寻址方式:在指令当中以 [地址] 的方式直接给出数据所在内存段的偏移地址。
例3:mov ax,es:[1234h]
mov dx,VALUE
mov dx,[VALUE]
在这里[1234h]和VALUE就是在指令中直接给出的数据所在内存段的偏移地址(16bit)。
VALUE 是符号地址,是用伪指令来定义的,它代表一个在内存中的数据(也就是它的名字)。es:是段前缀符,用来指出段地址,在这之前应该将段地址添入段中,本例中是es,默认是ds,也就是不需给出。应该注意 [地址] 与立即寻址的区别,在直接给出的数据两边加 [] 表示存储器直接寻址,以区别立即寻址。另外 VALUE=[VALUE]。
下面是转移地址操作数的寻址方式:
1)段内直接转移
1.段内直接短转移:cs(代码段)内容不变,而ip(指令指针寄存器)内容由当前ip内容+(-127~127),在指令中直接给出。
例8:jmp short SHORT_NEW_ADDR
其中,short是段内短转移的操作符,用以指出是转移到当前位置前后不超过±127字节的地方。而NEW_ADDR是要转移到的符号地址,它的位置应该在当前ip指针所在偏移地址不超过
±127的地方。否则语法出错。
2.段内直接近转移:cs内容不变,而ip内容由当前ip内容+(-32767~32767),在指令中直接给出。
例9:jmp near ptr NEAR_NEW_ADDR
其中near ptr是段内近转移的操作符,用以指出转移到当前位置前后不超过±32767的地方。NEAR_NEW_ADDR是要转移到的符号地址。
4.基址变址寻址:偏移地址是一个基址寄存器和一个变址寄存器内容的和,既:bx或bp中的一个与si或di中的一个求和而得到。
例6:mov ax,[bx+si]
mov ax,[bp+di]
上面[bx+si]和[bp+di]都是基址变址寻址。若使用bx做基址寄存器则默认段地址为ds,若使用bp为基址寄存器则默认段为ss,允许段跨越。
4)段间间接寻址:cs和ip的内容全变化,由指令当中给出的一个4字节连续存储单元,其中低2字节送入ip作为偏移地址,高2字节送入cs作为段地址。
例12:jmp dword ptr [bx][si]+1234h
jmp dword ptr [1234h]
jmp dword ptr [si]
dword ptr是双字(4个字节连续存储单元)操作符,用来指出下面的存储单元是4个字节的。由于它是4个字节的,所以只能使用类似于数据操作数中的存储器寻址方式(共5 种,还记得吗?)。
5.基址变址相对寻址:偏移量是一个基址寄存器一个变址寄存器只和再与一个8bit或一个16bit位移量只和得到。
例7:mov ax,[bx+si]+12h
mov ax,[bp+di]+1234h
[bx+si]+12h和[bp+di]+1234h就是基址变址相对寻址。若使用bx做基址寄存器则默认段是ds,若使用bp做基址寄存器则默认段为 ss。允许段跨越。
3)段间直接寻址:cs和ip的内容全都变化,由指令当中直接给出要转移到的某一个段内的某一个偏移地址处。
例11:jmp 1234h:5678h
jmp far ptr NEW_ADDR
1234h 送入cs中作为新的段地址,5678h送入ip中作为新的偏移地址。far ptr是段间直接转移操作符,NEW_ADDR是另外一个段内的偏移地址,在这个指令中把NEW_ADDR的段地址送入cs(不用你给出),把它的段内偏移地址送入ip中作为新的偏移地址。
另外作为特殊的寻址方式还有三种:I/O寻址,串寻址,隐含寻址。它们都分别针对I/O指令,串操作指令以及无操作数的指令,而且都比较简单,读者自行总结。
相关文档
最新文档