首页 理论教育 寻址方式及其特点在汇编语言中的应用

寻址方式及其特点在汇编语言中的应用

时间:2023-06-26 理论教育 版权反馈
【摘要】:图7-21中的各条指令操作数均采用了直接寻址方式。图7-22所示为16位指针存储器间接寻址方式。图7-26 跨区域寄存器指针应用案例图7-27 变量在线监控跨区域寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的指针包含存储区信息。

寻址方式及其特点在汇编语言中的应用

所谓寻址方式就是指令执行时获取操作数的方式,可以直接或间接方式给出操作数。S7-300有4种寻址方式。

1.立即寻址

立即寻址是对常数或常量的寻址方式,其特点是操作数直接表示在指令中,或以唯一形式隐含在指令中。如图7-20所示的指令操作数中,INT1、INT2及IN均采用了立即寻址方式。

2.存储器直接寻址

存储器直接寻址,简称直接寻址。该寻址方式在指令中直接给出操作数的存储单元地址,如图7-21所示,存储单元地址可用绝对地址(如I0.1、Q0.0)或符号地址(如“速度设定”、“电动机控制.set_speed”等)。图7-21中的各条指令操作数均采用了直接寻址方式。

978-7-111-51420-6-Chapter07-28.jpg

图7-20 立即寻址

978-7-111-51420-6-Chapter07-29.jpg

图7-21 存储器直接寻址

3.存储器间接寻址

存储器间接寻址,简称间接寻址。该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。该存储器一般称为地址指针,在指令中需写在方括号“[]”内。

存储器地址指针分为16位地址指针和32位地址指针。

图7-22所示为16位指针存储器间接寻址方式。程序段1指令的含义是,将常数2送入MW0中,MW0的值用来指定定时器的地址,即定时器地址为T2,T为区域表示符,而[MW0]为一个16位指针;程序段2指令的含义是,将常数3送到地址LW10中,LW10的值用来指定要打开的数据块地址DB3,DB为区域表示符,而[LW10]为一个16位指针。

16位地址指针用于定时器、计数器和程序块(DB/FC/FB)的寻址,被看作为一个无符号整数(0~65535),它表示定时器、计数器、数据块(DB/DI)或程序块(FB/FC)的地址号。

978-7-111-51420-6-Chapter07-30.jpg

图7-22 16位指针存储器间接寻址

32位地址指针用于I、Q、M、L以及数据块等存储器中位、字节、字及双字的寻址,32位的地址指针可以使用一个双字表示,第0~2位作为寻址操作的位地址,第3~18位作为寻址操作的字节地址,第19~31位没有定义。

32位地址指针仅用于内部区域寻址。寻址格式如下:

地址存储区标示符[32位地址指针]

例如,编写程序指令如下:

978-7-111-51420-6-Chapter07-31.jpg

其中“P#2.3”为常数指针,意为指向第2个字节第3位。可在线观察地址指针内容,如图7-23所示。

978-7-111-51420-6-Chapter07-32.jpg

图7-23 在线观察指针内容

4.寄存器间接寻址

与存储器间接寻址不同,寄存器间接寻址使用CPU集成的两个32位地址寄存器AR1和AR2存储地址指针,且只能用于存储地址。(www.xing528.com)

寄存器间接寻址,简称寄存器寻址。该寻址方式在指令中通过地址寄存器和偏移量间接获取操作数,其中的地址寄存器及偏移量必须写在方括号“[]”内,用地址寄存器的内容加上偏移量形成地址指针,并指向操作数所在的存储器单元。地址寄存器的地址指针有两种格式,其长度均为双字。

(1)区域内寄存器间接寻址

这种地址指针格式适用于在确定的存储区内寻址,即区内寄存器间接寻址,指针格式与存储器间接寻址的32位指针相同,即:第0~2位作为寻址操作的位地址,第3~18位作为寻址操作的字节地址,第19~31位没有定义,操作指令格式如下:

存储器标示符[ARx,地址偏移量]

图7-24所示为一段区域内寄存器间接寻址程序,AI[AR1,P#0.1]。‘I’为被访问的存储器区域,‘AR1’为地址寄存器1,P#0.1为偏移地址。

978-7-111-51420-6-Chapter07-33.jpg

图7-24 区域内寄存器指针应用案例

区域内寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的指针不含存储区信息,否则会与方括号前的地址标示符标示的存储区冲突。

区域内寄存器间接寻址包括被寻址数据所在存储单元地址的字节编号和位编号,至于对哪个存储区寻址,则必须在指令中明确给出。这种格式适用于在确定的存储区内寻址。

(2)区域间寄存器间接寻址

这种地址指针格式适用于跨区域寻址,包含有存储器区域信息的指针,称为交叉区域指针,要使用AR1或AR2。

交叉区域指针为32位,左起0~18位格式与32位区域内寄存器指针格式相同,19~23位、27~30位未定义,31位为交叉区域指针标示符,具体格式及含义如图7-25所示。

978-7-111-51420-6-Chapter07-34.jpg

图7-25 交叉区域指针格式

其中第24~26位为存储区域地址标识,8种组合表示8种存储器区域,见表7-7。

表7-7 地址区域及功能

978-7-111-51420-6-Chapter07-35.jpg

图7-26所示为一段交叉区域寄存器间接寻址程序,其中“=[AR2,P#0.2]”,‘AR2’为地址寄存器2,P#0.2为偏移量。图7-27所示为该段程序的在线监控表,从表中可看到地址寄存器AR1/AR2的数据格式。

978-7-111-51420-6-Chapter07-36.jpg

图7-26 跨区域寄存器指针应用案例

978-7-111-51420-6-Chapter07-37.jpg

图7-27 变量在线监控

跨区域寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的指针包含存储区信息。由于跨区域寄存器间接寻址在指令中不确定存储区,存储区由地址寄存器中存储的指针中的信息确定,因而寻址的存储区是可变的。

跨区域寄存器间接寻址指针格式包含了数据所在存储区的说明位(存储区域标识位),可通过改变标识位实现跨区域寻址,区域标识由第26~24位确定。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈