Nowadays, the word byte
is invariably used to mean 8 bits (it didn't always use to be so, which is why the word octet
, specifically defined to mean exactly 8 bits, is still used in documents when precision is required, e.g. when specifying communication protocols).
So, you compute how many bits you have to address, divide by 8, and that's how many bytes you have to address. The number of bits you need in each address is obviously the ceiling of the logarithm in base 2 of the number of distinct bytes you need to address -- I sure hope that part doesn't come as a surprise;-).
The term word
is still pretty ambiguous: depending on the context it can mean 16 bits, or 32 bits, or even more. Anyway, once you know how many bits that means, the process is exactly the same as for bytes, just substitute 32 (or whatever) in lieu of 8 in the previous paragraph.
Of course this applies just as well to a single module as to the whole memory -- in each case, compute the number of bits, divide to get the number of bytes or words, log2, then take the ceiling of that (obviously the last step's not needed if the log2 is integer;-).