Advertisement
Guest User

Untitled

a guest
May 28th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. desplazarAlien
  2. push {r0-r10,lr}
  3. ldr r0, =LIM1
  4. ldr r0, [r0]
  5. ldr r1, =LIM2
  6. ldr r1, [r1]
  7. ldr r6, =alien ;r6 = @Alien (Base de parámetros)
  8. ldr r3, [r6, #4] ;r3 = Fila
  9. ldr r2, [r6] ;r2 = Sentido
  10. sub r0, r0, r3, LSL #5 ;r0 = @Límite izquierdo de la fila
  11. sub r1, r1, r3, LSL #5 ;r1 = @Límite derecho de la fila
  12.  
  13. ldrb r4, [r0] ;r4 = Caracter límite izquierda
  14. ldrb r5, [r1] ;r5 = Caracter límite derecha
  15.  
  16. cmp r2, #0 ;Sentido == Derecha
  17. beq m_d
  18. cmp r2, #1
  19. beq m_i ;Sentido == Izquierda
  20.  
  21. m_d cmp r5, #'>' ;Comprueba si está en el límite
  22. moveq r2, #1 ;Si lo está, cambia el sentido a izquierda
  23. streq r2, [r6, #4]
  24. beq fn2
  25.  
  26. ; Mover derecha
  27.  
  28. ldr r6, [r6, #8] ;r6 = Tamaño
  29. mov r7, r0 ;r7 = r0 (Dirección base de la búsqueda)
  30. bsD cmp r4, #'<' ;Caracter @Direccion busqueda == '<'
  31. beq fD
  32. add r7, r7, #1 ;++@Direccion busqueda
  33. ldrb r4, [r7] ;Caracter @Direccion busqueda
  34. b bsD
  35. fD mov r8, #' '
  36. add r9, r7, r6 ;r9 = @Direecion escritura + Tamaño = @Direccion final alien
  37. dlD cmp r7, r9 ;@Direccion escritura == @Direccion final alien
  38. bgt rwD
  39. strb r8, [r7] ;Borra el caracter
  40. add r7, r7, #1 ;++@Direccion escritura
  41. b dlD
  42. rwD sub r7, r7, r6 ;r7 = r7 - Tamaño = @Direccion escritura2 (Reescribir el alien)
  43. add r7, r7, #1 ;r7 = @Direccion escritura2 + 1 (Ponerlo 1 a la derecha)
  44. mov r6, r6, LSR #1 ;r6 = Tamaño / 2
  45. mov r8, #0 ;r8 = i = 0
  46. mov r9, #'<'
  47. mov r10, #'>'
  48. b1D cmp r8, r6 ;i == Tramaño / 2
  49. moveq r8, #0 ;i = 0
  50. beq b2D
  51. strb r9, [r7] ;Pone el caracter '<' (La mitad del alien)
  52. add r7, r7, #1
  53. add r8, r8, #1 ;++i
  54. b b1D
  55. b2D cmp r8, r6 ;i == Tramaño / 2
  56. beq fn2
  57. strb r10, [r7] ;Pone el caracter '>' (La mitad del alien)
  58. add r7, r7, #1
  59. add r8, r8, #1 ;++i
  60. b b2D
  61.  
  62. m_i cmp r4, #'<' ;Comprueba si está en el límite
  63. moveq r2, #0 ;Si lo está, cambia el sentido a derecha
  64. streq r2, [r6, #4]
  65. beq fn2
  66.  
  67. ; Mover izquierda
  68.  
  69. ldr r6, [r6, #8] ;r6 = Tamaño
  70. mov r7, r0 ;r7 = r0 (Dirección base de la búsqueda)
  71. bsI cmp r4, #'<' ;Caracter @Direccion busqueda == '<'
  72. beq fI
  73. add r7, r7, #1 ;++@Direccion busqueda
  74. ldrb r4, [r7] ;Caracter @Direccion busqueda
  75. b bsI
  76. fI mov r8, #' '
  77. add r9, r7, r6 ;r9 = @Direccion escritura + Tamaño = @Direccion final alien
  78. dlI cmp r7, r9 ;@Direccion escritura == @Direccion final alien
  79. bgt rwI
  80. strb r8, [r7] ;Borra el caracter
  81. add r7, r7, #1 ;++@Direccion escritura
  82. b dlI
  83. rwI sub r7, r7, r6 ;r7 = r7 - Tamaño = @Direccion escritura2 (Reescribir el alien)
  84. sub r7, r7, #1 ;r7 = @Direccion escritura2 - 1 (Ponerlo a 1 a la izquierda)
  85. mov r6, r6, LSR #1 ;r6 = Tamaño / 2
  86. mov r8, #0 ;r8 = i = 0
  87. mov r9, #'<'
  88. mov r10, #'>'
  89. b1I cmp r8, r6 ;i == Tramaño / 2
  90. moveq r8, #0 ;i = 0
  91. beq b2I
  92. strb r9, [r7] ;Pone el caracter '<' (La mitad del alien)
  93. add r7, r7, #1
  94. add r8, r8, #1 ;++i
  95. b b1I
  96. b2I cmp r8, r6 ;i == Tramaño / 2
  97. beq fn2
  98. strb r10, [r7] ;Pone el caracter '>' (La mitad del alien)
  99. add r7, r7, #1
  100. add r8, r8, #1 ;++i
  101. b b2I
  102.  
  103. fn2 pop {r0-r10,pc}
  104.  
  105. fin b fin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement