Está en la página 1de 4

Oscar julian correa cobos  161003806

Problemas capítulo 3

1. Convertir la instrucción mov 0x100A, WREG a código maquina

Cod. Máquina 1011 1111 1001 0000 0000 1010

= 0xBF900A

2. Convertir la instrucción mov W3, W5 a código máquina

= 0x780283

3. Convertir de código maquina a una instrucción PIC24

Código maquina: 0111 1000 0000 0001 0000 1000

= mov W8, W2

4. Convertir a código maquina 0xB3C228 a una instrucción PIC24

Código maquina: 1011 0011 1100 0010 0010 1000

= mov.b 0x0228, WREG

5. La instrucción add w0, #35, w2 no es válida, ¿porqué?

= por que los literales deben ser de 5 bits osea, un numero de 0 a 31, lo que para este caso no se
cumple.

6. Qué valor se coloca en w1 después de la ejecución de la siguiente instrucción: sub w1, w1,
w1.

= 0x0000

7. Que registro es modificado con la siguiente instrucción: add w3, w2 , w4?

= el registro modificado es w4

8. Que registro es modificado para la siguiente instrucción: add u16_J, WREG?

= el registro modificado es w0

9. Escriba una instrucción de resta que realice la siguiente operación de 16-bit: w6 = w3-w5

= sub w3, w5, w6

10. Teniendo un FOSC de 25 MHz, cuánto tarda en ejecutar en nanosegundos la instruccio


goto done?

= T=1/25MHz = 40 ns El goto requiere 8 ciclos de reloj, por lo que este se ejecuta en 320 ns

11. Teniendo un FOSC de 20MHz, cuánto tarda en ejecutarse en nanosegundos la instrucción


mov w2, w4?
= T = 1/ 20MHz = 50 ns, para un ciclo de instrucción se requieren 2 ciclos de reloj, por lo tanto, el
tiempo que tarda en realizar esta instrucción es de 100 ns

12. Escriba una secuencia de instrucción que compile u16_k = u16_i - u16_j – 32, cuando
u16_i, u16_j, and u16_k son variables uint16_t.

= mov u16_i, WREG


mov w0, w1
mov u16_J, WREG
mov w0, w2
mov #32, WREG
sub w1, w2, w1
sub w1, w0, w1
mov w1, u16_k
13. Escriba una secuencia de instrucciones que compile u8_k = u8_i - u8_j -32, cuando u8_j,
and u8_k son variables uint8_t

= mov.b u8_i, WREG


mov.b w0, w1
mov.b u8_J, WREG
mov.b w0, w2
mov.b #32, WREG
sub.b w1, w2, w1
sub.b w1, w0, w1
mov.b w1, u8_k
14. Escriba una secuencia de instrucciones PIC24 que copie las ubicaciones de datos RAM
0x1000 a 0x1007 (8 bytes) en las ubicaciones 0x1800 a 1807.

mov 0x1000, WREG


mov WREG, 0x1800
mov 0x1002, W1
mov W1, 0x1802
mov 0x1004, W2
mov W2, 0x1804
mov 0x1006, W3
mov W3, 0x1806
15. Cuantas instrucciones add w0, w1, w2 son ejecutadas en 1 segundo asumiendo un FOSC
de 25 MHz?

= T =1/ 25MHz = 40 ns, 1 ciclo de instrucción toma 2 ciclos de reloj

= 1/ 80 ns = 12.500.000 instrucciones por segundo (MIPS)

Para los problemas restantes, asuma el contenido de la memoria / registro de la Tabla 3.6 al
comienzo de cada instrucción y proporcione la ubicación o registro de la memoria modificada y su
contenido.
16. mov w2, 0x1008

w2  0x1008, 0x1008 ahora tiene el valor de 0x8345

17. mov. B 0x1001, WREG

= operación ilegal porque se esta realizando una operación de palabra a una dirección impar, la
ubicación w0 no se modifica y se genera una excepción

18. mov #0x1001, w1

= #0x1001  w1, ahora w1 tiene el valor 0x1001

19. mov.b [w3], [w4]

= [w3]  [w4], 0x1000  0x1005, operación ilegal porque se está realizando una operación de
palabra a una dirección impar, la ubicación 0x1005 no se modifica y se genera una excepción.

20. mov [w0], w4

= [w0]  w4, 0x1006  w4, w4 ahora tiene el valor 0xE7C0

21. mov.b #0x20, w3

= #20  (w3.LSB), w3 ahora tiene el valor de 0x1020

22. add w0, [w0], w1

= w0 + [w0]  w1, 0x1006 + 0xE7C0 = w1, ahora el valor de w1 es 0xF7C6

23. dec 0x1004, WREG

= 0x1004 – 1  W0 : 0x4D19 – 1 = w0, ahora el valor de w0 es 0x4D18

24. add 0x1002

0x1002 + WREG  0x1002: 0xFB80 + 0x1006 = 0x1002, ahora el valor de 0x1002 es 0x0B86

25. add.b 0x1000, WREG

= (0x1000.LSB) + (WREG.LSB)  (WREG.LSB) ; 2A + 06 = w0, el valor de w0 es 0x1030

26. sub w0, w1, [w0]


= w0 – w1  0x1006: 0x1006 – 0x00BC = 0x1006, el valor de 0x1006 es 0x0F4A

27. sub.b w4, #10, [w0]

=w4 – w1  0x1006: 05 – 10 = 0x1006.LSB, ahora el valor de 0x1006 es 0xE7F5

28. dec2 0x1008

= 0x1008 – 2  0x1008: 0xFF0C – 2 = 0x1008, el valor de 0x1008 es 0xFEFE

29. dec2.b 0x1008

= 0x1008 -2  0x1008: 0xFF0C – 2 = 0x1008, el valor de 0x1008 es FFFE

30. inc w0, [w3]

= w0 + 1  0x1000; 0x1006 + 1 = 0x1000, ahora el valor de 0x1000 es 0x1007

31. inc2.b 0x1009

= operación ilegal porque se está realizando una operación de palabra a una dirección impar, la
ubicación 0x1009 no se modifica y se genera una excepción.

32. Inc2 0x1008, WREG

= 0x1008 +2  WREG: 0xFF00 +2 = w0, ahora el valor de w0 es 0xFF02

También podría gustarte