Halfword Instructions:

Up to this point, we have been working with instructions (ST, L, A, etc...) that work with 32-bit signed integers that are stored as fullwords. We're now going to look at a set of instructions that work with 16-bit signed integers that are stored as halfwords.

Halfword storage areas and constants are generated by using DS and DC statements with a storage class of H. Using the H will force halfword alignment.

 

Load Halfword


Format: label    LH    R,D(X,B)

Copies into R the 32-bit representation of the number at the absolute address represented by D(X,B). The 2 leftmost bytes are set to X'0000' if the number is positive or X'FFFF' if the number is negative.

Execution of:

      LH    R4,=H'-12'

will change the contents of register 4 to X'FFFFFFF4'

 

Store Halfword


Format: label    STH   R,D(X,B)

Places a copy of the rightmost 2 bytes of R at the absolute address represented by D(X,B).

Assuming that register 4 contains X'FFFFFFF4', execution of:

      STH    R4,HALF

HALF     DS   H

will change the contents of HALF to X'FFF4'

 

Compare Halfword


Format: label    CH    R,D(X,B)

Compares the rightmost 2 bytes of R to the halfword at the absolute address represented by D(X,B) and sets the condition code.


Code        Meaning
 0          Equality
 1          Halfword in R is low
 2          Halfword at D(X,B) is low

Assuming that register 4 contains X'FFFFFFF4', execution of:

      CH     R4,HALF

HALF     DC   H'5'

will set the condition code to 1 because the contents
of register 4 (-12) is less than the contents of HALF (5)

 

Add Halfword


Format: label    AH    R,D(X,B)

The halfword at D(X,B) is added to the rightmost 2 bytes of R. The sum is stored in R. The condition code is set.


Code        Meaning
 0          Sum is 0
 1          Sum is less than 0
 2          Sum is greater than 0
 3          Overflow - sum cannot be stored as a halfword

Assuming that register 4 contains X'FFFFFFF4', execution of:

      AH    R4,HALF

HALF     DC    H'13'

will change the contents of register 4 to X'00000001'

 

Subtract Halfword


Format: label    SH    R,D(X,B)

The halfword at D(X,B) is subtracted from the rightmost 2 bytes of R. The difference is stored in R. The condition code is set.


Code        Meaning
 0          Difference is 0
 1          Difference is less than 0
 2          Difference is greater than 0
 3          Overflow - difference cannot be stored as a halfword

Assuming that register 4 contains X'FFFFFFF4', execution of:

      SH    R4,HALF

HALF     DC    H'2'

will change the contents of register 4 to X'FFFFFFF2'

 

Multiply Halfword

Multiplying with halfwords is slightly different from multiplying with fullwords. A single register will be used rather than using an even-odd pair.


Format: label    MH    R,D(X,B)

The halfword at D(X,B) and the rightmost 2 bytes of R are multiplied together. The result is stored as a 32-bit number in R.

Assuming that register 5 contains X'FFFFFFF4', execution of:

      MH    R5,HALF

HALF     DC    H'-2'

will change the contents of register 5 to X'00000018'