存储器 间接 寻址 试验 立即寻址 ;直接寻址 ;间接寻址 16位指针间接寻址 32位指针间接寻址

存储器间接寻址

S7-300/400 有3种寻址方式

立即寻址

直接寻址

间接寻址

立即寻址和直接寻址用的最多。

间接寻址中用的最多的是存储器间接寻址。

(一 )立即寻址举例

立即寻址 :立即寻址的操作数直接在指令中

L -35 //将16位整数装载到累加器1的低字

L L#5 //将32位双整数装载到累加器1

L W#16#3E4F //将16进制常数字装载到累加器1的低字。

L 25.38 //将32位浮点数常数装载到累加器1

L S5T#2S //将16位S5T定时器常数装载到累加器1的低字 (2秒钟)

L P#10.0 //将32位内部区域指针装载到累加器1 (先记住)

(二)直接寻址

直接寻址在指令中直接给出存储器或者寄存器的地址,地址包括区域 长度 和位置信息

A Q 0.5 //输出Q寄存器0的第5位

L DBW // DB表述DATA BLOCK 数据块 将数据块中的16位字装载到累加器1的低字

L LD 22 //将32位局部数据双字装载到累加器1 中

T QB10 //将累加器1最低字节的数据传送到过程映像输出字节QB0

(三)存储器间接寻址

例如:

在指令"A M[LD20]" 中 方括号表示间接寻址

如果LD20中的指针值是 P#5.2, P表示pointer 指针

则M[LD20]对应的地址是M5.2

(三.1) 16位指针的间接寻址

定时器 计数器 DB FB 和 FC 的编程范围 小于65535 可以16位指针

定时器存储器间接寻址的例子

已经拍摄成视频 I0.2 用于启动定时器T3 用PLCSIM 观测T3 的变化 发现 T3在倒计时5秒 证明 T[MW8] 确实是 T3

SD T[MW8]表示 接通延时定时器 线圈

(三.2)

S7-300/400 可以对 I ; Q ; M ;DB 等地区区的位。字节和双字 进行间接寻址。

地址指针包含了地址中的 字节 和 位 信息

这些地址区的间接寻址采用双字指针。

指针格式如下图所示

第0~2位 是被寻址的地址中的位编号

第3~18位 是被寻址的地址的字节编号 (0~65535)


31    24


23    16


15    8


7    0


0000    0000


0000    0bbb


bbbb    bbbb


bbbb    bxxx

如果要用双字格式的指针 访问一个字节,字,双字 存储器,必须保证指针的位编号为0

例如P#20.0 P表示该常数是指针的地址。

我已经将32位指针的存储器间接寻址录制成视频 上传到百度网盘。

需要注意的是:

该视频 用LD 10 (LD10 位 Long型 32位) LD0变量来存储地址

LD20是一个局部变量,若用"[ ]"框起来 就表示了LD20 是一个指针变量,内部存放的变量是一个地址型数据。

视频的程序如下:

程序段1

L P#4.0 //指针的位编号为0 字节编号为4 由于后面L QB[LD 10] 把4.0给

//指针变量LD10 所以必须是4.0 位编号为0

T LD 10 //将累加1的值装载给LD10 LD10是 P#4.0 P表示是指针常量

L QB[LD10] //QB表示是位寻址

T MB6

改段程序视频 实现的 功能是

因为 L QB[LD 10] 指令是字节寻址, 所以LD10 必须用 P#4.0 赋值。

同时 在PLCSIM 中打开变量, QB4 给多少 则 MB6 就是多少

证明了 QB[LD 10 ] 访问的额就是 QB[4]

程序 段2

L P#4.3

T LD20

A M[LD 20]

=Q 5.0

此程序实现的是 当把 M4.3 置位为1 则Q5.0 线圈得电。

验证了 M[LD 20] 就是 M4.3

因为不是访问的字节 字 或者 双字 指针变量 LD 20 可以赋予值 P4.3

注意:

使用32位指针对数据块内的地址寻址时,首先必须用OPN指令打开要寻址的数据块

然后才能寻址,

例如

DBW [MD10] 在程序中输入指令     L DB2.DBW[LD 20] 该指令为 红色 表示 格式错误

修改为

OPN DB2

L DBW [LD 20 ] 就 OK 了

百度网盘录制的视频链接在此。

原文地址:https://www.cnblogs.com/bailongwei654321/p/12259026.html

时间: 2024-10-13 13:37:10

存储器 间接 寻址 试验 立即寻址 ;直接寻址 ;间接寻址 16位指针间接寻址 32位指针间接寻址的相关文章

计算机组成原理--64位CPU装载32位操作系统,它的寻址能力还是4GB吗?

借由这个问题,今天我们就把 32 位 CPU.64 位 CPU.32 位操作系统.64 位操作系统之间的区别与联系彻底搞清楚.对于这个问题,博主也是一知半解了好长时间啊~ 基本概念 32位的CPU与64位CPU 以下内容摘自维基百科: 64 位 CPU 是指 CPU 内部的通用寄存器的宽度为 64 比特,支持整数的 64 比特宽度的算术与逻辑运算.那么 32 位 CPU 同理. 一个 CPU,联系外部的数据总线与地址总线,可能有不同的宽度:术语"64位"也常用于描述这些总线的大小.不过

闲谈寻址-两种寻址方法

据说今日强冷空气来袭,早上观摩了实时雷达图以及卫星云图,强冷空气前锋徘徊在韶关附近僵持,将近上午11点,深圳下起了细雨,北风稍微加大,虽然尚未降温但此现象说明冷锋已经插入到了暖湿气流之下造成空气抬升,形成降雨,降温也就紧随其后了.侦察兵已经到了,大部队还会远吗? ??- ??本文以及后面一篇讲DNS的文章纯属两篇闲谈,所谓的闲谈就是不关乎技术细节,尽扯背后发散的思路,所以这两篇并不适合学习之用,如若你已经学过这些方面的内容,不妨展开来与我一起探讨个究竟,然而若你从未接触过这些概念,读下去恐怕会失

绝不要进行两层间接非const指针赋值给const指针

#include <stdio.h> #include <stdlib.h> int main(void) { int *p1; int * *pp1; const int * *pp2; const int n = 13; printf("起初const int n = %d\n", n); pp1 = &p1; pp2 = pp1; *pp2 = &n; /*  间接的使p1=&n  */ **pp1 = 10; printf(&qu

间接赋值从0级指针到1级指针

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h> int getFileLen(int b){ b = 100; return b;}int getFileLen2(int *p){ *p = 44; return *p;} //一级指针的推演int main(){ int a; int *p =NULL; //修改a的值 a = 20; //直接修改

间接赋值从1级指针到2级指针

void getMem(char **p2){ *p2 = 400; //间接赋值,p2是p1的地址} int main(){ char *p1 =NULL; char **p2 =NULL; p1 = 0x111; //间接改变p1的值 p2 = &p1; *p2 = 100; //间接赋值,p2是p1的地址 printf("p1:%d\n", p1); { *p2 = 200; //间接赋值,p2是p1的地址 printf("p1:%d\n", p1);

X86/X64处理器体系结构及寻址模式

由8086/8088.x86.Pentium发展到core系列短短40多年间,处理器的时钟频率几乎已接近极限,尽管如此,自从86年Intel推出386至今除了增加一些有关流媒体的指令如mmx/sse之外,其他新增的大多数指令都可以从最初的指令集中组合实现同样的功能,整个编程模型维持了约有20多年. 1. 处理器体系结构 1.1. 处理器简要结构 我们都知道CPU的根本任务就是执行指令,对计算机来说最终都是一串由"0"和"1"组成的序列.CPU从逻辑上可以划分成3个模

内核基础 - 寄存器与内存寻址(by quqi99)

作者:张华  发表于:2016-03-01 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 汇编 汇编编译器assembler编译目标代码二进制文件(nasm -f elf -g -F stabs *.asm),连接器linker(ld -o bin_file *.o)除了把目标代码组合成一个单个的块,还要确保模块以外的函数调用能够指向正确的内存引用(连接器必须建立一个索引,也就是符号表,里面

汇编语言从入门到精通-CPU资源和存储器

CPU资源和存储器 在汇编语言中,需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口.本章将着重讲解CPU内部寄存器的命名.功能及其常见的用途,还要介绍存储器的分段管理模式.存储单元地址的表示法以及其物理地址的形成方式. 2.1 寄存器组 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一.由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能. 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结

汇编语言--CPU资源和存储器(二)

二.CPU资源和存储器 需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口. 1.寄存器组 (1)16位寄存器组 16位CPU所含有的寄存器有(见图2.1中16位寄存器部分): 4个数据寄存器(AX.BX.CX和DX) 2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP) 4个段寄存器(ES.CS.SS和DS) 1个指令指针寄存器(IP) 1个标志寄存器(Flags) (2)32位寄存器组 32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器.指令指针和标志寄存器从