Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 1.57 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.     MOV32     R0, 0x20000200        ; R0 - array start (arr)
  18.     MOV       R1, #64               ; R1 - array size (size)
  19.     MOV       R2, #0                ; R2 - array position (pos)
  20.  
  21.  
  22. loop
  23.     CMP       R2, R1                ; while (pos != aray_size)
  24.     BLNE      swap
  25.  
  26.     B         loop
  27.  
  28.     ENDP
  29.        
  30. swap          PROC
  31.    
  32.     MOV      R3, R0                 ; R3 == arr
  33.     MOV      R4, R2                 ; R4 == pos
  34.     ADD      R3, R4                 ; R3 == arr + pos
  35.    
  36.    
  37.     LDRB     R5, [R3]               ; load 8 bits into R5
  38.     LDRB     R6, [R3]               ; load 8 bits into R6
  39.     AND      R5, #0xF0              ; R5 AND 11110000
  40.     AND      R6, #0x0F              ; R6 AND 00001111
  41.     LSRS     R5, R5, #4             ; shift R5 to right 4 times
  42.     LSLS     R6, R6, #4             ; shift R6 to left 4 times
  43.     ORR      R6, R5                 ; R6 OR R5
  44.     MOV      R5, R6                 ; copy R6 to R5
  45.    
  46.     AND      R5, #0xCC              ; R5 AND 11001100
  47.     AND      R6, #0x33              ; R6 AND 00110011
  48.     LSRS     R5, R5, #2             ; shift R5 to right 2 times
  49.     LSLS     R6, R6, #2             ; shift R6 to left 2 times
  50.     ORR      R6, R5                 ; R6 OR R5
  51.     MOV      R5, R6                 ; copy R6 to R5
  52.  
  53.     AND      R5, #0xAA              ; R5 AND 10101010
  54.     AND      R6, #0x55              ; R6 AND 01010101
  55.     LSRS     R5, R5, #1             ; shift R5 to right 1 time
  56.     LSLS     R6, R6, #1             ; shift R6 to left 1 time
  57.     ORR      R6, R5                 ; R6 OR R5
  58.    
  59.          
  60.    
  61.     STRB      R6, [R3]              ; copy result back to R3
  62.     ADD       R2, #1                ; pos++
  63.  
  64.     BX        LR
  65.     ENDP
  66.        
  67.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement