Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Ejercicios basicos en Ensamblador, Ejercicios de Ingeniería Infórmatica

Asignatura: Fundamentos de Computadores, Profesor: ja ja, Carrera: Ingeniería Informática, Universidad: UCM

Tipo: Ejercicios

2014/2015
En oferta
30 Puntos
Discount

Oferta a tiempo limitado


Subido el 18/11/2015

javierberdecio
javierberdecio 🇪🇸

4.4

(83)

6 documentos

1 / 12

Documentos relacionados


Vista previa parcial del texto

¡Descarga Ejercicios basicos en Ensamblador y más Ejercicios en PDF de Ingeniería Infórmatica solo en Docsity! Problemas de Arquitectura del Repertorio de Instrucciones - ARM 1. Indica cuál es el resultado de ejecutar las siguientes instrucciones, dando el contenido final de los registros y posiciones de memoria para cada instrucción. Se supone que para cada instrucción a ejecutar el contenido de los registros y posiciones de memoria es el siguiente: Registros r0 0x00000016 r1 0x00000054 r2 0xFFFFFFFF r3 0x00000000 r4 0x00000004 Memoria 0x00000000 0x03393826 0x00000004 0xEA0063AF 0x00000008 0x17FA8912 0x0000000C 0xBC983304 0x00000010 0x7845F34A 0x00000014 0x534B4AAA 1. add r3, r0, r1 2. add r2, r2, #1 3. sub r4, r1, r0 4. sub r4, r0, r1 5. mul r4, r0, r1 6. or r3, r1, r0 1. mov r4, #0 2. lsr r2, r0, r4 3. ldr r0, [r4] 4. ldr r0, [r4,#-4] 5. str r2, [r4,r3] 6. str r2, [r0] RESPUESTA 1 1. r3 0x0000006A r4 0x00000000 2. r2 0x00000000 r2 0x00000001 3. r4 0x0000003E r0 0xEA0063AF 4. r4 0xFFFFFFC2 r0 0x03393826 5. r4 0x00000738 0x00000004 - 0xFFFFFFFF 6. r3 0x00000056 Dirección no múltiplo de 4 2. Codifica en ensamblador la siguiente condición IF-THEN: if (x >= y) { x = x+2; y = y-2; } RESPUESTA 2. ldr r1, =x ldr r2, =y ldr r3, [r1] ldr r4, [r2] cmp r3, r4 blt Salir add r3, r3, #2 str r3, [r1] sub r4, r4, #2 str r4, [r2] Salir: 3. Codifica en ensamblador la siguiente condición IF-THEN-ELSE: if (x >= y) { x = x+2; y = y+2; } else { x = x-2; y = y-2; } RESPUESTA 3. ldr r0, =x ldr r1, =y ldr r2, [r0] ldr r3, [r1] cmp r2, r3 blt Op2 b Op Op2: sub r2,r2,#2 sub r3,r3,#2 str r2, [r0] str r3,[r1] Op: add r2,r2,#2 add r3,r3,#2 str r2,[r0] END: str r0,[r2] b . .end 5. Codifica en ensamblador el siguiente bucle WHILE-DO: n = 5; fant = 1; f = 1; i = 2; while (i <= n) { faux = f; f = f + fant; fant = faux; i = i+1; } RESPUESTA 5. n: .word 5 fant: .word1 f: .word 1 c: .word 2 ldr r0, = n ldr r1, = fant ldr r2, = f ldr r3, = i ldr r4, [r0] ldr r5, [r1] ldr r6, [r2] ldr r7, [r3] LOOP: cmp r7, r4 bgt Salir ldr r8, =faux ldr r9, [r8] mov r9, r6 add r6, r6, r5 str r6, [r2] mov r5, r9 str r5, [r1] str r9, [r8] add r7, r7, #1 str r7, [r3] b LOOP Salir: Solución profesor: .global start .data n: .word 81 fant: .word 18 f: .word 1 i: .word 2 .text start: ldr r0,=n ldr r0,[r0] ldr r1,=fant ldr r1,[r1] ldr r2,=f ldr r2,[r2] ldr r3,=i ldr r3,[r3] WHILE: cmp r3,r0 bgt END mov r4,r2 add r2,r2,r1 mov r1,r4 add r3,r3,#1 b WHILE END: ldr r2,=f str r2,[r2] b . .end 6. Codifica en ensamblador el siguiente bucle FOR: for (i=2; i<=n; i++) { f=f+f; } RESPUESTA 6. mov r1, #2 ldr r2, =n ldr r3, [r2] ldr r4, =f ldr r5, [r4] LOOP: cmp r1,r3 bgt Salir add r5, r5, r5 add r1, r1, #1 b LOOP Salir: str r5, [r4] Solución profesor: .global start .data n: .word 8 f: .word 10 .text start: ldr r0,=n ldr r0,[r0] mov r1=#2 ldr r2,=f ldr r2,[r2] FOR: cmp r1,r0 bgt END add r2,r2,r2 add r1,r1,#1 b FOR END: ldr r1,=f str r2,[r1] b . .end 7. El siguiente programa calcula el máximo común divisor de dos números a y b según el algoritmo de restas de Euclides.Traducirlo a ensamblador del ARM: C(i) = |A(i) + B(9-i)|, i = 0,...,9. Escriba un programa en lenguaje de alto nivel que construya el vector C. Traduzca el programa al lenguaje ensamblador del ARM. RESPUESTA 12. const int N = 10 typedef int tVector[N]; tVector A, B, C; for (int i = 0; i < N; i++){ C[ i ] = A[ i ] + B[N - 1 - i ]; } .global start .data .equ N, #10 A: .word 1 2 3 4 5 6 7 8 9 10 11 B: .word 10 9 8 7 6 5 4 3 2 11 13 .bss C: .space 4 * N .text start: ldr r0, =A ldr r1, =B ldr r2, =C mov r3, #0 mov r4, #N sub r4, r4, #1 mov r8,#0 FOR: cmp r3, N bge SALIR ldr r5, [r0, r3, LSL #2] ldr r6, [r1, r4, LSL #2] add r7, r5, r6 cmp r7,r8 bge SALTAR sub r7,r8,r7 SALTAR: str r7, [r2, r3, LSL #2] add r3, r3, #1 sub r4, r4, #1 b FOR Salir: b. .end 13. Traduce el siguiente programa escrito en un lenguaje de alto nivel a lenguaje ensamblador. La órden swap(a, b) intercambia los valores de las variables a y b. int a=13, b=16; While (a>10){ a=a-1; b=b+2; } if (a<b) swap (a, b); else b= a-1; RESPUESTA 13. .global start .data a: .word 13 b: .word 16 .text start: ldr r0,=a ldr r1, [r0] ldr r2,=b ldr r3,[r2] WHILE: cmp r1, #10 ble IF sub r1, r1, #1 add r3, r3, #2 b WHILE IF: cmp r1, r3 bge ELSE mov r4, r1 mov r1, r3 mov r3, r4 b END ELSE: sub r3, r1, #1 END: str r1, [r0] str r3, [r2] b . .end
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved