存储器寻址方式
- 格式:doc
- 大小:50.50 KB
- 文档页数:3
51 单片机片内256 字节数据存储器的结构划分以及对应的寻址方式1. 引言1.1 概述在现代电子技术的快速发展下,单片机已经成为各种电子设备中必不可少的核心控制部件之一。
而51单片机作为最常用的单片机之一,其内部结构和功能一直备受关注。
本文将主要探讨51单片机中的一个重要组成部分——256字节数据存储器,介绍其结构划分以及对应的寻址方式。
1.2 文章结构本文总共包含五个部分。
首先是引言部分,介绍文章的概述、结构和目的。
第二部分将详细阐述51单片机中256字节数据存储器的结构划分,强调其在整个单片机系统中的重要性。
第三部分将着重介绍对应于256字节数据存储器的寻址方式,包括直接寻址方式、间接寻址方式和寄存器间接寻址方式等。
第四部分将通过具体实例来探讨256字节数据存储器在不同应用场景下的使用方法和优化方案。
最后一部分是结论和展望,在对前文进行总结基础上,提出未来研究方向和发展建议。
1.3 目的本文旨在深入探讨51单片机中256字节数据存储器的结构划分和对应的寻址方式,通过具体实例的分析,揭示其在不同应用场景下的优势和应用方法。
希望通过本文的研究和讨论,读者能够更好地理解和应用256字节数据存储器,为单片机系统设计提供有益的参考和指导。
2. 51单片机片内256字节数据存储器的结构划分2.1 片内数据存储器的重要性在嵌入式系统设计中,片内数据存储器是非常重要的组成部分。
它用于存储程序指令、变量数据以及其他运行时需要使用的临时数据。
片内数据存储器的规模和结构会直接影响到系统性能和资源利用率。
2.2 51单片机中的256字节数据存储器概述51单片机是一款广泛应用于各种电子设备中的经典单片机。
其中包含了一个256字节大小的片内数据存储器,用于存储程序指令和变量数据。
这256字节数据存储器可以被划分为不同的区域,每个区域有不同的功能和使用方式。
下面将介绍这些区域以及其对应功能。
2.3 256字节数据存储器的物理结构划分在51单片机中,256字节数据存储器可以被划分为以下几个区域:1) SFR(特殊功能寄存器)区域:这个区域占据了部分地址空间,用于保存各种特殊功能寄存器的值。
存储器寻址方式存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。
在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。
8088的存储器空间是分段管理的。
程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA)1.直接寻址在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。
其默认的段地址在DS段寄存器中,可以采用段超越前缀。
例将数据段中偏移地址2000H处的内存数据送至AX寄存器。
MOV AX, [2000H]该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。
如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。
MOV AX, [2000H];指令代码:A1 00 20例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。
MOV AX, ES:[2000H]; 指令代码:26 A1 00 20变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。
变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。
假设它在数据段偏移地址是0010H 。
例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。
MOV AX, WV AR;指令功能: 上述指令实质就是如下指令: AX WV ARAX DS :[0010H]MOV AX, [0010H]; 指令代码:代码:26 A1 00 20AX=1234H堆栈操作指令堆栈是一个“先进后出”的主存区域,使用SS段寄存器记录段地址;堆栈只有一个出口,即当前站顶,用堆栈指针寄存器SP指定堆栈站顶的偏移地址。
七种寻址⽅式在存储器中,操作数和指令字写⼊或读出的⽅式,有地址指定的⽅式,相联存储⽅式和堆栈存取⽅式,⼏乎所有的计算机,在内存中都采⽤地址指定⽅式,当采⽤地址指定⽅式的时候,形成操作数或指令地址的⽅式称为寻址⽅式,寻址⽅式分为两类,即为指令寻址⽅式和数据寻址⽅式,在传统⽅式设计的计算机中,内存中指令的寻址与数据的寻址是交替进⾏的⽴即数寻址⽅式:将操作数放在操作码的后⾯。
⼀起放在指令代码段中,在程序运⾏的过程中,程序直接调⽤该操作数,⽽不⽤到其他的地址的单元中去取得相应的操作数。
上述中的操作数也被称为⽴即数。
可以有不同的进制寄存器寻址⽅式:指令所要的操作数已经存储在某个寄存器中,或把⽬标操作数存⼊寄存器中,把在指令中指出所⽤的寄存器(寄存器助忆符)的寻址⽅式称为寄存器寻址⽅式寄存器寻址⽅式是⼀种简单快捷的寻址⽅式,源和⽬的操作数都可以是寄存器直接寻址⽅式:在指令格式的地址字段中直接指出操作数在内存中的地址id。
⼀般情况下数据放在数据段中,所以物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么操作数可存放在其他段直接寻址⽅式常⽤于处理内存单元的数据,操作数是内存变量的值,指令中直接给出操作数地址(DIR)的寻址⽅式称为直接寻址⽅式,寻址的对象为:1内存数据存储器,指令中直接地址表⽰2、特殊功能的寄存器SFR,在指令中⽤寄存器名称表⽰寄存器间接寻址⽅式:是指将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数,MCS-51规定R0或R1为间接寻址寄存器,他可寻址内部RAM低地位的12个字节单元内容,还可以采⽤数据指针(DPTR)作为直接寻址寄存器,寻址外部数据存储器的64k字节空间,但不能⽤本寻址⽅式寻址特殊功能寄存器寄存器的间接寻址需要以寄存器符号的形式来表⽰,并且在寄存器名称前⾯加上间接寻址符号“@”。
例如指令MOV A,@RO就使⽤了寄存器间接寻址⽅式,这条指令的意义就是将地址指针RO指向内部数据存储单元中的数据送⼊累加器A中。
计算机组成原理寻址方式例题
以下是一个计算机组成原理中的寻址方式的例题:
假设一个计算机系统的每个字长为16位,存储器共有64K个字,采用的寻址方式是直接寻址,并且以字节为单位寻址。
请回答以下问题:
1. 存储器最大容量是多少字节?
答:存储器最大容量 = 字长 ×存储器容量 = 16位 × 64K字 = 1M字节。
2. 地址总线应该有多少位才能寻址最大容量的存储器?
答:地址总线的位数 = log2(存储器最大容量) = log2(1M字节) = log2(2^20字节) = 20位。
3. 如果存储器容量增加到256K字节,地址总线的位数需要调整吗?
答:是的,地址总线的位数需要调整。
原来的地址总线位数是20位,这只能寻址2^20 = 1M字节的存储器。
如果存储器容量增加到256K字节,需要的地址总线位数为 log2(256K字节) = log2(2^18字节) = 18位。
4. 通过直接寻址能够寻址的最大存储器容量是多少字节?
答:通过直接寻址能够寻址的最大存储器容量 = 2^(地址总线位数) = 2^20 = 1M字节。
七种寻址方式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。
DSP寻址方式DSP(数字信号处理器)是一种专门用于数字信号处理的微处理器,其寻址方式是指DSP芯片对于内部存储器的寻址方式。
DSP寻址方式是DSP系统中非常重要的一部分,它决定了DSP芯片如何有效地访问和处理存储在内部存储器中的数据。
1. 直接寻址方式直接寻址方式是DSP中最简单的寻址方式之一。
在直接寻址方式下,指令中给出的地址直接用于指定待访问的存储单元。
这种寻址方式适用于数据存储单元数量较少且地址连续的情况。
例如,当使用直接寻址方式时,指令可以直接指定访问DSP内部存储器中的某个特定地址,无需进行地址转换或计算。
2. 间接寻址方式间接寻址方式是另一种常用的DSP寻址方式。
在间接寻址方式下,指令中给出的地址并不直接用于指定待访问的存储单元,而是用于指定一个包含存储单元地址的寄存器。
通过间接寻址方式,可以实现更加灵活的地址访问,尤其适用于需要频繁对不同存储单元进行访问的情况。
3. 基址寻址方式基址寻址方式是一种常用的寻址方式,它结合了直接寻址方式和间接寻址方式的优点。
在基址寻址方式下,指令中给出的地址作为“基址”,并结合一个偏移量用于计算访问目标存储单元的实际地址。
通过基址寻址方式,可以实现对存储单元的相对寻址,而无需显式地指定存储单元的具体地址。
4. 变址寻址方式变址寻址方式是一种基于寄存器的寻址方式,它通过使用一个特殊的寄存器,称为“变址寄存器”来实现寻址。
变址寻址方式可以对存储单元的地址进行动态调整,从而实现对存储单元的高效访问。
通过改变变址寄存器中的值,可以改变访问目标存储单元的地址,从而灵活地处理不同的数据访问需求。
5. 直接/间接寻址方式直接/间接寻址方式是一种结合了直接寻址方式和间接寻地址方式的寻址方式。
在直接/间接寻址方式下,指令中既给出了一个直接的地址用于直接寻址,又给出了一个指示寄存器的地址用于间接寻址。
通过使用直接/间接寻址方式,可以在同时满足直接访问和间接访问需求的情况下,提高DSP系统的灵活性和效率。
数据寻址方式介绍1.直接寻址:直接寻址是最简单的寻址方式,它是通过给定一个地址来访问数据。
在这种寻址方式中,数据的地址就是其在计算机存储器中的实际物理地址。
这种寻址方式的优点是实现简单,访问速度快,但缺点是地址空间受限,不适用于大型的存储器系统。
2.间接寻址:间接寻址是通过一个地址来访问另一个存储区域,而在这个存储区域中包含着最终需要访问的数据地址。
这种寻址方式的优点是可以将多个数据存放在同一个存储区域中,有效地利用存储空间。
它也提供了更灵活的寻址方式,可以通过更改间接地址来访问不同的数据。
缺点是增加了访问数据的时间,因为需要多次访问存储器。
3.寄存器寻址:寄存器寻址是直接将数据存储在处理器的寄存器中,然后通过寄存器来访问数据。
这种寻址方式的优点是访问速度非常快,因为数据直接存储在处理器中。
缺点是寄存器数量有限,无法存储大量的数据。
4.堆栈寻址:堆栈寻址是通过使用一个堆栈来存储数据,并通过堆栈指针来定位需要访问的数据。
在这种寻址方式中,栈指针会向栈的一个方向移动,将数据压入堆栈或弹出堆栈。
堆栈寻址的优点是可以灵活地向堆栈中添加或删除数据,适用于函数调用和中断处理。
缺点是访问数据的时间会较长,因为需要不断地移动栈指针。
5.直接偏移寻址:直接偏移寻址是通过给定一个基础地址和一个偏移量来访问数据。
在这种寻址方式中,基础地址是数据的起始地址,偏移量是相对于基础地址的位移距离。
通过将基础地址和偏移量相加,可以得到需要访问的数据地址。
这种寻址方式的优点是能够有效地使用地址空间,减少了寻址的时间。
缺点是需要额外的操作来计算数据的地址。
6.寄存器间接寻址:寄存器间接寻址是通过使用一个寄存器中存储的地址来访问数据。
在这种寻址方式中,寄存器中存储的地址就是需要访问的数据的地址。
这种寻址方式的优点是访问速度快,因为数据的地址存储在寄存器中。
缺点是寄存器数量有限,无法存储大量的地址。
7.基址寻址:基址寻址是通过给定一个基址和一个偏移量来访问数据。
西门子200PLC存储器的数据类型与寻址方式一.存储器的数据类型与寻址方式1.位、字节、字和双字二进制数1位(bit)只有0和1两种不同的取值,可用来表示开关量(或称数字量)的两种不同的状态:通和断。
8位二进制数组成1个字节(Byte),第0位最低位(LSB)、第7位为最高位(MSB)。
两个字节组成1字(Word)。
两个字组成1双字(D表示双字)。
数据的位数与取值范围B(字节),8位值:无符号数十进制:0~255;十六进制:0~FFW(字),16位值:无符号数十进制:0~65535;十六进制:0~FFFFD(双字),32位值:无符号数十进制:0~4294967295;十六进制:0~FFFFFFFF2.数据的存取方式位存储单元的地址由字节地址和位地址组成,如:I3.2中的I表示区域标识符input,字节地址为3,位地址为2。
这种存取方式称为“字节.位”寻址方式。
输入字节IB3(B是Byte的缩写)由I3.0~I3.7这8位组成。
相邻的两个字节组成一个字,VW100表示由VB100和VB101组成的1个字,V表示区域标识符;W表示字(Word);100表示起始字节的地址。
VD100表示由VB100~VB103组成的双字,V为区域标识符;D 表示存取双字(DoubleWord);100为起始字节的地址。
二.存储取的寻址(I、Q、V、M、SM、L均可按位、字节、字和双字来存取)1.输入映像寄存器(I)寻址输入映像寄存器的标识符为I(I0.0~I15.7),在每个扫期描周的开始,CP对输入点进行采样,并将采样值存入映像寄存器中。
2.输出映像寄存器(Q)寻址输出映像寄存器的标识符为Q(Q0.0~Q15.7),在扫期描周的末尾,CPU输出映像寄存器数据传输给输出模块,再由后者驱动外部负载。
3.量存储器(V)寻址在程序执行的过程中存放中间结果,或用来保存与工序或任务有关的其他数据。
4.位存储区(M)区寻址内部存储器标志位(M0.0~M31.7)用来保存控制继电器的中间操作状态或其他控制信息。
第二章实模式下存储器组织与寻址方式第二章介绍了实模式下存储器的组织和寻址方式。
实模式是指x86架构中的一种工作模式,它是早期x86处理器的工作模式,在这种模式下,处理器可以访问1MB的内存。
首先,我们来了解一下实模式下存储器的组织。
实模式下的内存可以被分为三个区域:低速RAM区、BIOS区和扩展RAM区。
低速RAM区是指位于物理地址0-640KB的内存区域,也被称为低速RAM或常规内存。
这个区域的内存可以直接被处理器访问,是程序执行和数据传输的主要存储区域。
BIOS区是指位于物理地址640KB-1MB的内存区域,在实模式下,这个区域被用于存储计算机的基本输入输出系统(BIOS)的代码和数据。
BIOS是计算机的启动程序,负责初始化计算机硬件和完成一些基本的输入输出操作。
扩展RAM区是指物理地址从1MB开始的内存区域,在实模式下,这个区域的内存无法直接被处理器访问。
如果程序需要访问扩展RAM区的内存,就需要使用段机制,并通过指令将段寄存器中的选择子设置为相应的值,以转换成物理地址。
接下来,我们来了解实模式下的存储器寻址方式。
实模式下的存储器寻址方式是通过段地址和偏移地址实现的。
段地址是由段寄存器提供的,段寄存器包括代码段寄存器CS、数据段寄存器DS、栈段寄存器SS和附加段寄存器ES。
段地址左移4位,然后加上偏移地址,就得到了物理地址。
偏移地址是由指令中的偏移部分提供的,偏移地址指定了段内的偏移量。
如果一个指令使用了一些段寄存器,那么这个段寄存器所指向的段内的偏移地址就会被用到。
实模式下的存储器地址是一个20位的物理地址,这个地址可以被分为两个部分:段地址和偏移地址。
通过段地址和偏移地址的组合,可以寻址1MB的内存空间。
实模式下的存储器寻址方式相对简单,但也存在一些问题,比如内存空间的限制、内存管理的不便等。
为了解决这些问题,后来的x86处理器引入了保护模式,提供了更灵活和强大的存储器管理和寻址方式。
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等四个寄存器之⼀来指定,称这种寻址⽅式为寄存器间接寻址⽅式。
mips的寻址方式MIPS寻址方式MIPS是一种基于RISC(Reduced Instruction Set Computing)架构的处理器,其指令集非常简洁,只有40条左右的指令,但是每条指令都非常强大。
MIPS的寻址方式也非常简单,只有三种:立即数寻址、寄存器寻址和存储器寻址。
立即数寻址立即数寻址是指将一个常数作为操作数,这个常数可以是一个整数、一个浮点数或者一个字符。
在MIPS中,立即数寻址的指令格式为:opcode rt, rs, immediate其中opcode是操作码,rt是目标寄存器,rs是源寄存器,immediate是立即数。
例如,下面的指令将立即数5加到寄存器$t0中:addi $t0, $zero, 5这条指令的操作码是addi,目标寄存器是$t0,源寄存器是$zero ($zero是一个特殊的寄存器,其值始终为0),立即数是5。
执行这条指令后,$t0的值将变为5。
寄存器寻址寄存器寻址是指将一个寄存器的值作为操作数。
在MIPS中,寄存器寻址的指令格式为:opcode rd, rs, rt其中opcode是操作码,rd是目标寄存器,rs和rt是源寄存器。
例如,下面的指令将寄存器$t0和$t1的值相加,并将结果存储到寄存器$t2中:add $t2, $t0, $t1这条指令的操作码是add,目标寄存器是$t2,源寄存器是$t0和$t1。
执行这条指令后,$t2的值将变为$t0和$t1的和。
存储器寻址存储器寻址是指将一个存储器地址作为操作数。
在MIPS中,存储器寻址的指令格式为:opcode rt, offset(rs)其中opcode是操作码,rt是目标寄存器,rs是基址寄存器,offset是偏移量。
例如,下面的指令将寄存器$t0的值存储到地址为0x100的存储器单元中:sw $t0, 0x100($zero)这条指令的操作码是sw,目标寄存器是$t0,基址寄存器是$zero,偏移量是0x100。
7 种寻址方式及其基本指令寻址方式是计算机中指令执行时,计算需要访问内存地址的方式。
不同的寻址方式决定了如何计算出内存地址。
下面将介绍七种常见的寻址方式及其基本指令。
1.直接寻址:直接寻址是最简单的寻址方式,指令中直接给出了要访问的内存地址。
指令的操作数直接指向了存储器中的某个地址。
例如,"LOAD A, 100"表示从地址100加载数据到寄存器A中。
2.立即寻址:立即寻址方式是将常数直接作为指令操作数使用。
指令中给出了要操作的具体数值,而不是内存地址。
例如,"ADD A, 10"表示将寄存器A的值加上10。
3.间接寻址:间接寻址是通过间接寻址寄存器来确定要访问的内存地址。
指令中给出了要操作的寄存器,而不是具体的内存地址。
例如,"LOAD A,(B)"表示从存储器中加载B寄存器中的值作为内存地址,并将该地址处的内容放入寄存器A中。
4.寄存器寻址:寄存器寻址方式是将寄存器作为指令的操作数。
指令中给出了要操作的寄存器,而不是具体的内存地址或数值。
例如,"ADD A, B"表示将寄存器B的值加上寄存器A的值。
5.寄存器间接寻址:寄存器间接寻址方式是通过寄存器中的地址来确定要访问的内存地址。
指令中给出了要操作的寄存器,该寄存器中存储了内存地址。
例如,"LOAD A, (B)"表示从存储器中加载B寄存器中存储的内存地址处的内容,并将该内容放入寄存器A中。
6.相对寻址:相对寻址是通过指令中的相对偏移量来计算要访问的内存地址。
指令中给出了指令执行时相对于当前指令地址的偏移量。
例如,"JUMP 10"表示程序跳转到当前指令地址加上10的位置。
7.基址寻址:基址寻址方式是通过基址寄存器中存储的基地址加上一个偏移量来确定要访问的内存地址。
指令中给出了基址寄存器和偏移量。
例如,"LOAD A, (B+10)"表示从存储器中加载B寄存器中存储的基地址加上10的偏移量处的内容,并将该内容放入寄存器A中。
存储器寻址方式
存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。
在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。
8088的存储器空间是分段管理的。
程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA)
1.直接寻址
在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。
其默认的段地址在DS段寄存器中,可以采用段超越前缀。
例将数据段中偏移地址2000H处的内存数据送至AX寄存器。
MOV AX, [2000H]
该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。
如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。
MOV AX, [2000H];指令代码:A1 00 20
例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。
MOV AX, ES:[2000H]; 指令代码:26 A1 00 20
变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。
变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如
WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。
假设它在数据段偏移地址是0010H 。
例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。
MOV AX, WV AR;
指令功能: 上述指令实质就是如下指令: AX WV AR
AX DS :[0010H]
MOV AX, [0010H]; 指令代码:代码:26 A1 00 20
AX=1234H
堆栈操作指令
堆栈是一个“先进后出”的主存区域,使用SS段寄存器记录段地址;堆栈只有一个出口,即当前站顶,用堆栈指针寄存器SP指定堆栈站顶的偏移地址。
堆栈操作的对象只能是字操作。
进站时,SP向低地址移动两个字节单元以指向新的栈顶,然后数据的低字节于存放低地址,高字节存放于高地址。
出栈时,字从栈顶弹出,低地址字节送低字节,高地址字节送高地址,SP相应向高地址移动两个字节单元。
MOV ax, 7812H
PUSH ax; 将AX内容推入堆栈(如图1)
POP AX;将当前堆栈内容弹给AX(如图2)
PUSH [2000H]
POP WV AR
堆栈段是程序不可或缺的一个内存区。
堆栈可用来临时存放数据,以便随时恢复它们。
堆栈常用于寄存器的保护以及子程序间的参数传递。