Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   ASM y Microcontroladores (https://www.clubdelphi.com/foros/forumdisplay.php?f=44)
-   -   Ayuda con los comandos del ASM. (https://www.clubdelphi.com/foros/showthread.php?t=53457)

REHome 21-02-2008 05:11:55

Ayuda con los comandos del ASM.
 
Soy nuevo con los PIC y hay cosas básicas que no entiendo.

Código:

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:

Código:

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:

Código:

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.

Cita:

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
Cita:

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.




Cita:

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?

Cita:

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

Cita:

Empezado por REHome (Mensaje 267680)
¿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


La franja horaria es GMT +2. Ahora son las 07:23:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi