Parcial 2 Flashcards

(33 cards)

1
Q

Elija el trozo de código que contiene error:
—————————-
SUB R1, R5, R6
MOVLT R1, R6
MOVGE R1, R5
—————————–
MOV R2, 0x05
MOV R1, 0x02
ADD R2, R1, R2
ADD R2, R1, R2
MOV R5, #0x20
STRB R2, [R5]
—————————–
MOV R2, #0x05
MOV R5, #0x20
STRB R2, [R5]
—————————–
CMP R5, R6
MOVLT R1, R6
MOVGE R1, R5

A

MOV R2, 0x05
MOV R1, 0x02
ADD R2, R1, R2
ADD R2, R1, R2
MOV R5, #0x20
STRB R2, [R5]

FALTA EL NUMERAL (#)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Sí, R2 = 2 y R3 = 12. ¿Cuál es el valor final de R2?
SUB R2, R3, R2, LSL #2

A

4

R2 = R3 - (R2 &laquo_space;2)
Donde &laquo_space;es desplazamiento lógico a la izquierda (LSL), que multiplica por potencias de 2.

R2 &laquo_space;2 = 2 &laquo_space;2 = 2 * 2^2 = 2 * 4 = 8
R3 - (R2 &laquo_space;2) = 12 - 8 = 4

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Todos los procesadores ARM tienen las instrucciones para multiplicar y dividir.

V/F

A

Falso

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Se tienen dos números almacenados en R5 y R6, 0x06 y 0x04 respectivamente, determine el valorde R1 después de ejecutar el siguiente trozo de código:

SUB R1, R5, R6
MOVLT R1, R6
MOVGE R1, R5

A

0x02

R5 = 0x06 (6 en decimal)
R6 = 0x04 (4 en decimal)

6-4=2 → 0x02

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Si se tienen dos números almacenados en R5 y R6, elija la porción de código que coloca el mayor de los dos en R1:

CMP R5, R6
MOVLT R6, R1
MOVGE R5, R1
—————————————
CMP R1, R6
MOVLT R1, R6
MOVGE R1, R5
—————————————
CMP R5, R6
MOVLT R1, R5
MOVGE R1, R6
—————————————
CMP R5, R6
MOVLT R1, R6
MOVGE R1, R5

A

CMP R5, R6
MOVLT R1, R6
MOVGE R1, R5

CMP R5, R6 compara los valores de R5 y R6 (sin guardarlos) y actualiza los flags.

MOVLT R1, R6: si R5 < R6, significa que R6 es el mayor, así que se guarda en R1.

MOVGE R1, R5: si R5 ≥ R6, entonces R5 es el mayor, y se guarda en R1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Para el siguiente número con signo 00000011, si se realiza rotamiento a la derecha de un bit el resultado será:

A

10000001

El último bit (1) pasa al principio.
Los demás se mueven a la derecha.

0000001110000001

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

A continuación, se le presentan 4 bloques de instrucciones, elija el bloque que es completamentecorrecto.

MOV R0, R2, LSL #2 //Multiplicar R2 por 2

CMP R5, R6
MOVlt R1, R6
MOVge R1, R5

MOV R1, #0xFFFFFFFF

MOV R2 #0x05
MOV R1, #0x02

A

CMP R5, R6
MOVlt R1, R6
MOVge R1, R5

Opciones incorrectas:

MOV R0, R2, LSL #2 //Multiplicar R2 por 2
→ ❌ Multiplicar por 4, no por 2. Y los comentarios // no son válidos en asm puro.

MOV R1, #0xFFFFFFFF
→ ⚠️ En algunas arquitecturas ARM no podés cargar directamente ese valor porque no es un inmediato válido (es muy largo). Necesitás otra instrucción como MVN R1, #0x0.

MOV R2 #0x05
→ ❌ Falta una coma. Debería ser: MOV R2, #0x05

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Después de ejecutar esta porción de código, ¿Cuál es el valor de R4?
MOV R4, #2
_repetir:
MOV R1, #1
SUBS R4, #1
BEQ _repetir

A

1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Si R2 contiene el valor de 6 ¿Cuál es su valor después de ejecutar las siguientes instrucciones:
ADD R0, R2, #3
AND R3, R2, #1
ADD R1, R2, R2, LSL #1

A

6

ADD R0, R2, #3
➤ R0 = 6 + 3 = 9
(pero R2 no cambia)

AND R3, R2, #1
➤ AND lógico entre 6 (110) y 1 (001) = 000
→ R3 = 0
(R2 sigue igual)

ADD R1, R2, R2, LSL #1
➤ Esto es: R1 = R2 + (R2 &laquo_space;1)
➤ (6 &laquo_space;1 = 12), así que: R1 = 6 + 12 = 18
(pero, R2 sigue igual)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Cuál es el valor de R0 después de ejecutar el siguiente código?
MOV R1, #5
SUBS R2, R1, #5
ADDLE R0, R1, #3
ADDGE R0, R1, #5

A

10

MOV R1, #5
→ R1 = 5

SUBS R2, R1, #5
→ R2 = 5 - 5 = 0
→ El resultado es 0, así que se activan las condiciones LE (menor o igual) y GE (mayor o igual).

ADDLE R0, R1, #3
➤ Solo se ejecuta si el resultado anterior fue “menor o igual” (LE = Less or Equal).
Pero como fue igual a 0, sí califica como LE.
Entonces: R0 = 5 + 3 = 8

ADDGE R0, R1, #5
➤ También se ejecuta si el resultado fue mayor o igual (GE).
Como 0 sí es igual, también se ejecuta:
➤ Ahora: R0 = 5 + 5 = 10 → esto sobrescribe el 8 anterior.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Después de ejecutar la instrucción ADDS , ¿Bajo qué condición el valor de la bandera Z se pondrá en 1?

A

Cuando el resultado sea igual a cero

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q


msj: .asciz “%d”
Al ejecutar el siguiente código:
MOV R1, #5
SUBS R1, #5
ADDLE R1, #8
SUBGE R1, #12
LDR R0, =msj
BL printf
¿Qué valor mostrará al llamar la función printf de la última línea?

A

-4

MOV R1, #5 ; R1 = 5
SUBS R1, #5 ; R1 = 5 - 5 = 0 → se activan flags (Z = 1)
ADDLE R1, #8 ; como el resultado fue 0 (LE se cumple), R1 = 0 + 8 = 8
SUBGE R1, #12 ; también se cumple GE → R1 = 8 - 12 = -4 (con signo)
LDR R0, =msj ; Carga la dirección del string “%d”
BL printf ; Imprime R1 como entero

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Expresión matemática que representa la sintaxis de la siguiente instrucción “ADC Rd, Rn, Op2”

A

Rd = Rn + Op2 + C

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Si la variable
mensaje
contiene el valor de “Hola mundo”. ¿Qué porción de código mostraría esemensaje en pantalla?

MOV R7, #4
MOV R0, #0
LDR R1, =mensaje
MOV R2, #11
SWI 0

MOV R7, #4
MOV R0, #0
MOV R1, =mensaje
MOV R2, #11
SWI 0

MOV R7, #3
MOV R0, #0
LDR R1, =mensaje
MOV R2, #11
SWI 0

MOV R7, #4
MOV R0, #0
LDR R1, =mensaje
MOV R2, #5
SWI 0

A

MOV R7, #4
MOV R0, #0
LDR R1, =mensaje
MOV R2, #11
SWI 0

MOV R7, #4 ; syscall: write
MOV R0, #0 ; stdout
LDR R1, =mensaje ; dirección del string
MOV R2, #11 ; longitud completa (“Hola mundo”)
SWI 0 ; llamada al sistema

MOV R1, =mensaje ; ❌ MOV no carga direcciones (usa LDR)

MOV R7, #3 ; ❌ 3 es syscall para leer, no escribir

MOV R2, #5 ; ❌ Solo imprime “Hola “, mensaje incompleto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Se tienen dos números almacenados en R5 y R6, 0x06 y 0x04 respectivamente, determine el valorde R1 después de ejecutar el siguiente trozo de código

SUBS R1, R5, R6
MOVLT R1, R6
MOVGE R1, R5

A

0x06

SUBS R1, R5, R6 ; R1 = 6 - 4 = 2 → actualiza flags
MOVLT R1, R6 ; Si el resultado fue negativo → R1 = R6
MOVGE R1, R5 ; Si fue cero o positivo → R1 = R5

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Si R2=2 y R3=4. Indique qué valor tendrá R2 después de ejecutar el siguiente código
CMP R3, #0
BNE _E
MOV R2, R2, ASR #1
B _E2
_E:
ADD R2, R2, R2, LSL #2
ADD R2, #1
_E2:

A

11

R2 + (R2 &laquo_space;2) →
2 + (2 × 4) = 2 + 8 = 10

ADD R2, #1 →
10 + 1 = 11

17
Q

¿Qué hace “STRB R1, [R2]”?

A

Copia los 8 bits menos significativos de R1 en la dirección apuntada por R2

18
Q

Después de ejecutar el siguiente código ¿Cuál es el valor de R3?
MOV R1, #5
CMP R1, #7
ADDLE R3, R1, #3
ADDGT R3, R1, #5

A

8

MOV R1, #5 ; R1 = 5
CMP R1, #7 ; Compara 5 con 7
ADDLE R3, R1, #3 ; Si 5 ≤ 7 → R3 = 5 + 3 = 8
ADDGT R3, R1, #5 ; Si 5 > 7 → no se ejecuta

5 ≤ 7 es cierto, así que se ejecuta:
R3 = 5 + 3 = 8

5 > 7 es falso, así que esta línea se salta

19
Q

Se tienen dos números almacenados en R5 y R6, 0x06 y 0x04 respectivamente, determine el valorde R1 después de ejecutar el siguiente trozo de código
SUB R2, R5, R6
MOVLT R1, R6
MOVGE R1, R5

A

No se puede determinar con el trozo de código mostrado

20
Q

Tomando en cuenta la última instrucción del siguiente bloque de código ¿Qué valor y en quédirección de memoria se almacena el resultado?
MOV R2, #0x05
MOV R1, #0x02
ADD R2, R1, R2
ADD R2, R1, R2
MOV R5, #0x20
STRB R2, [R5]

A

Se almacena 0x09 en #0x20

MOV R2, #0x05 ; R2 = 5
MOV R1, #0x02 ; R1 = 2
ADD R2, R1, R2 ; R2 = 2 + 5 = 7
ADD R2, R1, R2 ; R2 = 2 + 7 = 9
MOV R5, #0x20 ; R5 = dirección 0x20
STRB R2, [R5] ; Guarda el valor de R2 (9) en la dirección 0x20 (1 byte)

21
Q

Después de ejecutar el siguiente código ¿Cuál es el valor de R3?
MOV R1, #7
CMP R1, #5
ADDLE R3, R1, #3
ADDGT R3, R1, #5

A

12

MOV R1, #7 ; R1 = 7
CMP R1, #5 ; Compara R1 con 5 → 7 > 5
ADDLE R3, R1, #3 ; NO se ejecuta porque 7 no es menor o igual a 5
ADDGT R3, R1, #5 ; SÍ se ejecuta porque 7 > 5 → R3 = 7 + 5 = 12

22
Q

¿Cuál es el valor que se guarda en memoria después de ejecutar las siguientes instrucciones?(Escriba solamente el valor, sin ninguna palabra adicional)
MOV R1, =0x99
MOV R6, =0x92
STRB R1, [R6]

A

0x99

MOV R1, =0x99 ; R1 = 0x99
MOV R6, =0x92 ; R6 = 0x92 → dirección de memoria
STRB R1, [R6] ; Guarda solo 1 byte (el valor 0x99) en la dirección 0x92

23
Q

línea Instrucción

El siguiente trozo de código contiene un error, indique el número de línea que contiene el error

20 MOV R7, #4
21 MOV R0, #0
22 MOV R1, =mensaje
23 MOV R2, #100
24 SVC 0

A

22

20 MOV R7, #4 ; syscall: write
21 MOV R0, #0 ; stdout
22 MOV R1, =mensaje ; ❌ ❗ ERROR AQUÍ
23 MOV R2, #100 ; cantidad de bytes a escribir
24 SVC 0 ; llamada al sistema

MOV R1, =mensaje intenta cargar una dirección de memoria literal.

MOV NO puede cargar direcciones si el valor no cabe en un inmediato.

24
Q

¿Qué acción realiza el siguiente trozo de código?
MOV R7, #3
MOV R0, #0
LDR R1, =var
MOV R2, #10
SVC 0

A

Lee 10 caracteres del teclado y los guarda en la variable var

R7 = 3 → syscall read

R0 = 0 → origen: teclado (stdin)

R1 = dirección de “var” → destino: dónde guardar lo leído

R2 = 10 → cuántos bytes quiere leer

SVC 0 → ejecuta la llamada al sistema

25
¿Cuál es el valor de R0 después de ejecutar el siguiente código? MOV R1, #5 SUBS R1, #5 ADDLE R0, R1, #3 ADDGE R0, R1, #7
**7** SUBS R1, #5 deja R1 = 0 → Z=1 y N=0 Entonces se cumplen ambas condiciones: LE y GE Pero en ARM, solo una instrucción condicional se ejecuta según su posición: ADDLE se ejecuta primero: R0 = 0 + 3 → R0 = 3 Luego ADDGE también se ejecuta (Z=1 sigue siendo válido): R0 = 0 + 7 → R0 = 7 Valor final de R0: 7
26
En la siguiente instrucción "“UMULL R3, R4, R1, R2” ¿ Cuál registro contendrá los 32 bits menos significativos del resultado de la multiplicación?
**R3** UMULL = Unsigned Multiply Long Multiplica sin signo: R1 * R2 → resultado de 64 bits El resultado se guarda así: R3 = 32 bits menos significativos (parte baja) R4 = 32 bits más significativos (parte alta)
27
Comando para ejecutar el programa línea a línea
step
28
El programador puede hacer nuevos modos de direccionamiento | V/F
Falso
29
Etiqueta para identificar la sección en la que se definen todas las variables que utiliza el programa con el objeto de reservar memoria para contener los valores asignados.
.data
30
Instrucción para almacenar el contenido de R2 en la ubicación de memoria señalada por R8
STR R2, [R8]
31
¿Cuál es el valor de la bandera de acarreo después de restar 0x05 de 0x43? Además, indique si el resultado es positivo o negativo C=(?), el resultado es (positivo/negativo?)
C=1, el resultado es positivo
32
Ejemplo de casos en los que se utiliza el lenguaje ensamblador
Para utilización y aprovechamiento de dispositivos y recursos del sistema
33
Desplazar n bits a la derecha es equivalente a multiplicar un número por 2 elevado n
Falso