278
Rabbit 3000 Microprocessor User’s Manual
B.1.9 New Opcodes
Eight new opcodes were added to the Rabbit 3000A. UMA and UMS allow multiply-and-
add and multiply-and-subtract operations on large integers, and were added to speed up
common cryptographic math used in public-key calculations. The remaining six expand
the block copy operations available, especially to and from I/O addresses (internal and
B.1.9.1 New UMA/UMS Opcodes
The new UMA and UMS opcodes perform the following operation:
{CY:DE':(HL)} = (IX) ± [(IY) * DE + DE' + CY];
where HL, IX, and IY increment after each byte, repeated BC times. This fundamental
operation allows the addition or subtraction of two arbitrarily-long unsigned integers after
one is scaled by a single-byte value. This operation is common in many cryptographic
operations.
Table B-6. New Rabbit 3000 Opcodes
Instruction Bytes
clk
A I S Z V C
Operation
UMA
2
8+8i
----
*
{CY:DE':(HL) = (IX) + [(IY) * DE + DE' + CY];
BC = BC-1; IX = IX+1; IY = IY+1; HL = HL+1;
repeat while BC !=0
UMS
2
8+8i
----
*
{CY:DE:(HL) = (IX) - [(IY) * DE + DE' + CY];
BC = BC-1; IX = IX+1; IY = IY+1; HL = HL+1;
repeat while BC !=0
LDDSR
26+7i
d
-
*
-
(DE) = (HL); BC = BC - 1; HL = HL - 1;
repeat while BC != 0
LDISR
26+7i
d
-
*
-
(DE) = (HL); BC = BC - 1; HL = HL + 1;
repeat while BC != 0
LSDR
26+7i
s
-
*
-
(DE) = (HL); BC = BC - 1; DE = DE - 1;
HL = HL - 1; repeat while BC != 0
LSIR
26+7i
s
-
*
-
(DE) = (HL); BC = BC - 1; DE = DE + 1;
HL = HL + 1; repeat while BC != 0
LSDDR
26+7i
s
-
*
-
(DE) = (HL); BC = BC - 1; DE = DE - 1;
repeat while BC != 0
LSIDR
26+7i
s
-
*
-
(DE) = (HL); BC = BC - 1; DE = DE + 1;
repeat while BC != 0