Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 1.90 KB | None | 0 0
  1.  PRESERVE8
  2.     THUMB
  3.     GET       config.s
  4.     GET       stm32f10x.s
  5.  
  6.     AREA      RESET, CODE, READONLY
  7.  
  8.     DCD       STACK_TOP
  9.     DCD       Reset_Handler
  10.  
  11.     ENTRY
  12.  
  13. Reset_Handler    PROC
  14.     EXPORT    Reset_Handler
  15.  
  16. main                                           
  17.     MOV         R0, #4                      ;   R0 Порядок полинома                 
  18.     MOV32       R1, 0x20000200                  ;   R1 Указатель на область памяти
  19.     MOV         R3, #9                      ;   R3 Значение переменной полинома
  20.     MOV         R4, #0                      ;   R4 Результат              
  21.     PUSH        {R0,R1,R3}
  22.     BL          poli
  23. loop
  24.     B           loop
  25.     ENDP
  26.        
  27.  
  28. poli            PROC                           
  29.     MOV         R5, #0                  ;   Обнуляем R5                        
  30.     MOV         R6, R0
  31.     CMP         R0, #1                     
  32.     IT          HI
  33.     BHI         exp                         ;   if(R0>1)
  34.     B           final                           ;   if(R0=1)
  35.    
  36. exp                                 ;   Возведение в степень R3 в R0
  37.     CMP         R0,#1      
  38.     BEQ         next                        ;   если степень больше 1 то возводим
  39.     CMP         R5,#0                       ;   проверка, если R5=0 то R5=R3*R3 если нет то R5=R5*R3
  40.     ITE         EQ
  41.     MULEQ       R5, R3, R3                      ;   R5=R3*R3
  42.     MULNE       R5, R3                      ;   R5=R5*R3     
  43.     SUB         R0,#1
  44.     B           exp
  45.    
  46. next                                                ;   Считаем остальную часть
  47.     MOV         R0, R6                      ;   Восстанавливаем R0
  48.     MOV         R6, #0                  ;   Обнуляем R6
  49.     LDR         R2,[R1]                     ;   в R2 значение по адресу R1
  50.     MUL         R6, R5, R2                      ;   R6=R5*R2=R3^R0*[R1]    
  51.     ADD         R4, R4, R6                      ;   R4=R4+R6
  52.     ADD         R1, #4              ;   Считываем следующие 32 бита
  53.     SUB         R0, #1                          ;   Вычитаем еденицу и считаем дальше
  54.     B           poli                           
  55.    
  56. final          
  57.     LDR         R2,[R1]
  58.     MUL         R3, R2     
  59.     ADD         R1, #4
  60.     LDR         R2,[R1]
  61.     ADD         R3, R2
  62.     ADD         R4, R4, R3
  63.     POP         {R3,R1,R0}
  64.     BX          LR
  65.     ENDP       
  66.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement