TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: e7german en 13 de Marzo de 2018, 12:48:56
-
Buenas tardes, tengo el siguiente enunciado:
Realizar el siguiente programa. Utilizar Etiquetas para definir las direcciones de
salto. A partir de la dirección 2200, se tiene una lista de 4 números enteros de un
byte cada uno. Sumarle 8 a cada uno y el resultado escribirlo en otro lista a partir
de la dirección 2100. Si el resultado no fuera correcto, escribir 80 en la posición
correspondiente de la lista destino.
MOV SI, 1100
MOV DI, 2100
MOV CL, 4
ETIQUETA MOV AX, SI
ADD AX, 8
JO ETIQUETA 3
MOV [DI], AX
ETIQUET2 INC SI
INC DI
DEC CX
JNZ ETIQUETA 1
INT 20
ETIQUETA3 MOV [DI], 80
JMP ETIQUET2
Esta bien escrito este codigo? Desde ya, muchas gracias.
-
No nombraste que procesador es, es x86 seguro, pero algo vamos a hacer.
Siguiendo tu programa. (Suponiendo que todo es hexadecimal )
- Tu enunciado dice que tenes el dato inicial en 2200, pero vos estas cargando 1100
- El MOV del SI, lo que haces es mover el contenido del SI y no lo que apunta.
- En el salto si esta activo el OF, usas "ETIQUETA 3" con un espacio, el cual no existe. Es sin espacio
- Haces referencia a ETIQUETA 1, la cual no existe y el correcto es ETIQUETA sola.
- Estas usando AX que es de 16 bits, asi que jamas va a ocurrir el overflow/carry. Mejor usar AL y quedarnos en 8bits
- Como son numeros sin signos, usar el flag de carry, el flag de Overflow es para numeros con signos. ( Esta regla para mantenerlo simple al punto )3
- Cargas 4 en CL, y luego usas CX al decrementar, no sabes que posee CH, por lo tanto usamos CL en ambos.
ETIQUETA3 esta sin sentido:
MOV SI, 2200h
MOV DI, 2100h
MOV CL, 4h
ETIQUETA
MOV AL, [SI]
ADD AL, 8h
JNC ETIQUET2
MOV AL, 80h
ETIQUET2
MOV [DI], AL
INC SI
INC DI
DEC CL
JNZ ETIQUETA
INT 20h