No, if this is a problem, then you employ my favorite stupid compiler
trick, replacing a constant (odd) division with multiplication by the ring
reciprocal (this only works when you know that the remainder will be zero,
but that is the case for address arithmetic, or else the result is either
un- or implementation-defined).

For example, if you have a structure that is 12 bytes long, you might
compute "a-b" as:

This can also be used to replace a rest for (unsigned)
remainder-equal-to-zero with a bounds test on the "quotient" (if the
"quotient" is greater than floor((2**wordsize)/divisor), then the remainder
cannot be zero).

The code to compute inverses in a ring follows. You need a compiler that
supports 64 bit integers if you want to generate results for 32 bits, and
you need Ansi C in either case. The relevant formatting and type
definitions/macros appear at the beginning of the file. The magic number
above was obtained thusly:

% ./invert
Enter number to invert and modulus of ring to invert in: 3 4294967296
invert(4294967296, 3) returns 2863311531
Inverse of 3 (3) in 4294967296 (100000000) is 2863311531 (aaaaaaab),
product is 1
Enter number to invert and modulus of ring to invert in:^D