Autor Tema: analisis lenguaje ensamblador  (Leído 2158 veces)

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

Desconectado fordone

  • PIC10
  • *
  • Mensajes: 4
analisis lenguaje ensamblador
« en: 19 de Noviembre de 2017, 13:38:54 »
holo estoy analizando el siguiente problema quiero saber si esta bien lo que he hecho. Espero me puedan ayudar con sus conocimientos

clrw   ; cargo w con 00 y la bandera z toma el valor de 1   
clrc   ; cargo el registro con 00 y la bandera z toma el valor de 1
movwf   REGISTRO   ; muevo el contenido de w al registro por lo que toma el valor 00 f queda con 00 y las banderas quedan igual no se modifican
nop   ; aqui no estoy   seguro de lo que pasa por consiguiente n o he podido avanzar.
incf   REGISTRO,0   
addwf   REGISTRO,1   
rrf   REGISTRO,0

Espero me puedan ayudar con lo que me falta como cambia w, los registros y las banderas e indicarme si lo que he hecho esta bien. Saludos y gracias de antemano

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re:analisis lenguaje ensamblador
« Respuesta #1 en: 19 de Noviembre de 2017, 14:14:49 »
Estoy un poco alejado y olvidado de algunas instrucciones de ASM, por eso es que te recomiendo que te leas la documentación correspondiente al set de instrucciones, te dejo el link

http://ww1.microchip.com/downloads/en/DeviceDoc/31029a.pdf

en la pagina 29-3 tienes un resumen de las instrucciones y como afecta a los registros de estodos
a partir de la pagina 29-8 tienes la explicación de cada instruccion

respecto a tu programa

clrc lo que hace es limpiar el bit del carry
nop es una instrucción que agrega un ciclo sin ejecución, algo así como un delay
incf REGISTRO,0 suma en una unidad el registro y el valor lo ubica en W
addwf REGISTRO,1 suma el valor de W y REGISTRO y el valor lo ubica en REGISTRO
rrf REGISTRO,0 rota hacia la derecha los bits de REGISTRO y el valor lo ubica en W

Lo que también puedes hacer es usar el MPLAB y poner el simulador de ASM, así puede saber como cambian los valores de los registros y los bits especiales.

Saludos,
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado fordone

  • PIC10
  • *
  • Mensajes: 4
Re:analisis lenguaje ensamblador
« Respuesta #2 en: 19 de Noviembre de 2017, 14:34:02 »
Hola gracais por tu respuesta y si ando en eso viendo la documentacion pero sigo teniendo algunas dudas con las banderas el nop gracias a tu respuesta me quedo claro y lo que hara es como una pausa pero no modificara nada ahora el problema esta en el incf registro,0 cuanto daria ese incremento 01? y se guardaria en registro o w y tambien cambia alguna bandera?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:analisis lenguaje ensamblador
« Respuesta #3 en: 19 de Noviembre de 2017, 15:06:28 »
Código: ASM
  1. clrw   ; W = 0 , Z  = 1
  2. clrc   ;  C = 0, Z sigue igual
  3. movwf   REGISTRO   ; REGISTRO = W ... es decir que REGISTRO es igual a cero
  4. nop   ; Ocupa un solo ciclo de maquina, sin producir ningun cambio en ningun registro, es ocupar tiempo nada mas
  5. incf   REGISTRO,0   ; W = REGISTRO + 1, Quedando...  W = 1 , REGISTRO = 0, Esta instruccion actualiza la bandera Z, dejandola en Z = 0
  6. addwf   REGISTRO,1   ; REGISTRO = REGISTRO + W, REGISTRO era 0 y W era 1, por lo tanto en REGISTRO voy a tener el valor 1, las banderas quedan C = 0, DC = 0, Z = 0
  7. rrf   REGISTRO,0        ;  Girar a la derecha REGISTRO y guardarlo en W, lo importante aca son los valores inciales C = 0 y REGISTRO = 0b0000 0001, al rotar queda: W = 0, REGISTRO = 1, C = 1

En la ultima instruccion el 0 del carry pasa a ser el bit 7, el 1 pasa al lugar del Carry, solo actualiza la bandera Carry la instruccion RRF, REGISTRO no se modifica. Y al rotar 1 lugar el resultado termina siendo 0, que es lo que se guarda en W.

Una cosa mas... CLRC es una pseudo-instruccion, es para facilitar a quien programa ya que no es una instruccion real del microcontrolador, luego el compilador lo reemplaza por un BCF STATUS, C la cual si es una instruccion real.