Adjunto 'anumero1_ex1.s'
Descargar 1 .text
2 .arm
3 .global _start
4 _start:
5 b reset
6 b loop
7 b loop
8 b loop
9 b loop
10 nop
11 b loop
12 b loop
13
14 /* ==============================
15 * TEST CODE
16 * ==============================
17 */
18 reset: ldr sp,=STACK
19 ldr r1,TAMANIO
20 ldr r2,=VECTOR
21 ldr r3,=NUMEROS
22
23 otro: ldr r0,[r2],#4
24 bl anumero
25 str r0,[r3],#4
26 subs r1,#1
27 bne otro
28 loop: b loop
29
30 /* Funcion de pase a numero
31 * Transforma una cadena en ascii a un numero.
32 * Esta cadena posee las siguientes características:
33 * * El número en la cadena se encuentra en base 16
34 * * La cadena se supone que solo posee dígitos hexadecimales, donde las letras se encuentran en mayúsculas, puntos de
35 * * El único signo posible es un '-' y como primer byte, indicando que el número es negativo, si este signo no existe el número es positivo.
36 * Entrada
37 * Dirección de la cadena en r0
38 * Salida
39 * Numero resultante en r0
40 */
41
42 anumero:
43 push {r1-r4}
44 mov r4,#0
45 ldrb r1,[r0] @ si el primer caracter es '-' se activa la bandera de signo a 1 (r4)
46 cmp r1,#'-'
47 moveq r4,#1
48 addeq r0,#1 @ si es negativo desplazo el puntero para no encontrar de nuevo el signo
49 mov r2,#0
50 mov r3,#16
51 anumero_otro:
52 ldrb r1,[r0],#1 @ carga los elementos desde el mas significativo (primer caracter
53
54 cmp r1,#0
55 beq anumero_fin
56 cmp r1,#'.'
57 beq anumero_cont
58 cmp r1,#'9' @ si es menos a '9' es un número si es mayor es una letra
59 subls r1,#'0'
60 subhi r1,#('A'-10)
61 mul r2,r3 @ multiplico acumulador por 16
62 add r2,r1 @ sumo al acumulador el digito
63 @ ejemplo
64 @ entrada = '3','4','A'
65 @ calculo = ((0 * 16 + 3 ) * 16 + 4) * 16 + A
66
67 anumero_cont:
68 b anumero_otro
69 anumero_fin:
70 mov r0,r2
71 cmp r4,#1 @ verifico signo para negar el número si fuera negativo
72 rsbeq r0,r0,#0
73 pop {r1-r4}
74 mov pc,lr
75
76
77 VECTOR: .word NUM1,NUM2
78 NUMEROS: .word 0,0
79 TAMANIO: .word 2
80 NUM1: .asciz "0.A334"
81 NUM2: .asciz "-98"
82 .balign 4
83 .space(200)
84 STACK:
85
86 .end
Archivos adjuntos
Para referirse a los adjuntos de una página, usa attachment:nombredelarchivo, como se muestra abajo en la lista de archivos. NO uses la URL del enlace [get], ya que puede cambiar fácilmente y dejar de funcionar.No tienes permisos para adjuntar un archivo a esta página.