间接寻址及寄存器指令

合集下载

间接寻址及地址寄存器指令

间接寻址及地址寄存器指令

详解西门子间接寻址【址概念】完整一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。

其中操作数是指令要执行目标,也就是指令要进行操作址。

我们知道,PLC中划有各种用途存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,说来指定确切大小。

当然定时器T、计数器C不存这种衡量体制,它们仅用位来衡量。

由此我们可以到,要描述一个址,至少应该包含两个要素:1、存储区域2、这个区域中具体位置比如:A Q2.0其中A是指令符,Q2.0是A操作数,也就是址。

这个址由两部分组成:Q:指是映像输出区2.0:就是这个映像输出区第二个字节第0位。

由此,我们出,一个确切址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX200.0。

DB X 200 . 0其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:址标识符。

这样,一个确切址组成,又可以写成:址标识符 + 确切数值单元【间接寻址概念】寻址,就是指定指令要进行操作址。

给定指令操作址方法,就是寻址方法。

谈间接寻址之前,我们简单了解一下直接寻址。

所谓直接寻址,简单说,就是直接给出指令确切操作数,象上面所说,A Q2.0,就是直接寻址,A这个指令来说,Q2.0就是它要进行操作址。

这样看来,间接寻址就是间接给出指令确切操作数。

对,就是这个概念。

比如:A Q[MD100] ,A T[DBW100]。

程序语句中用方刮号 [ ] 标明内容,间接指明了指令要进行址,这两个语句中MD100和DBW100称为指针Pointer,它指向它们其中包含数值,才是指令真正要执行址区域确切位置。

间接由此名。

西门子间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。

【存储器间接寻址】存储器间接寻址址给定格式是:址标识符+指针。

第4章 TMS320F28x系列DSP的寻址方式及指令系统

第4章 TMS320F28x系列DSP的寻址方式及指令系统
第4章 TMS320F28x系列DSP的寻址方式及 指令系统
4.1 TMS320F28x系列DSP的寻址方式 4.1.1 寻址方式选择位AMODE 4.1.2 直接寻址方式 4.1.3 堆栈寻址方式 4.1.4 间接寻址方式 4.1.5 寄存器寻址方式 4.1.6 其他寻址方式 4.1.7 32位操作数的定位 4.2 TMS320F28x系列DSP指令系统概述
在 F2812间接寻址方式中,使用哪个辅助寄存器指针在指令中并不 被明确指出。而在 C2xLP的间接寻址方式中,3位长度的辅助寄存器指 针被用来选择当前使用哪个辅助寄存器以及下次操作将使用哪个辅助寄 存器。
汇编器/编译器对AMODE位的追踪
编译器总是假定AMODE=0,所以它只使用对AMODE=0 有效的寻址模式。而汇编器可以通过设置命令行选项实现默认 AMODE=0或者AMODE=1。 √ – v28 ;假定AMODE=0(C28x寻址方式) – v28 – m20 ;假定AMODE=1(与C2xLP全兼容的寻址方式) √ 在文件中使用内嵌伪指令
器使用的方式。这种方式与C2xLP CPU的寻址方式不完全兼容。数据页指针 偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1——该方式包括的寻址方式完全与C2xLP 器件的寻址方式
兼容。数据页指针的偏移量是7位并支持所有C2xLP 支持的间接寻址方式。
周鹏 安徽工程大学电气工程学院
周鹏 安徽工程大学电气工程学院
寻址方式是指CPU根据指令中给出的地址信息
来寻找指令中操作数物理地址的方式,即获得操作
数的方式。指令系统即各种指令的集合,或称指令
集 。 本 章 简 要 介 绍 C28x 系 列 ( TMS320F2812 属 于 C28x系列)DSP的寻址方式和指令系统。

寄存器寻址指令

寄存器寻址指令

字节3 HIGH DATA
字节1
字节2
字节3 字节4 字节5 字节6
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 LOW HIGH DISP DISP LOW HIGH
操作码 D W MOD REG R/M 或 DATA 或 DATA DATA DATA
P67
MOV SP,BX
1000101 1 1 1
(3) POP 出栈操作指令
指令格式:POP 目标
指令功能:目标 ((SP)+1,SP)) SP (SP)+2
SS
栈顶
POP BX 56H 78H
POP AX 12H 34H
78H 56H
34H
12H
SP
栈底
堆栈(Stack)
POP指令
汇编语句
例子
说明
POP reg16 POP CX
16位寄存器
绝大多数双操作数指令,除非特别说明,目的操作数与源操作 数必须类型一致,否则为非法指令
MOV AL,050AH MOV AL,BX 寄存器有明确的字节或字类型,有寄存器参与的指令其操作数 类型就是寄存器的类型 对于存储器单元与立即数同时作为操作数的情况,必须显式指 明;byte ptr指示字节类型,word ptr指示字类型
栈底
汇编语句
例子
说明
PUSH reg16 PUSH BX
16位寄存器
PUSH mem16 PUSH WORD PTR[BX] 16位寻址方式
PUSH seg
PUSH DS
任何段寄存器
例:现场保护恢复
push ax push bx push ds ... pop ds pop bx pop ax

[物理]单片机3第三章寻址方式

[物理]单片机3第三章寻址方式
单片机原理及应用
北京化工大学 信息科学与技术学院 郭 青
1
第三章
本章重点
寻址方式
80C51指令系统
指令格式
操作结果及对标志位影响
3.1
111条指令
概述
29 24 24 17
数据传送类指令 数学运算类指令
分类
逻辑运算类指令 控制转移类指令
位操作指令
17
单字节指令 按指令长度分类
双字节指令
三字节指令 12个振荡周期 64
COUNT:PUSH DPH; 保护DPTR内容
PUSH DPL;
MOV DPTR,#TABLE ;赋表首地址给DPTR
MOVC A, @A+DPTR
; POP DPL; 根据A中内容查表 恢复DPTR内容 返回主程序
POP DPH
RET;
ORG 1000H TABLE:DB 00 DB 01 DB 04 DB 09 DB 16 DB 25 DB 36 DB 49 DB 64 DB 81
19
3.3.1 数据传送类指令
按操作方式,分为三种: 数据传送 数据交换 栈操作
一、普通传送类指令 格式: MOV (目的操作数),(源操作数) 操作码助记符 操作: 将源操作数单元内容,传送到目的操作数 单元中,源操作数内容不变。不影响标志 位Cy,AC和OV。
操作数的组合关系
1、立即数的传送 MOV A, #data MOV Rn, #data (A) (Rn) #data #data
d:MOV direct,#data
将8位立即数送入由direct直接寻址的地 址单元中。 direct:00H~FFH,8位二进制地址码
寻址内部RAM(00H~7FH)及SFR

汇编语言--操作数的寻址方式(三)

汇编语言--操作数的寻址方式(三)

汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。

如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。

在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。

所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。

在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。

操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。

微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。

其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。

另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——32位地址的寻址⽅式。

为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。

1、⽴即寻址⽅式操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。

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

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

该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。

⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。

图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。

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。

间接寻址和地址寄存器指令

间接寻址和地址寄存器指令

地址寄存器指令的缺点
缺乏灵活性
地址寄存器指令直接使用寄存器中的地址作为操作数的地址,这使 得程序在处理不同情况时缺乏灵活性。
可扩展性差
由于地址寄存器指令直接使用寄存器中的地址,当数据结构发生变 化时,可能需要修改整个程序以适应新的数据结构。
增加编程难度
由于地址寄存器指令直接使用寄存器中的地址,因此需要程序员手 动管理寄存器的值,这增加了编程的难度和出错的风险。
要点二
中断处理
在处理硬件中断时,地址寄存器指令 用于指定中断处理程序的入口地址。 当发生中断时,系统会自动跳转到该 地址执行中断处理程序。
要点三
直接内存访问( DMA)
在直接内存访问操作中,地址寄存器 指令用于指定要传输数据的起始地址 。通过设置地址寄存器的值,DMA 控制器可以直接在内存和设备之间传 输数据,而不需要CPU的干预。
随着云计算技术的普及,间接寻址和 地址寄存器指令将逐渐云端化,通过 将指令执行的结果存储在云端,实现 数据共享和远程控制,提高应用的灵 活性和可扩展性。
应用领域拓展
物联网
随着物联网技术的不断发展,间 接寻址和地址寄存器指令将在物 联网领域得到广泛应用,如智能 家居、智能农业等,通过指令控 制各种设备的运行,提高智能化 水平和生活质量。
指令格式
指令格式通常包括操作码、 寄存器号和可能的修饰符。
寄存器号指定了要使用的地 址寄存器,如AX、BX、CX 等。
操作码指定了要执行的操作 ,如加法、减法、乘法等。
修饰符可能包括间接寻址、 变址寻址等,用于指定如何 访问内存单元。
03
CATALOGUE
间接寻址与地址寄存器指令的比较
相似之处
选择依据
编程语言和指令集

七种寻址方式

七种寻址方式

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

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

内容页码STEP 7 中可能的寻址方式 (2)变量直接寻址 (3)DB中地址标识符直接寻址 (4)在程序中分析DB信息 (5)存储器间接寻址 (6)用于存储器间接寻址的指针结构 (7)存储器间接寻址的特性 (8)间接寻址示例 (9)练习4.1:用间接寻址的方法进行循环编程 (10)内部区域,寄存器间接寻址 (11)交叉区域,寄存器间接寻址 (12)用于装载地址寄存器的指令 (13)其它用于地址寄存器的指令 (14)寄存器间接寻址的特性 (15)练习4.2:用寄存器间接寻址的方法进行循环编程 (16)POINTER类型和ANY类型数据的块参数 (17)POINTER类型的结构和参数赋值 (18)ANY数据类型的结构 (19)ANY数据类型参数赋值 (20)ANY (21)参数类型间接赋值评估ANY型指针传递 (22)练习4.3:用于求和及计算平均值的功能 (23)直接寻址使用直接寻址,存储单元地址可以直接包含在指令中,也就是说,地址标识符指明了指令所要处理数值的地址。

了指令所要处理数值的地址符号寻址在控制程序中,可以进行绝对地址寻址(比如:I 1.0)或进行符号地址寻址(比如“开始信号”)。

符号地址是使用名称来代替绝对地址。

使用有意义的名称使程序的可读性增强。

不过,在使用符号寻址时,要注意区分局部符号(在块的声明部分)和全局符号(符号表)。

间接寻址使用间接寻址,可以寻址那些只有在程序运行时才确定其地址的地址标识符。

例如,通过间接寻址,可以对程序的一些部分进行反复扫描(循环编程),由此,每次扫描所用到的地址被赋予不同的地址数值。

次扫描所用到的地址被赋予不同的地址数值关于间接寻址,要注意区分以下两种情况:•存储器间接寻址:寻址的地址指针位于用户储存器存储单元里(比如MD30)。

使用存储器间接寻址,也可以为位于保存寻址地址标识符指针的存储器中的变量赋予符号化名称。

•寄存器间接寻址:在访问之前,要将指向寻址地址的指针装载到其中一个S7处理器地址寄存器(AR1或AR2)中去。

警告用于使用间接寻址时,只有在程序运行期间才计算地址,所以,就会有这样的潜在的危险性,即存储器被意外覆盖,进而导致PLC的意外动作。

变量的直接寻址使用直接寻址方法,可以对那些基本类型变量进行寻址,其中所谓的基本变量是指其长度最多不超过4个字节。

简单变量由下面几个部分组成:个字节简单变量由下面几个部分组成•一个变量标识符(比如:“IB”,表示输入字节)•存储区内一个确切的地址(存储单元位置)(字节地址或位地址),它由地址标识符所确定。

地址或者简单变量也可以通过全局、符号名(符号表)来进行寻址。

外围设备与S5不同的是,访问外围设备的时,必须要区分是输入还是输出。

但是,仍然只能只读(L PIW)访问外设输入,只写访问(T PQW)外设输出。

本地数据使用STEP 7,也可以绝对访问本地数据堆栈,例如:• A L 12.6 (扫描地址为12.6的本地数据位捕捉信号状态= 1)•L LW 12(将本地数据字装载到ACCU1中)DBX/DIX也可以在数据块内直接访问简单变量:• A DBX 12.6 (扫描地址为12.6的本地数据位捕捉信号状态= 1数据块DB必须预先打开)。

•L DB5.DBW10(将DW10装载到DB5中)复杂变量可以访问那些具有复杂数据类型(诸如结构或数组等)的局部变量。

对复杂变量来说,只能对其组成部分进行绝对访问,这是因为其组成部分为基本数据类型。

概述CPU将两个数据块寄存器用于处理数据地址,当前打开的数据块号就存储在这些寄存器中存器中。

访问数据块之前,首先必须用这两个数据块寄存器中的一个将其打开。

可以使用如下指令来打开数据块:•OPN DBx或OPN DIx或者借助于数据块地址标识符组合寻址来打开,比如:•L DBx.DBWy(但没有L DIx.DIWy这种形式!)在这种情况下,数据块DB号x也被装入DB寄存器中。

寻址在STEP7中,数据块是一个字节一个字节地组织起来的,所以,为了对BIT(位)、BYTE(字节)、WORD(字)或DWORD (双字)长度的数据进行直接地址访问,每种情况都要给出字节地址。

符号访问为了进行符号访问,需要在符号列表里输入数据块的符号名。

您可以使用DB Editor (数据编辑器)来为数据块的各个变量分配符号名。

现在可使用指令L “Values”..Number_1实现对数据元素的完全符号访问。

该操作将打开DB19(其中“Values”为DB 19的符号名)并装载DBW 2(其中Number_1为_DBW2符号名)。

DB, DI寄存器这两个寄存器里包含了当前打开的数据块的有效数据块号。

在一级调用中,可以同时打开两个数据块。

时打开两个数据块在STL编程语言中,习惯上使用第一个DB寄存器来访问共享(全局)数据块DB,而使用第二个DB寄存器来访问背景DB。

因此,这两个寄存器也分别被称作DB寄存器和DI寄存器。

但是,CPU对对此并不进行区分,对每一个数据块,均可以使用这两个寄存器中的任何一个予以打开(即使是两个数据块同时打开的情况下)。

CDB CDB(交换DB寄存器里的内容)指令是将DB寄存器和DI寄存器里的内容予以交换,也即,将DB寄存器里的内容传递到DI寄存器中去,同时也将DI寄存器里的内容传递到DB寄存器中去。

该指令既不影响ACCU1中的内容值,也不影响状态位。

L DBLG,L DILG:这些指令的功能是以字节为单位读出当前所打开的数据块的数据长度,。

通过这种数据长度信息,用户程序就可以在访问数据块DB之前,测试数据块的长度是否达到所要求的长度。

L DBNO,L DINO:这些指令的功能是读出当前打开的数据块号。

概述使用存储器间接寻址,要寻址的变量的地址位于一个地址(存储单元)中。

使用存储器间接寻址的程序语句包含如下部分:•指令(比如:OPN,A,L,等等。

)•地址标识符(DB,C ,T ,I ,QW ,MD ,等等。

)•以及一个[变量],该变量必须要用方括号括起来。

这个变量包含指令要访问的操作数地址(指针)。

根据所使用的地址标识符,指令将以这种特定的[变量]格式,将所存储的数据看做成字指针或者双字指针。

带有16位指针的指令可以使用16位指针来寻址定时器、计数器、或块(DB、FC、FB)。

所有的定时器和计数器指令都可以用间接寻址访问。

为了对定时器,计数器,或块寻址,需使用如T、C、DB、DI、FB、FC这些区域标识符。

寻址的操作数的地址存储在一个字中。

一个数据块既可以用DB寄存器打开,也可以用DI寄存器打开。

当间接打开数据块时(DB/DI),如发现指针内容为零,则DB/DI 寄存器也以值“0”装入,装入0值时不会触发错误。

逻辑块调用可以借助于UC或CC指令(而非CALL)直接进行寻址,但是这些块不能包含任何块参数或静态变量能包含任何块参数或静态变量。

这种字指针被看作一个整数(0 ... 65 535),它指的是定时器(T)、计数器(C)、数据块(DB,DI)或逻辑块(FC,FB)的号。

带有32位指针的指针下列地址可以使用32位指针以存储器间接寻址方式进行寻址:•用位逻辑操作寻址的位I、Q、M、DIX 或DBX可用作地址标识符•可以使用装载或传送指令来寻址的字节地址、字地址、双字地址。

IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID可用作地址标识符。

被寻址的操作数地址被视为一个32位的指针。

在双字中,最低有效位(从第0位到第2位)被视为位地址,接着16位(从第3位到第18位)被视为寻址操作数的字节地址。

对于从第19位到第31位,在间接寻址方式中未作定义。

节地址对于从第位在间接寻址方式中未作定义注意事项如果您要使用装载或传送指令以存储器间接寻址方式访问某一地址单元,就必须确保指针的位地址为“0”。

否则,在执行过程中,CPU就会触发一个运行错误。

装载32位指针常数使用如下的语法规则可以将32位指针常数装载到累加器ACCU1中:L P#<字节地址>.<位地址>L P#<><指针存储单元用于存储器间接寻址的16位和32位指针必须存储在下列某个区域中:•M–位存储区•L–本地数据区•D–数据块(DB或DI)指针地址区使用存储器间接寻址时,地址(存储单元位置)位于16位或32位地址中。

该地址可在下面某个区域中找到:该地址可在下面某个区域中找到•位存储器:作为绝对寻址操作数或作为变量通过符号表符号寻址。

•本地数据堆栈:作为绝对寻址操作数或块的声明部分声明的临时变量。

•全局(共享)数据块:作为绝对寻址操作数。

当全局(共享)数据块DB用作指针存储单元的时候,必须要考虑到:在进行访问之前,“合适的”数据块已经使用DB寄存器(比如:OPN DB)打开了。

•背景数据块:作为绝对寻址操作数。

在使用背景数据的时候,要遵循如下几点:组织块和功能:在功能或组织块里,存储在背景数据块中的指针可以如同存储在全局(共享)数据块中一样使用。

只需记住的是,这里使用的是DI寄存器而非DB寄存器。

功能块FB:通常在功能块中,背景数据,也即参数或静态变量,不能用于符号性的存储器间接寻址。

原则上,可以使用在声明段中所输入的“地址”,来对FB内部的本地数据进行绝对访问。

但是,如果该FB用作多重背景模型,必须要注意,该地址不是在背景DB中所指定的绝对地址,实际上是相对于AR2的地址。

注意事项当您将存储器间接寻址指针传递到块中,或者想要在静态变量中永久保存该值,就必须要将该指针值从该静态变量中拷贝到临时变量中,然后使用这个临时变量来完成访问。

.描述该示例表示的是,以数值“0”初始化数据块的输入的这样一个功能。

DB号是通过输入参数传递到功能中去的。

入参数传递到功能中去的首先,在Network 1中将要寻址的数据块打开,为此,将待传递的块号(输入参数:#dbnumber)拷贝到一存储器字(MW100)中。

然后使用该存储字将DB打开。

在network(段)2中,通过一个循环将该DB的前10个数据字设置为“0”,在该循环中,使用LOOP指令,由此将循环计数器存入MB50中。

接着,通过存储器间接寻址,经由MD 40,向该数据块DB的各个数据字中传送“0”值。

在进入循环之前,将数据块的最后一个数据字(DBW 18)的地址指针装载到MD 40中。

由于数值向DB中是逐字传送,而不是逐字节传送的,所以在每次循环扫描的时中由于数值向中是逐字传送而不是逐字节传送的所以在每次循环扫描的时候,MD40中的访问地址减去P#2.0。

注意事项为示例程序简单起见,本示例程序中没有对数据块号进行检查。

实际应用也很重要的是,要将初始地址和预设值为“0”的区域长度设计为“可参数化”的,并在打开DB之前进行检查,确定DB是否恰好具有所必需的长度。

相关文档
最新文档