Если я правильно понял, вот эту условную программу надо было изобразить?

## Код:
```
WHILE (i < cnt) & (S.GET(src + offs) # p) DO INC(i); INC(src, elemSize) END;
```


Почему бы не вот так:
## Код:
```
i := 0; done := i >= cnt;
WHILE ~done DO
   S.GET(src + offs, val); done := val = S.VAL(Mem.AddrInt, p);
   IF ~done THEN INC(i); INC(src, elemSize) END
END
```


Двойной LOOP - тяжело понимать.