PDA

Ver la Versión Completa : Ayuda con los comandos del ASM.


REHome
21-02-2008, 05:11:55
Soy nuevo con los PIC y hay cosas básicas que no entiendo.

ADDWF

Acción


Suma el contenido del acumulador y el registro dado, y el resultado lo guarda en d

Sintaxis


ADDWF f,d

Funcionamiento


Add W to file register (Añade W al registro)

Hexadecimal


07 ff

Bits (OPCODE)


00 0111 dfff ffff

Operación


d = W + f (d puede ser W ó f).

Descripción


Esta instrucción suma el contenido de un registro específico al contenido de W donde f puede ser un registro cualquiera con un determinado valor.

Comentarios


Aunque ya conocemos el funcionamiento del bit d, lo repetiré de nuevo para el resto de instrucciones:

- Si vale 1, el resultado se guarda en el registro f

- Si vale 0, el resultado se guarda en el acumulador W


W. es Work donde guarda algún dato temporalmente.

f y d, creo que es "f" significa fuente de los datos y "d" destino de los datos. ¿ME podrían ayudar si esto es así o es otra cosa?

dec
21-02-2008, 09:05:00
Hola,

No te podré ayudar en nada, pero, me llama la atención que crees que "f" es la fuente de los datos y "d" destino de los mismos. En español bien podría ser así, en inglés, he visto traducir "fuente" como "source", y "destino" como "target"... y ahora es cuando repito que de poco te habrá servido esto que digo... :(

aeff
21-02-2008, 13:08:07
Diaaaablos!!. mira, no entiendo mucho lo que planteas compañero REHome, esas letras que llamas f, d y w, no se que representan realmente para ti, pero estuve leyendo y mecionabas las palabras "Acumulador", "Registros"..., y creo que de lo poco que se de ASM nunca he visto un registro llamado ni "f", ni "d" ni "w",...

bueno, puede que lo que te este diciendo no te sirva para nada o que ya conozcas esto pero por si acaso:

mira, el microprocesador consta de varios registros, denominados, AX, BX, CX y DX , cada uno de ellos cumple una función en específico, que no las recuerdo ahora, pero usando estos registros(son como secciones del micro...) es que los programas hacen sus operaciones matemáticas y otras... entonces, para sumar dos valores se deben introducir sol operandos en los registros y mandar a operar al ordenador con un operador llamado ADD, mas o menos, mira este codiguito:


mov ax, 100 // muevo para el registro ax, 100
add ax, 150 // le sumo al registro ax, 100


y el resultado se almacenará en AX, para sre mas claro, en ensamblador existen operadores, MOV, ADD, SUB, MUL, LEA, INC, DEC, DIV ... mucho de ellos requieren de una sintaxis para operar, por ejemplo:

MOV Destino, Fuente
ADD Destino, Fuente
...

es decir, destino en el primer caso sería donde almacenarás un nuevo valor, pude ser uno de los registros, si pongo: mov dx, 10h: lo que estoy haciendo es introducir en el registro dx el valor 10h...

en el segundo caso, se hace una suma, por ejemplo
mov ax, 10
add ax, 10

aqui se coloca en el registro ax el valor 10 y luego se le suma 10 más, al final el resultado se guarda en el registro Destino que es AX en este caso:

otro ejemplo:


mov ax, 150
mov dx, 150
add ax, dx


¿que crees que sucederá aqui?,


saludos,

aeff!

REHome
21-02-2008, 20:03:34
Ya me dijeron la respuesta que yo quiero.

ADDWF f,d
f es la direccion en ram de la variable.

d pueden ser las letras f o w y entonces el linkeador reemplaza w por 0 y f por 1 ( o se puede poner 0 o 1 directamente)

ejemplo
Cita:
ADDWF numero,f
sumara el contenido de W con el contenido de lo que este en la direccion etiquetada como numero Y guardara el resultado en la direccion etiquetada como numero

bueno, ya sabes que w el un registro de trabajo, es decir, en el se guardan datos temporales, para moverlos de un lado a otro, por ejemplo.

movlw b'00011101'

significa, mover a w ese binario.

movwf portb

significa, mover lo de w a un registro x, en este caso port b, es decir que ahora port b, es igual a 00011101

hay que tener en cuenta:

w=registro de trabajo
f= registro x
d= destino del la operacion(donde se va a guardar
tal vez esto te puede sevir.

es una buena guia.






mov ax, 150
mov dx, 150
add ax, dx



En tu resultado da 300. Veo que te expresas muy bien en asm. Pues se parece mucho a los PIC. He dado 8085 en electrónica y se parece mucho al que mencionas. Muchas gracias por la ayuda.

¿Qué compilador es el más adecuado para manejar los procesadores 8085, 8086, 8088 cosas de estas?

REHome
21-02-2008, 20:45:57
¿Qué crees que da en un PIC 16F84A?

movlw .150
movwf 10h
movlw .150
movwf 11h
movwf 13h

movf 10h,W
addwf 11h,W
movwf 13h

MaMu
10-03-2008, 23:45:41
¿Qué crees que da en un PIC 16F84A?

Cargas 150 decimal en el registro W
Moves el contenido del registro W a la dirección hexa 10h
Cargas 150 decimal en el registro W
Moves el contenido del registro W a la dirección hexa 11h
Moves el contenido del registro W a la dirección hexa 13h
Moves el contenido de la dirección hexa 10h al registro W
Le sumas lo que tenias en el registro W a la dirección hexa 11h y lo guardas en W
Moves el contenido del registro W a la dirección hexa 13h

Por lo tanto, tenes en:

W = 300 decimal
10h = 150 decimal
11h = 150 decimal
13h = 300 decimal

Saludos