segunda-feira, 14 de janeiro de 2013

Operações aritméticas

ADD destino, fonte
SUB destino, fonte




Usadas para adicionar (ou subtrair) dados entre:

  • registo e registo
  • registo e posição de memória
  • adicionar (ou subtrair) um número diretamente a (de) um registo ou posição de memória.

Combinações válidas de operandos:







Exemplos de instruções válidas:


ADD AX,BX                  ;soma o conteúdo de BX com AX, resultado em AX

ADD AX,WORD1         ;soma o conteúdo da posição de memória word1, 
                                       ;ao registo AX, resultado em AX.


SUB WORD2, AX         ;subtrai o conteúdo do registo AX ao conteúdo da posição de memória WORD2, resultando em WORD2.


SUB BL,5                       ;subtrai 5 decimal ao conteúdo de BL







Graficamente: suponha a instrução ADD AX, DX






INC destino
DEC destino


Usadas para adicionar 1 (incrementar) ou subtrair 1 (decrementar) ao/do conteúdo de:

  • Um registo
  • Uma posição de memória

Exemplos

  • INC CX ;incrementa o conteúdo de CX
  • INC WORD1 ;incrementa o conteúdo da posição de memória WORD1
  • DEC BYTE2 ;decrementa o conteúdo da posição de memória BYTE2
  • DEC CL ;decrementa o conteúdo de CL (Byte baixo de CX)


Graficamente: Suponha a instrução INC BYTE1



NEG destino
Usada para subtrair o conteúdo destino pelo seu valor negativo, operando sobre:

  • Um registo
  • Uma posição de memória


Exemplos:
  • NEG BX ;gera o valor negativo do conteúdo de BX.
  • NEG WORD1 ;idem, no conteúdo da posição de memória WORD1.


Graficamente: Suponha a instrução NEG BX






MUL fonte


MUL (multiply) - Usada com números em representação não sinalizada



Multiplicação com números em formato byte:

  • registos de 8 bits e vairáveis de tipo DB.
  • segundo operando é assumido em AL
  • resultado (destino) pode ser 16 bits e encontra-se em AX.




Multiplicação com números em formato word:

  • registos de 16 bits e variáveis do tipo DW
  • segundo operando é assumido em AX
  • resultado pode ser 32 bits (tamanho doubleword) e encontra-se em:

DX - 16 bits mais significativos (high word).
AX - 16 bits menos significativos (low word).






Exemplos de casos de multiplicação:
1. Suponha que AL contenha 80h e BL contenha FFh:
Antes:    AL = 80h = 10000000b = 128
             BL = FFh = 11111111b = 255





2. Suponha que AX contenha 0001h e BX contenha FFFFh:

antes:   AX = 0001h = 0000000000000001b = 1
            BX = FFFh = 1111111111111111n = 65535




DIV fonte

  • DIV (divide) - Usada com números em representação não-sinalizada.
  • Fonte deve ser considerada como divisor (não pode ser uma constante).




Divisão com números em formato byte:

  • O divisor é de 8 bits (1 byte)
  • O dividendo é assumido em AX (16 bits)
  • Após a execução: O quociente de 8 bits estará em AL, o resto de 8 bits estará em AH.




Divisão com números em formato word:
  • O divisor é de 16 bits (1 word)
  • O dividendo é de 32 bits:
    • DX → 16 bits mais significativos do dividendo (high word).
    • AX → 16 bits menos significativos do dividendo (low word).



Após a execução: -o quociente de 16 bits estará em AX.


                            -o resto dos bits estará em DX.



Exemplos de casos de divisão
1. Suponha que DX e AX contenham 0000h e 0005h, e BX contenha FFFEh;
Antes:
          DX: AX = 00000005h = 5
          BX = 0000FFFEh = 65534






2. Suponha que AX contenha 0005h e BL contenha FFh:
antes:  
AX = 005h = 5
BL = 00FFh = 256




3. Suponha que AX contenha 00FBh e BL contenha FFh
antes: 

           AX = 00FBh = 251
           BL = 00FFh = 256


Sem comentários:

Enviar um comentário