Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- desplazarAlien
- push {r0-r10,lr}
- ldr r0, =LIM1
- ldr r0, [r0]
- ldr r1, =LIM2
- ldr r1, [r1]
- ldr r6, =alien ;r6 = @Alien (Base de parámetros)
- ldr r3, [r6, #4] ;r3 = Fila
- ldr r2, [r6] ;r2 = Sentido
- sub r0, r0, r3, LSL #5 ;r0 = @Límite izquierdo de la fila
- sub r1, r1, r3, LSL #5 ;r1 = @Límite derecho de la fila
- ldrb r4, [r0] ;r4 = Caracter límite izquierda
- ldrb r5, [r1] ;r5 = Caracter límite derecha
- cmp r2, #0 ;Sentido == Derecha
- beq m_d
- cmp r2, #1
- beq m_i ;Sentido == Izquierda
- m_d cmp r5, #'>' ;Comprueba si está en el límite
- moveq r2, #1 ;Si lo está, cambia el sentido a izquierda
- streq r2, [r6, #4]
- beq fn2
- ; Mover derecha
- ldr r6, [r6, #8] ;r6 = Tamaño
- mov r7, r0 ;r7 = r0 (Dirección base de la búsqueda)
- bsD cmp r4, #'<' ;Caracter @Direccion busqueda == '<'
- beq fD
- add r7, r7, #1 ;++@Direccion busqueda
- ldrb r4, [r7] ;Caracter @Direccion busqueda
- b bsD
- fD mov r8, #' '
- add r9, r7, r6 ;r9 = @Direecion escritura + Tamaño = @Direccion final alien
- dlD cmp r7, r9 ;@Direccion escritura == @Direccion final alien
- bgt rwD
- strb r8, [r7] ;Borra el caracter
- add r7, r7, #1 ;++@Direccion escritura
- b dlD
- rwD sub r7, r7, r6 ;r7 = r7 - Tamaño = @Direccion escritura2 (Reescribir el alien)
- add r7, r7, #1 ;r7 = @Direccion escritura2 + 1 (Ponerlo 1 a la derecha)
- mov r6, r6, LSR #1 ;r6 = Tamaño / 2
- mov r8, #0 ;r8 = i = 0
- mov r9, #'<'
- mov r10, #'>'
- b1D cmp r8, r6 ;i == Tramaño / 2
- moveq r8, #0 ;i = 0
- beq b2D
- strb r9, [r7] ;Pone el caracter '<' (La mitad del alien)
- add r7, r7, #1
- add r8, r8, #1 ;++i
- b b1D
- b2D cmp r8, r6 ;i == Tramaño / 2
- beq fn2
- strb r10, [r7] ;Pone el caracter '>' (La mitad del alien)
- add r7, r7, #1
- add r8, r8, #1 ;++i
- b b2D
- m_i cmp r4, #'<' ;Comprueba si está en el límite
- moveq r2, #0 ;Si lo está, cambia el sentido a derecha
- streq r2, [r6, #4]
- beq fn2
- ; Mover izquierda
- ldr r6, [r6, #8] ;r6 = Tamaño
- mov r7, r0 ;r7 = r0 (Dirección base de la búsqueda)
- bsI cmp r4, #'<' ;Caracter @Direccion busqueda == '<'
- beq fI
- add r7, r7, #1 ;++@Direccion busqueda
- ldrb r4, [r7] ;Caracter @Direccion busqueda
- b bsI
- fI mov r8, #' '
- add r9, r7, r6 ;r9 = @Direccion escritura + Tamaño = @Direccion final alien
- dlI cmp r7, r9 ;@Direccion escritura == @Direccion final alien
- bgt rwI
- strb r8, [r7] ;Borra el caracter
- add r7, r7, #1 ;++@Direccion escritura
- b dlI
- rwI sub r7, r7, r6 ;r7 = r7 - Tamaño = @Direccion escritura2 (Reescribir el alien)
- sub r7, r7, #1 ;r7 = @Direccion escritura2 - 1 (Ponerlo a 1 a la izquierda)
- mov r6, r6, LSR #1 ;r6 = Tamaño / 2
- mov r8, #0 ;r8 = i = 0
- mov r9, #'<'
- mov r10, #'>'
- b1I cmp r8, r6 ;i == Tramaño / 2
- moveq r8, #0 ;i = 0
- beq b2I
- strb r9, [r7] ;Pone el caracter '<' (La mitad del alien)
- add r7, r7, #1
- add r8, r8, #1 ;++i
- b b1I
- b2I cmp r8, r6 ;i == Tramaño / 2
- beq fn2
- strb r10, [r7] ;Pone el caracter '>' (La mitad del alien)
- add r7, r7, #1
- add r8, r8, #1 ;++i
- b b2I
- fn2 pop {r0-r10,pc}
- fin b fin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement