分类:寻址方式从大的方面可以分成直接寻址和间接寻址。 直接寻址就像甲要和乙说话直接叫乙的名字就可以了,甲直接和乙建立联。 间接寻址就像甲要和乙说话,而乙在另外一个城市,甲就写了一封信通过邮递员送给乙,甲通过邮递员间接和乙建立联系,这就叫间接寻址。间接寻址中指针就充当了邮递员的角色。 直接寻址分为:绝对地址寻址,符号寻址 间接寻址分为:存储器间接寻址,寄存器间接寻址。
直接寻址是最简单的寻址方法,也是编程中最常用的寻址方式。 ①绝对地址寻址 绝对地址寻址就是直接调用要使用的地址 示例: ②符号寻址 符号寻址就是通过符号表中的绝对地址的命名进行寻址 示例: 用下图中的I_Motor_Start进行寻址。 二、间接寻址★★★★★ 间接寻址是比较复杂的寻址方式,也是我们这里重点讲解的地方,间接寻址需重点理解指针的概念。
A.存储器间接寻址 【A1】16位指针寻址: 1)16位指针存储空间 16位指针存储空间是16位,2个字节,通过这2个字节的空间来存放变量的地址。 2)16位指针寻址范围 16位指针只能对计时器(T),计数器(C),数据块(DB,DI)的号,程序块(FB,FC)的号进行寻址,也就是这2个字节的存储空间中只能存放计时器的编号,计数器的编号,数据块的编号,程序块的编号。 3)16位指针寻址表示格式 16位指针寻址表示格式为:区域标示符[16位地址指针] 示例:
4)16位指针寻址程序示例 例1: L 2 //将2进行装载 T MW 0 //将2传送到MW0 A I 0.0 //如果I0.0 = True L S5T#10S //装载时间 SD T [MW0] //T开始计时 例2: L 1 //将1进行装载 T MW 0 //将1传送到MW0 OPN DB [MW 0] //打开DB1 L 10 //将10进行装载 T DBW 0 //将10传送到DB1.DBW0中 L DBW 0 //将DB1.DBW0进行装载 T MW 2 //将DB1.DBW0传送到MW2中 【A2】32位指针寻址 1)32位指针存储空间 32位指针存储空间是32位,4个字节,通过这4个字节的空间来存放变量的地址。 2) 32位指针寻址范围 32位指针能对I、Q、M、L、数据块的位、字节、字、双字进行寻址,也就是这4个字节的存储空间中能对上述存储类型中的位、字节、字、双字的地址进行存储。 3)32位指针存储格式 4)32位指针寻址表示格式 32位指针寻址表示格式为:地址存储器标示符[32位地址指针] 示例: 5)32位指针三种寻址方法 ①直接输入10进制数寻址(最复杂最不直观的寻址方式,不推荐使用)。 ②将输入的10进制数左移3位进行寻址(比较直观的寻址方式)。 ③利用 P#字节.位 格式进行寻址(最直观最方便的寻址方式,推荐使用)。 ★例1 :直接输入10进制数寻址 这里我们要重点理解为什么第六句将10传送到了MW4中,而不是MW32中,为什么第八句将15传送到了MW6中,而不是MW48中。 这是因为32,和48存放到指针中是按照32位二进制数进行存放的,下面我们通过将48存放到MD24来进行举例说明 例2:左移3为进行寻址 例3:以 P#字节.位 格式进行寻址
寄存器间接寻址使用的是CPU的地址寄存器AR1和AR2 B1)寻址格式 区域标示符[AR1/AR2,P#X] ①AR1/AR2表示地址寄存器AR1或者AR2,地址寄存器中只能存放地址。 ②P#X表示偏移量X是偏移具体数值。 B2)寄存器间接寻址示例 |
|