adding 32bit numbers in 16bit processor

Guest
If I had a 16 bit processor, how do I add two 32 bit numbers with it?
 
isnullpr@gmail.com wrote:
If I had a 16 bit processor, how do I add two 32 bit numbers with it?
Search for 'multiple precision addition'


Cheers

PeteS
 
isnullpr@gmail.com schrieb:
If I had a 16 bit processor, how do I add two 32 bit numbers with it?
Every addition generates a carry-out. Therefore the carry-out from the
addition of the lower word has to be added during the addition of the
upper word.

Ralf
 
OK, so first I add the lower 16 bits of each number.Then add the top 16
bits of each number, and to that I add the carry-out from adding the
bottom 16 bits...correct?... but how do I separate the upper bits from
the lower bits? is there some operation or instruction for that?
something like a ShiftR or ShiftL?

thanks for the help!

Ralf Hildebrandt wrote:
isnullpr@gmail.com schrieb:
If I had a 16 bit processor, how do I add two 32 bit numbers with it?

Every addition generates a carry-out. Therefore the carry-out from the
addition of the lower word has to be added during the addition of the
upper word.

Ralf
 
IsNull wrote:

but how do I separate the upper bits from
the lower bits? is there some operation or instruction for that?
something like a ShiftR or ShiftL?
If you have this:

signal foo: unsigned(32 downto 0);

you can select the upper bits like this:

foo(31 downto 16)

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
 
IsNull wrote:
OK, so first I add the lower 16 bits of each number.Then add the top 16
bits of each number, and to that I add the carry-out from adding the
bottom 16 bits...correct?... but how do I separate the upper bits from
the lower bits? is there some operation or instruction for that?
something like a ShiftR or ShiftL?

thanks for the help!

Ralf Hildebrandt wrote:

isnullpr@gmail.com schrieb:

If I had a 16 bit processor, how do I add two 32 bit numbers with it?

Every addition generates a carry-out. Therefore the carry-out from the
addition of the lower word has to be added during the addition of the
upper word.

Ralf
I don't know if you are doing this with a processor or in HDL of some
description.

Here it is in pseudocode for a processor

we have two numbers - a and b, made up of a[low], a[high], b[low],
b[high], and a result r[low], r[high].

I'll note an important point at the end

Add a[low], b[low] -> r[low]. This may generate a carry, which we use below

add a[high], b[high], carry -> r[high]

There may be a final carry. If you add two values of precision n bits,
the result can have n+1 bits. That's why you chain the carry from the
low order addition.

In HDL, it's not any more work (especially if you use the primitives
with most compilers).

Cheers

PeteS
 
ok, I see what you are saying..., I'm dealing with a 16-bit accumulator
based processor, I'm trying to figure out a good way of adding 32-bit
numbers with it using its assembly language... I only have 1 register
which is the accumulator and a very limited group of intuctions on its
instruction set.(instructions: Add, Addi, Load, Loadi,Comp,
ShR,BrN,BrNi,Jump,Jumpi,Store,Storei). for example:, if I were to add
4+3 and store it on memory location 1008 the code looks something like
this:
andi 0 # resets accumulator to 0
addi 4 # adds 4 to the accumulator
storei 1000 # stores the value on memory address 1000
andi 0
addi 3
storei 1004
loadi 1000
addi 1004
storei 1008

It's simple but confusing if you are used to x86 or MIPS programming.
so I'm trying to write something like that to add 32bit numbers...

thanks.

PeteS wrote:
IsNull wrote:
OK, so first I add the lower 16 bits of each number.Then add the top 16
bits of each number, and to that I add the carry-out from adding the
bottom 16 bits...correct?... but how do I separate the upper bits from
the lower bits? is there some operation or instruction for that?
something like a ShiftR or ShiftL?

thanks for the help!

Ralf Hildebrandt wrote:

isnullpr@gmail.com schrieb:

If I had a 16 bit processor, how do I add two 32 bit numbers with it?

Every addition generates a carry-out. Therefore the carry-out from the
addition of the lower word has to be added during the addition of the
upper word.

Ralf



I don't know if you are doing this with a processor or in HDL of some
description.

Here it is in pseudocode for a processor

we have two numbers - a and b, made up of a[low], a[high], b[low],
b[high], and a result r[low], r[high].

I'll note an important point at the end

Add a[low], b[low] -> r[low]. This may generate a carry, which we use below

add a[high], b[high], carry -> r[high]

There may be a final carry. If you add two values of precision n bits,
the result can have n+1 bits. That's why you chain the carry from the
low order addition.

In HDL, it's not any more work (especially if you use the primitives
with most compilers).

Cheers

PeteS
 

Welcome to EDABoard.com

Sponsor

Back
Top