S7-300 có hai thanh ghi 32bits được dùng làm con trỏ thay vì phải sử dụng một từ
(MW,DBW,LW) hay từ kép (MD,DBD,LD).Hai thanh ghi này có tên là AR1 và AR2.Đặc biệt tuy hai thanh ghi con trỏ này chỉ chứa địa chỉ bit( có thể có hoặc không có phần chữ của địa chỉ),song lại có thể sử dụng để truy nhập ô nhớ có kích thước nhiều hơn một bit như byte,từ hoặc từ kép.
Ta phân biệt hai trường hợp :
- AR là con trỏ địa phương chỉ vị trí bit trong từng vùng ,không chứa phần chữ của địa chỉ (area internal register)
- AR là con trỏ toàn cục chỉvị trí bit trong bộ nhớ ,chứa cả phần chữ và phần số của địa chỉ (area crssing register)
a/Khai báo giá trị thanh ghi AR: Hai thanh ghi AR được gán giá trị bằng lệnh
Cú pháp: LAR1 [P# <địa chỉ bit >] LAR2 [P# <địa chỉ bit >]
Toán hạng của lệnh gán gia 1trị có cấu trúc:
P#[ < tên vùng bộ nhớ >] < địa chỉ byte > . < số thứ tự bit >
Lệnh có thể có hoặc không có toán hạng .Nếu không có toán hạng ,lệnh sẽ chuyển nội dung của ACCU1 vào thanh ghi AR1 hoặc AR2.Trường hợp có toán hạng ,lệnh chuyển giá trị toán hạng vào thanh ghi AR1 hoặc AR2.Lệnh này không làm thay đổi nội dung thanh ghi trạng thái .
Giá trị chuyển vào thanh ghi AR phải có cấu trúc đúng của một con trỏ chỉ bit với dạng như sau Một điểm khác biệt nữa của việc truy nhập gián tiếp thông qua con trỏ AR so với con trỏ kiểu
MD là ô nhớ được truy nhập có một khoảng cách nhất định theo chiều tăng (offset) so với ô nhớ mà AR chỉ vào (hình 2.24).Offset có đơn vị nhỏ nhất tính theo bit với cấu trúc trong lệnh truy nhập như sau:
<tên lệnh> <vùng và kích thước> [ Arx,P# <số byte >.<Số bit>]
Offset
Trừ trường hợp truy nhập bit (A,O,=,….),trong lệnh phải ghi rõ kích thước mảng bit của ô nhớ được truy nhập (B,W hay D).Nếu con trỏ được sử dụng là con trỏ địa phương ,thì còn phải cho biết vùng bộ nhớ được truy nhập trong bộ nhớ ( M,P,I,Q,DB hay DI)
Đặc biệt thanh ghi AR không chỉ tới được vùng đệm PQ của các cổng ra tương tự .Giá trị P#P…. của toán hạng chỉ địa chỉ được tự động hiểu là địa chỉ của cổng vào tương tự.
Ví dụ 1:
LAR1 P#1.0 //Thanh ghi AR1 được dùng làm con trỏ địa phương LAR2 P#M10.0 //Thanh ghi AR2 được dùng làm con trỏ toàn cục A [ AR2,P#1.3] //Truy nhập ô nhớ M11.3
= Q[AR1,P#0.2] //Đưa giá trị ra cổng Q1.2
L IB[AR1,P#0.0] //Đọc 8 cổng vào IB1 ( I1.0 – I1.7)