Addition: Carries: 1 11111111 1111111 > Number 1: 00000000 11111111 11111111 > Number 2: 01100100 11111111 11111111 -------------------------- Answer: 01100101 11111111 11111110 > The simulator gives out the 24 bit result: > 01100110 00000010 11111101 Looks like some problem related to handling carries between bytes, but since the error isn't consistent I can't guess what exactly is wrong. Multiplication: > Number 1: 00000000 00000010 > Number 2: 00000000 00000001 > > And get the output multiplied > 00010000 00010000 The correct answer is, of course, 2 (00000010). The routine you found either doesn't do what you think it does, was typed in incorrectly, or perhaps you didn't properly assign the input/output/temp registers it needs. I hope you weren't expecting any more specific answers, given that you didn't post the code that produced these strange results. Jason Harper