首页 理论教育装入和传送指令在寻址中的编程技巧

装入和传送指令在寻址中的编程技巧

【摘要】:传送指令将累加器1中的内容写入目的存储区中,累加器1的内容不变。表3-2为寄存器间接寻址的区域标识位如果要用寄存器指针访问一个字节、字或双字,必须保证指针中的位地址编号为0。

装入(Load,L)指令将源操作数装入累加器1,而累加器1原有的数据移入累加器2。

装入指令可以对字节(8位)、字(16位)、双字(32位)数据迸行操作。

传送(Transfer,T)指令将累加器1中的内容写入目的存储区中,累加器1的内容不变。

1.立即寻址的装入与传送指令

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

【实例】 使用立即寻址的例子。

L-35 //将16位十进制常数-35装入累加器1的低字ACCU1-L

L L#5 //将32位常数5装入累加器1

L B#16#5A //将8位十六进制常数装入累加器1最低字节ACCU1-LL

L W#16#3E4F //将16位十六进制常数装入累加器1的低字ACCU1-L

L DW#16#567A3DC8 //将32位十六进制常数装入累加器1

L 2#0001_1001_1110_0010 //将16位二进制常数装入累加器1的低字ACCU1-L

L 25.38 //将32位浮点数常数(25.38)装入累加器1

L ‘ABCD’ //将4个字符装入累加器1

L TOD#12:30:3.0 //将32位实时时间常数装入累加器1

L D#2004-2-3 //将16位日期常数装入累加器1的低字ACCU1-L

L C#50 //将16位计数器常数装入累加器1的低字ACCU1-L

L T#1M20S //将16位定时器常数装入累加器1的低字ACCU1-L

L S5T#2S //将16位定时器常数装入累加器1的低字ACCU1-L

L P#M5.6 //将指向M5.6的指针装入累加器1

L B#(100,12,50,8) //装入4字节无符号常数

2.直接寻址的装入与传送指令

直接寻址在指令中直接给出存储器或寄存器的区域、长度和位置,例如用MW200指定位存储区中的字,地址为200。

【实例】 直接寻址的程序实例:

A I0.0 //输入位I0.0的“与”(AND)操作

L MB10 //将8位存储器字节装入累加器1最低的字节ACCU1-LL

L DIW15 //将16位背景数据字装入累加器1的低字ACCU1-L

L LD22 //将32位局域数据双字装入累加器1

T QB10 //将ACCU1-LL中的数据传送到过程映像输出字节QB10

T MW14 //将ACCU1-L中的数据传送到存储器字MW14

T DBD2 //将ACCU1中的数据传送到数据双字DBD2

3.寄存器间接寻址

在存储器间接寻址指令中,给出一个作地址指针的存储器,该存储器的内容是操作数所在存储单元的地址。在循环程序中经常使用存储器间接寻址。

地址指针可以是字或双字,定时器(T)、计数器(C)、数据块(DB)、功能块(FB)和功能(FC)的编号范围小于65535,使用字指针就够了。

其他地址则要使用双字指针,如果要用双字格式的指针访问一个字、宇节或双字存储器,必须保证指针的位编号为0,例如P#Q20.0。

L QB[DBD 10] //将输出字节装入累加器1,输出字节的地址指针在数据双字

//DBD10中;如果DBD10的值为2#00000000000000000000

//000000100000,装入的是QB4

A M[LD 4] //对存储器位作“与”运算,地址指针在数据双字LD4中。如果

//LD4的值为2#00000000000000000000000000100011,

//则是对M4.3进行操作

存储器间接寻址的双字指针格式如图3-17所示,共有两种。

978-7-111-38359-8-Chapter03-18.jpg

图3-17 存储器间接寻址的双字指针格式

其中第0~2位(xxx)为被寻址地址中位的编号(0~7),第3~18位为被寻址地址的字节的编号(0~65535)。第24~26位(rrr)为被寻址地址的区域标识号,第31位x=0为区域内的间接寻址,第31位x=1为区域间的间接寻址。

第一种地址指针格式存储区的类型在指令中给出,例如L DBB[AR1,P#6.0]。在某一存储区内寻址。第24~26位(rrr)应为0。

第二种地址指针格式的第24~26位还包含存储区域标识符rrr,为区域间寄存器间接寻址。表3-2为寄存器间接寻址的区域标识位

如果要用寄存器指针访问一个字节、字或双字,必须保证指针中的位地址编号为0。

指针常数#P5.0对应的二进制数为2#0000 0000 0000 0000 0000 0000 0010 1000。

【实例】 区域内间接寻址的例子。

L P#5.0 //将间接寻址的指针装入累加器1

LAR1 //将累加器1中的内容送到地址寄存器1

表3-2 寄存器间接寻址的区域标识位

978-7-111-38359-8-Chapter03-19.jpg

A M[AR1,P#2.3] //AR1中的P#5.0加偏移量P#2.3,实际上是对M7.3进行操作

= Q[AR1,P#0.2] //逻辑运算的结果送Q5.2

L DBW[AR1,P#18.0] //将DBW23装入累加器1

【实例】 区域间间接寻址的例子。

L P#M6.0 //将存储器位M6.0的双字指针装入累加器1

LAR1 //将累加器1中的内容送到地址寄存器1

T W[AR1,P#50.0] //将累加器1的内容传送到存储器字MW56

P#M6.0对应的二进制数为2#1000 0011 0000 0000 0000 0000 0011 0000。因为地址指针P#M6.0中已经包含有区域信息,使用间接寻址的指令T W[AR1,P#50]中没有必要再用地址标识符M。

4.地址寄存器的装入与传送指令

用地址寄存器的装入与传送指令可以不经过累加器1,与地址寄存器AR1和AR2交换数据。

【实例】 应用地址寄存器AR1和AR2的实例。

LAR1 DBD20 //将数据双字DBD20中的指针装入AR1

LAR2 LD180 //将局域数据双字LD180中的指针装入AR2

LAR1 P#M10.2 //将带存储区标识符的32位指针常数装入AR1

LAR2 P#24.0 //将不带存储区标识符32位指针常数装入AR2

TAR1 DBD20 //AR1中的内容传送到数据双字DBD20

TAR2 MD24 //AR2中的内容传送到存储器双字MD24