• Nenhum resultado encontrado

05- AulaIHS-InstrucoesAritmeticasLogicas

N/A
N/A
Protected

Academic year: 2021

Share "05- AulaIHS-InstrucoesAritmeticasLogicas"

Copied!
35
0
0

Texto

(1)

Interface Hardware-Software

Instruções Aritméticas e Lógicas x86

(Modo Real)

(2)

Categoria de Instruções no x86

 Transferência de dados  Aritméticas  Lógicas  Manipulação de bits  Strings  Desvios de fluxo

Veremos hoje!

(3)

Instruções Aritméticas/Lógicas

 Pode-se realizar operações aritméticas entre:

– Registrador, Registrador

– Registrador, Endereço de memória – Registrador,Imediato

– Endereço de Memória, Imediato

 Não se pode utilizar registradores de segmentos como operandos!

 Quando utilizar um registrador para acessar operando na memória, lembre que só podem ser utilizados registradores de base ou de índice (BX,BP,SI e DI)

(4)

Instruções Aritméticas ADD/SUB

 Adiciona/subrai o valor de origem com/de destino, colocando o resultado em destino

 São possíveis as seguintes combinações:

add

destino

,

origem

Forma Geral

destino, origem exemplo

registrador, registrador add ax, dx

registrador, imediato sub al, 0x12

registrador, memória add ax, [0x1e]

memória, registrador sub [bx], ax

memória, imediato add byte[si], 0x23

(5)

Funcionamento do ADD

0x0001 AX Memória Destino 0x1235 AX Destino 0x12 0x34 ? ? DS + 0x302 DS +0x303 Fonte DS + 0x301 DS + 0x300 0x0302 SI

add

AX

,

[SI]

(6)

Funcionamento do SUB

0x0001 AX 0x0003 Origem Destino 0xFFFE AX Destino

sub

AX

,

0x0003

(7)

Instruções Aritméticas INC/DEC

 Incrementa/decrementa o valor de destino em uma unidade colocando o resultado em destino

 Melhor do que utilizar add/sub, pois inc/dec são instruções que ocupam menos memória (1 byte invés de 3 bytes)

destino pode ser:

inc

destino

Forma Geral

destino exemplo

registrador inc ax

memória dec byte[0x1e]

(8)

Funcionamento do INC/DEC

0x0001 AX Destino 0x0002 AX Destino

inc

AX

0x0001 AX Destino

dec

AX

(9)

Instrução Aritmética CMP

 Compara o valor de origem com o de destino, mas não altera o valor de nenhum dos operandos

– Altera o flag ZF para 1 caso operandos iguais, senão 0

 São possíveis as seguintes combinações:

cmp

destino

,

origem

Forma Geral

destino, origem exemplo

registrador, registrador cmp ax, dx

registrador, imediato cmp al, 0x12

registrador, memória cmp ax, [0x1e]

memória, registrador cmp [bx], ax

(10)

Funcionamento do CMP

Destino

cmp word

[SI]

,

0x10

Memória 0x00 0x10 ? ? DS + 0x302 DS +0x303 Origem DS + 0x301 DS + 0x300 0x0302 SI 0x0010

1

(11)

Instrução Aritmética CMPXCHG

 Compara o valor de destino a AL, AX ou EAX (depende do tamanho de destino)

– Se operandos forem iguais, destino←origem – Senão, AL,AX ou EAX ← destino

 São possíveis as seguintes combinações:

cmpxchg

destino

,

origem

Forma Geral

destino, origem exemplo

registrador, registrador cmpxchg bl, dl

registrador, memória cmpxchg bx, [0x1e]

(12)

Funcionamento do CMPXCHG

cmpxchg

bl

,

cl

Antes

(13)

Mais sobre CMPXCHG

 Esta instrução só foi criada a partir do processador 486

 Permite a comparação e troca de valores de maneira atômica

– Usada para a atualização atômica de semáforos

mov dx,1 mov ax, 0 Lock:cmp ax,[bx] jnz Lock mov [bx],dx Regiao_critica: mov dx,1 Lock:mov ax, 0 cmpxchg [bx],dx jnz Lock Regiao_critica:

Pode ser interrompido entre duas instruções

Atualização atômica do

(14)

Instrução Aritmética MUL

 Faz a multiplicação sem sinal do valor de origem por AL, AX ou EAX

origem é um registrador ou um operando na memória

 Resultado colocado em:

mul

origem

(15)

Chapter 2 — Instructions: Language of the Computer — 15

Funcionamento do MUL

MUL CL

00 20H 00 80H AH AL CH CL 10 00H AH AL Multiplica CL por AL e coloca resultado em AX

(16)

Instrução Aritmética IMUL

 A primeira forma é idêntica a mul, porém é uma multiplicação com sinal

 Na segunda forma, faz origem x destino e coloca resultado em destino

destino deve ser um registrador de 16/32 bits

origem pode ser reg, operando na memória ou imediato

 Na terceira forma, faz imediato x origem (não pode ser imediato) colocando o resultado em destino

imul

origem

Formas Gerais

imul

destino

,

origem

(17)

Exemplos de Uso IMUL

imul cl; ax = cl*al

imul ax,bx; ax = ax * bx

imul ecx,[di]; ecx = ecx *[di]

imul bx,-50; bx = bx * (-50)

imul ebx,[esi],2000; ebx = [esi] * 2000

(18)

Instrução Aritmética DIV/IDIV

div/idiv fazem a divisão sem/com sinal de AX, DX:AX,

ou EDX:EAX por origem dependendo do tamanho de

origem (byte, word ou double word)

origem é um registrador ou um operando na memória

div

origem

Forma Geral

(19)
(20)

Funcionamento do IDIV

IDIV

CX

DX 0x7960 AX CX Divide DX:AX por CX e coloca resultado em DX:AX 0xFFFE 0x1388 0xFFEC 0xFFFE7960

÷

AX DX 0x0000 Em decimal -100000 Em decimal 5000 Em decimal -20 Quociente Resto

(21)

Instrução Aritmética NEG

 Muda o sinal do valor de destino

destino é um registrador ou um operando na memória – Lembrando que números são representados em

complemento de dois  Exemplos:

neg

destino

Forma Geral

destino exemplo registrador neg bx

(22)

Instruções Aritméticas CBW/CWD/CWDE/CDQ

cbw faz uma extensão com sinal do operando de 8 bits de

al para 16 bits em ax

cwd faz uma extensão com sinal do operando de 16 bits

de ax para 32 bits em dx:ax

cwde faz uma extensão com sinal do operando de 16 bits de ax

para 32 bits em eax

cdq faz uma extensão com sinal do operando de 32 bits de eax

para 64 bits em edx:eax

 Úteis para preparar os operandos antes de um mul ou div

cbw

Formas Gerais

(23)

Instrução Lógica NOT

 Faz a negação bit a bit de destino

destino é um registrador ou um operando na memória

 Exemplos:

not

destino

Forma Geral

destino exemplo

registrador not ax

(24)

Instruções Lógicas AND/OR/XOR

 Faz o e/ou/ou-exclusivo lógico bit a bit de origem com

destino, colocando o resultado em destino

 São possíveis as seguintes combinações:

and

destino

,

origem

Formas Gerais

destino, origem exemplo

registrador, registrador and ax, dx

registrador, imediato or al, 0x12

registrador, memória xor ax, [0x1e]

memória, registrador and [bx], ax

memória, imediato or byte[si], 0x23

or

destino

,

origem

xor

destino

,

origem

(25)

Instrução Lógica TEST

 Faz o “e” lógico bit a bit de origem com destino,

contudo não coloca o resultado em destino, apenas as flags são alteradas

 São possíveis as seguintes combinações:

test

destino

,

origem

Forma Geral

destino, origem exemplo

registrador, registrador test ax, dx

registrador, imediato test al, 0x12

registrador, memória test ax, [0x1e]

memória, registrador test [bx], ax

memória, imediato test byte[si], 0x23

imediato, registrador test 0x23, cl

(26)

Diferença entre o AND e o TEST

and

al

,

dl

1

00000001 AL DL 10000000 00000000 AL

test

al

,

dl

1

00000001 AL

Faz o and bit a bit e modifica al e flags

Faz o and bit a bit e modifica apenas

(27)

Exemplo de Uso do Test

test dx,1

jnz IMPAR

inc ax

jmp exit

IMPAR:

inc bx

exit:...

Código que testa se um

número é par ou ímpar

if (d % 2 == 0)

par++;

else

impar++;

...

(28)

Instruções Lógicas BSF/BSR

 Instruções que percorrem origem bit a bit até encontrar o primeiro bit 1, e colocam a posição do bit em destino

destino deve ser um registrador de 16/32 bits ou um operando na memória

– origem pode ser um registrador de 16/32 bits ou um operando na memória

bsf percorre origem partindo do bit menos significativo,

bsr percorre no sentido contrário

 Se origem tem valor 0, ZF terá valor 1 e destino terá um valor indefinido

bsf

destino

,

origem

Formas Gerais

(29)

Funcionamento do BSF e o BSR

EBX

0x4CE00000

bsf

eax

,

ebx

0x00000015 EAX 21 em decimal

(30)

Instrução Lógica BT

 Testa o bit de destino na posição indicada por origem, e coloca o valor do bit no flag de carry

– Instrução adicionada no processador 386

 São possíveis as seguintes combinações de operandos:

bt

destino

,

origem

Forma Geral

destino, origem exemplo

reg16/32, imediato bt ax, 10

reg16/32, reg16/32 bt eax,ebx

mem16/32, reg16/32 bt word[0x300], ax

(31)

Funcionamento do BT

Destino

bt word

[SI]

,

4

Memória 0x00 0x00 0x00 0x10 DS + 0x302 DS +0x303 DS + 0x301 DS + 0x300 0x0300 SI

1

0x0010 Binário 0000000000010000 Bit 4

(32)

Instruções Lógicas BTC/BTS/BTR

 Testam o bit de destino na posição indicada por origem, e coloca o valor do bit no flag de carry, mas modificam o bit em destino

btc complementa o bit de destino na posição indicada por

origem

bts coloca o bit de destino para 1 na posição indicada por

origem

btr coloca o bit de destino para 0 na posição indicada por

origem

btc

destino

,

origem

Formas Gerais

bts

destino

,

origem

(33)

Exemplos de Uso BTC/BTS/BTR

mov ax,10

btc ax,0; ax = 11, carry = 0

bts ax,2; ax = 15, carry = 0

btr ax,3; ax = 7, carry = 1

(34)

Instrução Lógica SETcc

 Testa a flag especificada em condição, caso ela seja

verdadeira, armazena-se o valor 1 no byte especificado em

destino, caso contrário 0

destino só pode ser um registrador/operando na memória de 8 bits

set<condição>

destino

(35)

Exemplos de SETcc

mov al,10

sub al,10; al = 0, zero = 1, carry = 0

setz al; al = 1

mov bl, 9

add bl,3; bl = 12, zero = 0, carry = 0

setc bl; bl = 0

Se flag zero = 1, coloca 1 em al

Se flag carry = 1, coloca 1 em

bl, senão coloca 0

Referências

Documentos relacionados

Esses conteúdos aparecem associados de forma significativa ao discurso dos não especialistas, ou seja, os sentidos em torno da doença são construídos diretamente pela ação

até a data do óbito do segurado, mantenha-se em união estável com este, devidamente reconhecida por sentença proferida em procedimento judicial de

§ 2º Os cursos técnicos de nível médio autorizados pela Secretaria de Estado de Educação do Distrito Federal, após deliberação do Conselho de Educação do Distrito Federal,

g) apresentar letra ilegível e/ou incompreensível. Na Prova Discursiva - Redação, a folha para rascunho no Caderno de Provas será de preenchimento facultativo. Em

No primeiro, avaliaram-se o pH, a relação nitrogênio amoniacal/nitrogênio total (N-NH3/Ntotal), a composição química e a digestibilidade in vitro da matéria seca (DIVMS) de

A NBR 13368 (ABNT, 1995), referência normativa no Brasil para a avaliação do incômodo devido às operações de pouso e decolagem de aeronaves de asas fixas e

b) As liberações previstas neste parágrafo deverão ser previamente negociadas caso a caso, entre a Empresa e a FENADADOS, de acordo com o cronograma das

Ficou demonstrado, por análises em relação aos grupos de natureza de despesa e em relação ao Produto Interno Bruto, que as aplicações de recursos em despesas de