Op Code (Hex) | Extender | Operand 1 | Operand 2 | Operand 3 | Operand [4-6] |
---|---|---|---|---|---|
REM 1073 |
| Remainder | Dividend | Divisor |
|
| |||||
REMI 1873 | Indicator options | Remainder | Dividend | Divisor | Indicator targets |
| |||||
REMB 1C73 | Branch options | Remainder | Dividend | Divisor | Branch targets |
Operand 2: Numeric scalar.
Operand 3: Numeric scalar.
Operand 4-6:
Op Code (Hex) | Extender | Operand 1 | Operand 2 | Operand [3-5] |
---|---|---|---|---|
REMS 1173 |
| Remainder/Dividend | Divisor |
|
| ||||
REMIS 1973 | Indicator options | Remainder/Dividend | Divisor | Indicator targets |
| ||||
REMBS 1D73 | Branch options | Remainder/Dividend | Divisor | Branch targets |
Operand 2: Numeric scalar.
Operand 3-5:
Description: The remainder is the result of dividing the dividend by the divisor and placing the remainder in operand 1.
Operands can have packed or zoned decimal, signed or unsigned binary type.
Source operands are the dividend and divisor. The receiver operand is the remainder.
If operands are not of the same type, source operands are converted according to the following rules:
Source operands are divided according to their type. Packed decimal operands are divided using packed decimal division. Unsigned binary division is used with unsigned source operands. Signed binary operands are divided using two's complement binary division.
Better performance can be obtained if all operands have the same type. Signed and unsigned binary division execute faster than packed decimal division.
The operands must be numeric with any implicit conversions occurring according to the rules of arithmetic operations as outlined in the Arithmetic Operations.
Floating-point is not supported for this instruction.
If the divisor has a numeric value of 0, a zero divide (hex 0C0B) exception is signaled. If the dividend has a value of 0, the result of the division is a zero value remainder.
For a decimal operation, the internal quotient value produced by the divide operation is always calculated with a precision of zero fractional digit positions. If necessary, internal alignment of the assumed decimal point for the dividend and divisor operands is performed to insure the correct precision for the resultant quotient value. These internal alignments are not subject to detection of the decimal point alignment exception. An internal quotient and the corresponding remainder value will be calculated for any combination of decimal attributes which may be specified for the instruction's operands. However, as described below, the assignment of the remainder value is limited to that portion of the remainder value which fits in the remainder operand.
If the dividend is shorter than the divisor, it is logically adjusted to the length of the divisor.
The division operation is performed according to the rules of algebra. Unsigned binary is treated as a positive number for the algebra. Before the remainder is calculated, an intermediate quotient is calculated. The attributes of this quotient are derived from the attributes of the dividend and divisor operands as follows:
Dividend | Divisor | Intermediate Quotient |
---|---|---|
IM,SIM or SBIN(2)
|
IM,SIM or SBIN(2)
|
SBIN(2)
|
IM,SIM or SBIN(2)
|
SBIN(4)
|
SBIN(4)
|
IM,SIM,SBIN(2) or UBIN(2)
|
DECIMAL(P2,Q2)
|
DECIMAL(5+Q2,0)
|
IM,SIM,SBIN(2) or SBIN(4)
|
UBIN(2) or UBIN(4)
|
UBIN(4)
|
UBIN(2) or UBIN(4)
|
IM,SIM,SBIN(2) or SBIN(4)
|
UBIN(4)
|
UBIN(2) or UBIN(4)
|
UBIN(2) or UBIN(4)
|
UBIN(4)
|
SBIN(4)
|
IM,SIM or SBIN(2)
|
SBIN(4)
|
SBIN(4) or UBIN(4)
|
DECIMAL(P2,Q2)
|
DECIMAL(10+Q2,0)
|
DECIMAL(P1,Q1)
|
IM,SIM,SBIN(2) or UBIN(2)
|
DECIMAL(P1,0)
|
DECIMAL(P1,Q1)
|
SBIN(4) or UBIN(4)
|
DECIMAL(P1,0)
|
DECIMAL(P1,Q1)
|
DECIMAL(P2,Q2)
|
DECIMAL(P1-Q1+Q,0)
Where Q = Larger of Q1 or Q2
|
Note:
IM = IMMEDIATE SIM = SIGNED IMMEDIATE SBIN = SIGNED BINARY UBIN = UNSIGNED BINARY DECIMAL = PACKED OR ZONED |
After the intermediate quotient numeric value has been determined, the numeric value of the remainder operand is calculated as follows:
Remainder = Dividend - (Quotient*Divisor)When signed arithmetic is used, the sign of the remainder is the same as that of the dividend unless the remainder has a value of 0. When the remainder has a value of 0, the sign of the remainder is positive.
The resultant value of the calculation is copied into the remainder operand. If this operand is not the same type as that used in performing the operation, the resultant value is converted to its type. If necessary, the resultant value is adjusted to the length of the remainder operand, aligned at the assumed decimal point of the remainder operand, or both before being copied to it. Length adjustment and decimal point alignment are performed according to the rules of arithmetic operations as outlined in Arithmetic Operations.
If significant digits are truncated on the left end of the resultant value, a size (hex 0C0A) exception is signaled for those programs that request to be notified of size exceptions.
If a decimal to binary conversion causes a size (hex 0C0A) exception to be signaled in programs that request to be notified of size exceptions, the binary value contains the correct truncated result only if the decimal value contains 15 or fewer significant nonfractional digits.
06 Addressing
08 Argument/Parameter
0C Computation
10 Damage Encountered
1C Machine-Dependent
20 Machine Support
22 Object Access
24 Pointer Specification
2C Program Execution
2E Resource Control Limit
36 Space Management
44 Protection Violation