Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.27 KB | None | 0 0
  1. #include "bigint.h"
  2. #include "bigintprivate.h"
  3. .global BigInt_add
  4. .code 32
  5.  
  6.  
  7. BigInt_larger:
  8.         cmp     r4, r3  @if (iLength1 > iLength2)
  9.         movlt   r4, r3  @iLarger = iLength1;
  10.         b BigInt_for1
  11.  
  12.  
  13. BigInt_add:
  14.         @program initials
  15.         push    {r3, r4, r5, r6, r7, lr}
  16.         ldr     r4, [r0]
  17.         ldr     r3, [r1]
  18.         b BigInt_larger
  19.         cmp     r4, #0
  20.         mov     lr, r4
  21.         ble     exit1           @exit the program
  22.         mov    r6, #0
  23.         mov     r7, r2
  24.         mov     r3, r6
  25.  
  26.  
  27. BigInt_for1:
  28.                 cmp     r4, #0 @for (i = 0; i < iSumLength; i++)
  29.         mov     lr, r4
  30.         ble     exit1           @exit the loop
  31.         movs    r6, #0
  32.         mov     r7, r2
  33.         mov     r3, r6
  34.  
  35. BigInt_for2:
  36.         adds    r6, r6, #1              @i++
  37.         ldr     r5, [r0, #4]!           @oAddend1->auiDigits[i]
  38.         ldr     r4, [r1, #4]!           @oAddend2->auiDigits[i];
  39.         add     r3, r3, r5              @uiSum += oAddend1->auiDigits[i];
  40.         cmp     r5, r3                  @if (uiSum < oAddend1->auiDigits[i]
  41.         movls   r5, #0                  @uiCarry = 0;
  42.         movhi   r5, #1                  @uiCarry = 1;
  43.         adds    r4, r3, r4              @uiSum += oAddend2->auiDigits[i];
  44.         str     r4, [r7, #4]!
  45.         movcc   r3, r5                  @oSum->auiDigits[i] = uiSum;
  46.         movcs   r3, #1
  47.         cmp     r6, lr                  @i < iSumLength
  48.         bne     BigInt_for2             @new for loop iterration
  49.         cmp r3, #1                      @if (uiCarry == 1)
  50.         beq if1
  51. exit1:
  52.         str     lr, [r2]
  53.         movs    r0, #1                  @return True
  54.         pop     {r3, r4, r5, r6, r7, pc}        @exit
  55. if1:
  56.         cmp     lr, #32768              @if (iSumLength == MAX_DIGITS)
  57.         beq     return_f                                @return FALSE;
  58.         add     r1, r2, lr, lsl #2      @auiDigits[iSumLength]
  59.         add     lr, lr, #1              @iSumLength++;
  60.         str     r3, [r1, #4]            @oSum->auiDigits[iSumLength] = 1;
  61.         str     lr, [r2]
  62.         movs    r0, #1
  63.         pop     {r3, r4, r5, r6, r7, pc}
  64. return_f:
  65.         movs    r0, #0                  @return FALSE;
  66.         pop     {r3, r4, r5, r6, r7, pc}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement