I'm not sure what you mean with the "address is 3 bytes" (unless you're on a 24bit system?) :) The memory addresses are probably 32 bit (4 bytes), but the addresses have probably a null byte in them, so you want a way to introduce a null byte in your shellcode.
What you can do, is a bit-shift on a register. This will - as the name implies- shift the bits to a direction that you want; right in this case, and fill up with zeroes. (0x11223344 -> 0x00112233)
The following code will make EAX into 0x00112233
05 44 33 22 11 add $0x11223344,%eax
c1 e8 08 shr $0x8,%eax
And as you can see in the hex codes, there's no null byte introduced in the shellcode.
Alternatively, you can work with lower registers (ax, al, ...) and rotate all the bits around. Of you can calculate the inverse value using a bitwise NOT, for example: 0xffedcba9 is the bitwise NOT value of 0x00123456. Or you could XOR 2 values to get to your address.