Operadores aritméticos do MPASM !!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Operadores aritméticos do MPASM !!!

Mensagempor Andre_Cruz » 03 Fev 2010 22:58

Esta lendo um livro de PIC básico em ASM, e no fim do livro o autor traz alguns operadores aritméticos do MPASM.
Além do $ que volta ou avança o contador de programa, não sei usar mais nem um operador.

Alguém poderia exemplificar seu uso ?

Agradeço a ajuda.

Abraço

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor vtrx » 04 Fev 2010 11:43

Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor Andre_Cruz » 04 Fev 2010 13:23

vtrx,

As diretivas do MPASM se encontra exemplo fácil, mas como usar os operadores aritméticos não encontrei nada.

Valew

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor vtrx » 04 Fev 2010 17:49

Acho então que voce deveria estudar algoritimos.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor Andre_Cruz » 04 Fev 2010 21:29

Eu quero saber como usar os dados abaixo:

Código: Selecionar todos
Operador    Ejemplo
$    Retorna contador de programa    goto $+3
(    Paréntesis izquierdo    1 +(d*4)
)    Paréntesis derecho    (longitud+1) * 256
!    Operador NOT (completo lógico)    If ! (a - b)
-    Negación (complemento a 2)    -1 * longitud
~    Complemento    flags = ~flags
high    Retorna byte alto    movlw high CTR_Tabla
low    Retorna byte bajo    movlw low CTR_Tabla
upper    Retorna byte superior    movlw upper CTR_Tabla
*    Multiplica    a = b * c
/    División    a = b / c
%    Módulo    entry_len = tot_len % 16
+    Suma    tot_len = entry_len * 8 + 1
-    Resta    entry_len = (tot - 1) / 8
<<    Desplazamiento a la izquierda    flags = flags << 1
>>    Desplazamiento a la derecha    flags = flags >> 1
>=    Mayor o igual    If entry_idx >= num_entries
>    Mayor que    If entry_idx > num_entries
<    Menor que    If entry_idx < num_entries
<=    Menor o igual    If entry_idx <= num_entries
= =    Igual a    If entry_idx = num_entries
!=    No igual a    If entry_idx != num_entries
&    Bitwise AND    flags = flags & ERROR_BIT
^    Bitwise Or-exclusiva    flags = flags ^ ERROR_BIT
|    Bitwise Or    flags = flags | ERROR_BIT
&&    Función AND lógica    If (len = = 511) && (b = = c)
||    Función lógica OR    If (len = = 511) || (b = = c)
=    Hacer igual a    entry_index = 0
+=    Sumar a, hacer igual    entry_index += 1
-=    Restar, hacer igual    entry_index -= 1
*=    Multiplicar, hacer igual    entry_index *= entry_length
/=    Dividir, hacer igual    entry_index /= entry_length
%=    Módulo, hacer igual    entry_index %= 8
<<=    Desplaza a la izquierda, hacer igual    flags <<=3
>>=    Desplaza a la derecha, hacer igual    flags >>=3
&=    AND, hacer igual    flags &=ERROR_FLAG
|=    OR, hacer igual    flags |= ERROR_FLAG
^=    OR-Exclusiva, hacer igual    flags ^= ERROR_FLAG
++    incrementar    i ++
--    decrementar    i --


Acho que não tem nada a ver com algoritmo, mas se tiver alguma literatura boa sobre o assunto, é sempre bem vindo novas informações.

Abraço

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor vtrx » 04 Fev 2010 21:38

Veja,voce vai ter que procurar na net algum código que use bastante diretivas,pois quando citei 'algoritimo' eu me referí que dependendo do seu nível de programação e necessidade voce poderá usa-las.
Agora voce não reparou que sua citação contém os exemplos?
]) Paréntesis derecho (longitud+1) * 256

Soma-se 1 a variável 'longitud' e multiplica por 256.

Código: Selecionar todos
...
INCF   LONGITUD,F
MULT   LONGITUD,256
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor Andre_Cruz » 05 Fev 2010 07:33

vtrx,

) Paréntesis derecho (longitud+1) * 256


Consegui acompanhar seu raciocinio, primeiro incrementa a variavel longitud, e depois multiplica o resultado por 256, o que eu não entendi é como devolver o resultado para uma variavel.

Código: Selecionar todos
;Tipo
         MOVF       (longitud+1)*256,w
         MOVWF      resultado


Como associar com as instruções do ASM ?
Tentei de várias formas e não consegui, por isso perguntei aqui.

Valewww

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Alesandro F Zagui » 05 Fev 2010 08:04

André, vc nao entendeu, nao altera o conteudo da variavel e sim o endereço dela.

Código: Selecionar todos
 MOVF (LONGITUDE+1)*256,W


Se por exemplo o endereço de Logitude for 0x20 entao ficara:
0x20 + 1 = 0x21
0x21 * 256 = 0x2100

Entendeu?
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Mensagempor Andre_Cruz » 05 Fev 2010 14:15

Alesandro,

Entendi sim !
Onde é usado ? Que eu nunca vi em nem um fonte ?

Valew

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Alesandro F Zagui » 05 Fev 2010 15:11

Esses comandos são interpretados pelo compilador.

Por exemplo, no codigo a seguer eu incremento uma variavel e testo se ela eh ficou maior que "~"

Código: Selecionar todos
     INCF         CARACTER,F
     MOVLW     "~" +1
     XORWF     CARACTER,W
     BTFSC      STATUS,Z
     GOTO       MAIOR_QUE
     GOTO       MENOR_QUE


Na hora da compilação, o MPASM vai substituir o "~" (0x7E) +1 por 0x7F.
Assim facilita o desenvolvimento, fica mais claro o "~"+1 do que 0x7F.
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x