Autor Tema: Programa con Assembler  (Leído 2168 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado e7german

  • PIC10
  • *
  • Mensajes: 2
Programa con Assembler
« 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.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Programa con Assembler
« Respuesta #1 en: 13 de Marzo de 2018, 13:30:10 »
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:

Código: ASM
  1. MOV SI, 2200h
  2.                  MOV DI, 2100h
  3.                  MOV CL, 4h
  4. ETIQUETA  
  5.                  MOV AL, [SI]
  6.                  ADD AL, 8h
  7.                  JNC ETIQUET2
  8.                  MOV AL, 80h
  9. ETIQUET2
  10.                  MOV [DI], AL
  11.                  INC SI
  12.                  INC DI
  13.                  DEC CL
  14.                  JNZ ETIQUETA
  15.                  INT 20h
« Última modificación: 13 de Marzo de 2018, 14:12:04 por KILLERJC »