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

Subido el 18/11/2015

javierberdecio
javierberdecio 🇪🇸

4.4

(83)

6 documentos

1 / 12

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
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) {
pf3
pf4
pf5
pf8
pf9
pfa

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 0x r1 (^) 0x r2 (^) 0xFFFFFFFF r3 (^) 0x r4 (^) 0x

Memoria 0x00000000 0x 0x00000004 0xEA0063AF 0x00000008 0x17FA 0x0000000C 0xBC 0x00000010 0x7845F34A 0x00000014 0x534B4AAA

  1. add r3, r0, r
  2. add r2, r2, #
  3. sub r4, r1, r
  4. sub r4, r0, r
  5. mul r4, r0, r
  6. or r3, r1, r
    1. mov r4, #
    2. lsr r2, r0, r
    3. ldr r0, [r4]
    4. ldr r0, [r4,#-4]
    5. str r2, [r4,r3]
    6. str r2, [r0]

RESPUESTA 1

  1. r3 0x0000006A r4 0x
  2. r2 0x00000000 r2 0x
  3. r4 0x0000003E r0 0xEA0063AF
  4. r4 0xFFFFFFC2 r0 0x
  5. r4 0x00000738 0x00000004 - 0xFFFFFFFF
  6. r3 0x00000056 Dirección no múltiplo de 4
  7. 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, r blt Salir add r3, r3, # str r3, [r1] sub r4, r4, # str r4, [r2]

Salir:

  1. 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, r blt Op b Op Op2: sub r2,r2,# sub r3,r3,# str r2, [r0] str r3,[r1] Op: add r2,r2,# add r3,r3,# str r2,[r0]

  1. Codifica en ensamblador el siguiente bucle REPEAT-UNTIL:

a = 81;

b = 18;

do {

a = a-b;

} while (a > 0);

RESPUESTA 4.

a: .word 81 b: .word 18 ldr r0, =a ldr r1, =b ldr r2, [r0] ldr r3, [r1] sub r2, r2, r str r2, [r0]

LOOP: cmp r2,# ble Salir sub r2, r2, r str r2, [r0] b LOOP

Salir:

Solución profesor:

.global start

.data a: .word 81 b: .word 18

.text start: ldr r2,=a ldr r0,[r2] ldr r3,=b ldr r1,[r3] REPEAT: sub r0,r0,r cmp r0,# bgt REPEAT

END: str r0,[r2]

b. .end

  1. 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: .word 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, r bgt Salir ldr r8, =faux ldr r9, [r8] mov r9, r add r6, r6, r str r6, [r2] mov r5, r str r5, [r1] str r9, [r8] add r7, r7, # str r7, [r3]

RESPUESTA 6.

mov r1, # ldr r2, =n ldr r3, [r2] ldr r4, =f ldr r5, [r4] LOOP: cmp r1,r bgt Salir add r5, r5, r add r1, r1, # 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=# ldr r2,=f ldr r2,[r2] FOR: cmp r1,r bgt END add r2,r2,r add r1,r1,# 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:

int a=5, b=15, mcd;

While (a!=b){

if (a>b)

a=a-b;

else

b=b-a;

mcd=a;

RESPUESTA 7.

  1. Tenemos un vector de 10 componentes almacenado en la posición de memoria etiquetada

como V. Diseña un programa en ensamblador que sume uno a cada una de sus componentes.

RESPUESTA 8.

  1. Tenemos un vector de 6 componentes almacenado en la posición de memoria etiquetada como

V. Diseña un programa en ensamblador que cuente el número de valores mayores que 0 que

contiene.

RESPUESTA 9.

.global start .data V: .word x, y, z, t, u, v @ Son los seis valores del supuesto vector (a modificar) .bss Contador: .space 4 .text start: mov r0, #0 @ Contador mov r1, #0 @ i ldr r2,=V

FOR: cmp r1, # bge END ldr r3, [r2, r1, LSL #2] cmp r3, # ble I++ add r0, r0, #

I++: add r1, r1, #

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, # 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, # mov r4, #N sub r4, r4, # mov r8,# FOR: cmp r3, N bge SALIR ldr r5, [r0, r3, LSL #2] ldr r6, [r1, r4, LSL #2] add r7, r5, r cmp r7,r bge SALTAR sub r7,r8,r SALTAR: str r7, [r2, r3, LSL #2] add r3, r3, # sub r4, r4, # b FOR Salir: b. .end

  1. 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;