pTAL Reference Manual (G06.24+, H06.09+, J06.03+)
IF @s = b THEN ... ! OK: @s is BADDR, b is BADDR
IF @s = @b THEN ... ! ERROR: @s is BADDR, @b is WADDR
• If one operand of a relational operator is a nonextended address and the other is a constant,
the constant must be 16 bits in length:
INT .p;
IF @p = 100 THEN ... ! OK
IF @p = 100D THEN ... ! ERR
Table 32 Valid Address Expressions
ExamplesResult TypeTemplate
INT .EXT p;
@p := @p[2];
atype *atype [k];
INT .p;
@p := @p '+' 2;
@p := @p '-' 4;
atype *atype '+' INT
INT .p;
@p := 2 '+' @p;
atype *INT '+' atype
INT .EXT p;
@p := @p + 4D;
@p := @p – 4D;
EXTADDREXTADDR '±' INT(32)
INT .EXT p;
@p := 4D '+' @p;
EXTADDRINT(32) '+' EXTADDR
INT .EXT32 p;
@p := @p + 4D;
@p := @p – 4D
EXT32ADDR**EXT32ADDR ± INT(32)
INT .EXT32 p;
@p := 4D + @p;
EXT32ADDR**INT(32) + EXT32ADDR
INT .EXT64 p;
@p := @p + 8F;
@p := @p – 8F;
EXT64ADDR**EXT64ADDR ± FIXED
INT .EXT64 p;
@p := 8F + @p;
EXT64ADDR**FIXED + EXT64ADDR
INT .b, .bp, i;
i := @bp '-' @b;
INTatype '-' atype
The result of subtracting two byte-oriented (BADDR,
CBADDR, SGBADDR, SGXBADDR) addresses is the
number of bytes between them.
The result of subtracting two word-oriented (WADDR,
CWADDR, SGWADDR, SGXWADDR) addresses is
the number of 16-bit words between them.
INT .EXT b, bp, i32;
i32 := @bp - @b;
INT(32)**EXTADDR - EXTADDR
EXT32ADDR - EXT32ADDR INT(32)
INT.EXT32 b, bp;
INT(32) i32;
i32 := @bp - @b;
EXTADDR - EXT32ADDR INT(32) INT.EXT b;
INT.EXT32 bp;
INT(32) i32;
i32 := @bp - @b;
EXT32ADDR - EXTADDR INT(32) INT.EXT32
b;
INT.EXT bp;
Comparing Addresses 79