28
Conteúdo: Instruções de salto Instruções de laços: loop Instruções de contagem Instruções de comparação Instruções de flag Instruções de salto Usadas para transferir o processo de execução do programa para o operador indicado. JMP JA (JNBE) JAE (JNBE) JB (JNAE) JBE (JNA) JE (JZ) JNE (JNZ) JG (JNLE) JGE (JNL) JL (JNGE) JLE (JNG) JC JNC JNO JNP(JPO) JNS JO JP (JPE) JS

Instruções de comandos assembler

Embed Size (px)

Citation preview

Contedo:Instrues de salto Instrues de laos: loop Instrues de contagem Instrues de comparao Instrues de flag

Instrues de salto Usadas para transferir o processo de execuo do programa para o operador indicado. JMP JA (JNBE) JAE (JNBE) JB (JNAE) JBE (JNA) JE (JZ) JNE (JNZ) JG (JNLE) JGE (JNL) JL (JNGE) JLE (JNG) JC JNC JNO JNP(JPO) JNS JO JP (JPE) JS

Instruo JMP Propsito: Salto incondicional. Sintaxe:

JMP destino Esta instruo usada para desviar o curso do programa sem tomar em conta as condies atuais dos flags ou dos dados.

Instruo JA (JNBE) Propsito: Salto condicional. Sintaxe: JA smbolo Aps uma comparao este comando salta se no igual. Isto quer dizer que o salto s feito se o flag CF ou o flag ZF esto desativados, ou seja, se um dos dois for zero.

Instruo JAE (JNB) Propsito: Salto condicional. Sintaxe: JAE smbolo A instruo salta se est up, se est equal ou se est not down. O salto feito se CF est desativado.

Instruo JB (JNAE) Propsito: Salto condicional. Sintaxe: JB smbolo A instruo salta se est down, se est not up ou se est equal. O salto feito se CF est ativado.

Instruo JBE (JNA) Propsito: Salto condicional. Sintaxe: JBE smbolo A instruo salta se est down, se est equal ou se est not up. O salto feito se CF ou ZF esto ativados, ou seja, se um deles for 1.

Instruo JE (JZ) Propsito: Salto condicional. Sintaxe: JE smbolo A instruo salta se est equal ou se est zero. O salto feito se ZF est ativado.

Instruo JNE (JNZ) Propsito: Salto condicional. Sintaxe: JNE smbolo A instruo salta se est not equal ou se est zero. O salto feito se ZF est desativado.

Instruo JG (JNLE) Propsito: Salto condicional, e o sinal tomado.

Sintaxe: JG smbolo A instruo salta se est larger, se est not larger ou se est equal. O salto ocorre se ZF = 0 ou se OF = SF.

Instruo JGE (JNL) Propsito: Salto condicional, e o sinal tomado. Sintaxe: JGE smbolo A instruo salta se est larger, se est less than ou se est equal. O salto feito se SF = OF.

Instruo JL (JNGE) Propsito: Salto condicional, e o sinal tomado. Sintaxe: JL smbolo A instruo salta se est less than, se est not larger than ou se est equal. O salto feito se SF diferente de OF.

Instruo JLE (JNG) Propsito: Salto condicional, e o sinal tomado. Sintaxe: JLE smbolo A instruo salta se est less than, se est equal ou se est not larger.

O salto feito se ZF = 1 ou se SF diferente de OF.

Instruo JC Propsito: Salto condicional, e os flags so tomados. Sintaxe: JC smbolo A instruo salta se h carry. O salto feito se CF = 1.

Instruo JNC Propsito: Salto condicional, e o estado dos flags tomado. Sintaxe: JNC smbolo A instruo salta se no h carry. O salto feito se CF = 0.

Instruo JNO Propsito: Salto condicional, e o estado dos flags tomado. Sintaxe: JNO smbolo A instruo salta se no h overflow O salto feito se OF = 0.

Instruo JNP (JPO)

Propsito: Salto condicional, e o estado dos flags tomado. Sintaxe: JNP smbolo A instruo salta se no h paridade ou se a paridade mpar. O salto feito se PF = 0.

Instruo JNS Propsito: Salto condicional, e o estado dos flags tomado. Sintaxe: JNP smbolo A instruo salta se o sinal est desativado. O salto feito se SF = 0.

Instruo JO Propsito: Salto condicional, e o estado dos flags tomado. Sintaxe: JO smbolo A instruo salta se h overflow. O salto feito se OF = 1.

Instruo JP (JPE) Propsito: Salto condicional, e o estado dos flags tomado. Sintaxe: JP smbolo

A instruo salta se h paridade ou se a paridade par. O salto feito se PF = 1.

Instruo JS Propsito: Salto condicional, e o estado dos flags tomado. Sintaxe: JS smbolo A instruo salta se o sinal est ativado. O salto feito se SF =1.

Instrues para laos: LOOP Estas instrues transferem a execuo do processo, condicional ou incondicionalmente, para um destino, repetindo a ao at o contador ser zero. LOOP LOOPE LOOPNE

Instruo LOOP Propsito: Gerar um lao no programa. Sintaxe: LOOP smbolo A instruo LOOP decrementa CX de 1 e transfere a execuo do programa para o smbolo que dado como operador, caso CX ainda no seja 1.

Instruo LOOPE Propsito: Gerar um lao no programa, considerando o estado de ZF. Sintaxe: LOOPE smbolo Esta instruo decrementa CX de 1. Se CX diferente de zero e ZF igual a 1, ento a execuo do programa transferida para o smbolo indicado como operador.

Instruo LOOPNE Propsito: Gerar um lao no programa, considerando o estado de ZF. Sintaxe: LOOPNE smbolo Esta instruo decrementa CX de 1 e transfere a execuo do programa apenas se ZF diferente de 0.

Instrues contadoras Estas instrues so usadas para decrementar ou incrementar o contedo de contadores. DEC INC

Instruo DEC Propsito: Decrementar o operador. Sintaxe: DEC destino

Esta instruo subtrai 1 do operador destino e armazena o novo valor no mesmo operador.

Instruo INC Propsito: Incrementar o operador. Sintaxe: INC destino Esta instruo adiciona 1 ao operador destino e mantm o resultado no mesmo operador.

Instrues de comparao Estas instrues so usadas para comparar os operadores, e elas afetam o contedo dos flags. CMP CMPS (CMPSB) (CMPSW)

Instruo CMP Propsito: Comparar os operadores. Sintaxe: CMP destino,fonte Esta instruo subtrai o operador fonte do destino, mas no armazena o resultado da operao, apenas afeta o estado dos flags.

Instrues CMPS (CMPSB) (CMPSW) Propsito: Comparar cadeias de um byte ou uma palavra.

Sintaxe: CMP destino,fonte Esta instruo compara efetuando uma subtrao entre o byte ou palavra endereado por DI, dentro do segmento extra de dados, e o byte ou palavra endereado por SI dentro do segmento de dados, afetando o registrador de flags, mas sem devolver o resultado da subtrao. A instruo automaticamente incrementa ou decrementa os registradores de ndice SI e DI, dependendo do valor do flag DF, de modo a indicar os prximos dois elementos a serem comparados. O valor de incremento ou decremento uma de uma ou duas unidades, dependendo da natureza da operao. Diante desta instruo, pode-se usar um prefixo para repetio, de modo a comparar dois blocos de memria entre si, repetindo a instruo de comparao at que ambos se tornem iguais ou desiguais.

Instrues de flag Estas instrues afetam diretamente o contedo dos flags. CLC CLD CLI CMC STC STI

Instruo CLC Propsito: Limpar o flag de carry. Sintaxe: CLC Esta instruo desliga o bit correspondente ao flag de carry. Em outras palavras, ela o ajusta para zero.

Instruo CLD Propsito: Limpar o flag de endereo. Sintaxe: CLD Esta instruo desliga o bit correspondente ao flag de endereo.

Instruo CLI Propsito: Limpar o flag de interrupo. Sintaxe: CLI Esta instruo desliga o flag de interrupes, desabilitando, deste modo, interrupes mascarveis. Uma interrupo mascarvel aquela cujas funes so desativadas quando IF=0.

Instruo CMC Propsito: Complementar o flag de carry. Sintaxe: CMC Esta instruo complementa o estado do flag CF. Se CF = 0 a instruo o iguala a 1. Se CF = 1, a instruo o iguala a 0. Poderamos dizer que ela apenas inverte o valor do flag.

Instruo STC Propsito: Ativar o flag de carry.

Sintaxe: STC Esta instruo ajusta para 1 o flag CF.

Instruo STD Propsito: Ativar o flag de endereo. Sintaxe: STD Esta instruo ajusta para 1 o flag DF.

Instruo STI Propsito: Ativar o flag de insterrupo. Sintaxe: STI Esta instruo ativa o flag IF, e habilita interrupes externas mascarveis (que s funcionam quando IF = 1).

1998 Jeferson B. do Amaral

Contedo:Instrues de transferncia Instrues de carga Instrues de pilha

Instrues de transferncia So usadas para mover o contedo dos operadores. Cada instruo pode ser usada com diferentes modos de endereamento. MOV MOVS (MOVSB) (MOVSW)

Instruo MOV Propsito: Transferncia de dados entre clulas de memria, registradores e o acumulador. Sintaxe: MOV Destino,Fonte Destino o lugar para onde o dado ser movido e Fonte o lugar onde o dado est. Os diferentes movimentos de dados permitidos para esta instruo so:*Destino: *Destino: *Destino: *Destino: *Destino: *Destino: *Destino: *Destino: *Destino: memria. Fonte: acumulador acumulador. Fonte: memria registrador de segmento. Fonte: memria/registrador memria/regitrador. Fonte: registrador de segmento registrador. Fonte: registrador registrador. Fonte: memria memria. Fonte: registrador registrador. Fonte: dado imediato memria. Fonte: dado imediato

Exemplo:

MOV AX,0006h

MOV BX,AX MOV AX,4C00h INT 21h

Este pequeno programa move o valor 0006h para o registrador AX, ento ele move o contedo de AX (0006h) para o registrador BX, e finalmente move o valor 4C00h para o registrador AX para terminar a execuo com a opo 4C da interrupo 21h.

Instrues MOVS (MOVSB) (MOVSW) Propsito: Mover byte ou cadeias de palavra da fonte, endereada por SI, para o destino endereado por DI. Sintaxe: MOVS Este comando no necessita de parmetros uma vez que toma como endereo fonte o contedo do registrador SI e como destino o contedo de DI. A seguinte seqncia de instrues ilustra isso:MOV SI, OFFSET VAR1 MOV DI, OFFSET VAR2 MOVS

Primeiro inicializamos os valores de SI e DI com os endereos das variveis VAR1 e VAR2 respectivamente, ento aps a execuo de MOVS o contedo de VAR1 copiado para VAR2. As instrues MOVSB e MOVSW so usadas do mesmo modo que MOVS, a primeira move um byte e a segunda move uma palavra.

Instrues de carga So instrues especficas para registradores, usadas para carregar bytes ou cadeias de bytes num registrador. LODS (LODSB) (LODSW) LAHF LDS LEA LES

Instrues LODS (LODSB) (LODSW) Propsito: Carregar cadeias de um byte ou uma palavra para o acumulador. Sintaxe: LODS Esta instruo toma a cadeia encontrada no endereo especificado por SI, a carrega para o registrador AL (ou AX) e adiciona ou subtrai, dependendo do estado de DF, para SI se uma transferncia de bytes ou de palavras.MOV SI, OFFSET VAR1 LODS

Na primeira linha vemos a carga do endereo de VAR1 em SI e na segunda tomado o contedo daquele local para o regiustrador AL. Os comandos LODSB e LODSW so usados do mesmo modo, o primeiro carrega um byte e o segundo uma palavra (usa todo o registrador AX).

Instruo LAHF Propsito: Transferir o contedo dos flags para o registrador AH. Sintaxe: LAHF Esta instruo til para verificar o estado dos flags durante a execuo do nosso programa. Os flags so deixados na seguinte ordem dentro do registrador:SF ZF ?? AF ?? PF ?? CF

O "??" significa que haver um valor indefinido naqueles bits.

Instruo LDS Propsito: Carregar o registrador de segmento de dados. Sintaxe: LDS destino,fonte O operador fonte deve ser uma double word na memria. A palavra associada com o maior endereo transferida para DS, em outras palavras isto tomado como o

endereo de segmento. A palavra associada com o menor endereo o endereo de deslocamento e depositada no registrador indicado como destino.

Instruo LEA Propsito: Carregar o endereo do operador fonte. Sintaxe: LEA destino,fonte O operador fonte deve estar localizado na memria, e seu deslocamento colocado no registrador de ndice ou ponteiro especificado no destino. Para ilustrar uma das facilidades que temos com este comando, vejamos:MOV SI,OFFSET VAR1

equivalente a:LEA SI,VAR1

muito provvel que para o programador muito mais fcil criar programas grandes usando este ltimo formato.

Instruo LES Propsito: Carregar o registrador de segmento extra Sintaxe: LES destino,fonte O operador fonte deve ser uma palavra dupla na memria. O contedo da palavra com endereo maior interpretado como o endereo do segmento e colocado em ES. A palavra com endereo menor o endereo do deslocamento e colocada no registrador especificado no parmetro de destino.

Instrues de manipulao da pilha Estas instrues permitem usar a pilha para armazenar ou recuperar dados. POP POPF PUSH PUSHF

Instruo POP Propsito: Recuperar uma parte de informao da pilha. Sintaxe: POP destino Esta instruo transfere o ltimo valor armazenado na pilha para o operador de destino, e incrementa de 2 o registrador SP. Este incremento duplo pelo fato de que a pilha do mais alto endereo de memria para o mais baixo, e a pilha trabalha apenas com palavras, 2 bytes, logo deve ser 2 o incremento de SP, na realidade 2 est sendo subtrado do tamanho real da pilha.

Instruo POPF Propsito: Extrair os flags armazenados na pilha. Sintaxe: POPF Este comando transfere os bits da palavra armazenada na parte mais alta da pilha para registrador de flag. O modo da transferncia como se segue:BIT 0 2 4 6 7 8 9 10 11 FLAG CF PF AF ZF SF TF IF DF OF

Os locais dos bits so os mesmos para o uso da instruo PUSHF. Uma vez feita a transferncia o registrador SP incrementado de 2, conforme vimos anteriormente.

Instruo PUSH Propsito: Coloca uma palavra na pilha. Sintaxe: PUSH fonte A instruo PUSH decrementa de dois o valor de SP e ento transfere o contedo do operador fonte para o novo endereo desultante no registrador recm modificado. O decremento no endereo duplo pelo fato de que quando os valores so adicionados pilha, que cresce do maior para o menor endereo, logo quando subramos de 2 o registrador SP o que fazemos incrementar o tamanho da pilha em dois bytes, que a nica quantidade de informao que a pilha pode manusear em cada entrada e sada.

Instruo PUSHF Propsito: Colocar os valores dos flags na pilha. Sintaxe: PUSHF Este comando decrementa de 2 o valor do registrador SP e ento o contedo do registrador de flag transferido para a pilha, no endereo indicado por SP. Os flags so armazenados na memria da mesma forma que o comando POPF.

1998 Jeferson B. do Amaral

Contedo:Instrues lgicas Instrues aritmticas

Instrues lgicas So usadas para realizar operaes lgicas nos operadores. AND NEG NOT OR TEST XOR

Instruo AND Propsito: Realiza a conjuno de operadores bit a bit. Sintaxe: AND destino,fonte Com esta instruo a operao lgica "y" para ambos os operadores usada como na tabela:Fonte Destino | Destino ----------------------------1 1 | 1 1 0 | 0 0 1 | 0 0 0 | 0

O resultado desta operao armazenado no operador de destino.

Instruo NEG Propsito: Gera o complemento de 2. Sintaxe: NEG destino Esta instruo gera o complemento de 2 do operador destino e o armazena no mesmo operador. Por exemplo, if AX armazena o valor 1234H, ento: NEG AX Isto far com o que o valor EDCCH fque armazenado no registrador AX.

Instruo NOT Propsito: Faz a negao do operador de destino bit a bit. Sintaxe: NOT destino O resultado armazenado no mesmo operador de destino.

Instruo OR Propsito: Realiza um OU lgico. Sintaxe: OR destino,fonte A instruo OR, faz uma disjuno lgica bit a bit dos dois operadores:Fonte Destino | Destino ----------------------------------1 1 | 1 1 0 | 1 0 1 | 1 0 0 | 0

Instruo TEST

Propsito: Compara logicamente os operadores. Sintaxe: TEST destino,fonte Realiza uma conjuno, bit a bit, dos operadores, mas difere da instruo AND, uma vez que no coloca o resultado no operador de destino. Tem efeito sobre o registrador de flag.

Instruo XOR Propsito: Realiza um OU exclusivo. Sintaxe: XOR destino,fonte Esta instruo realiza uma disjuno exclusiva de dois operadores bit a bit.Fonte Destino | Destino ----------------------------------1 1 | 0 0 0 | 1 0 1 | 1 0 0 | 0

Instrues aritmticas So usadas para realizar operaes aritmticas nos operadores. ADC ADD DIV IDIV MUL IMUL SBB SUB

Instruo ADC Propsito: Efetuar a soma entre dois operandos com carry. Sintaxe: ADC destino,fonte Esta instruo efetua a soma entre dois operandos, mais o valor do flag CF, existente antes da operao. Apenas o operando destino e os flags so afetados. O resultado armazenado no operador de destino.

Instruo ADD Propsito: Adio de dois operadores. Sintaxe: ADD destino,fonte Esta instruo adiciona dois operadores e armazena o resultado no operador destino.

Instruo DIV Propsito: Diviso sem sinal. Sintaxe: DIV fonte O divisor pode ser um byte ou uma palavra e o operador que dado na instruo. Se o divisor de 8 bits, o registrador AX de 16 bits tomado como dividendo e se o divisor de 16 bits, o par de registradores DX:AX ser tomado como dividendo, tomando a palavra alta de DX e a baixa de AX. Se o divisor for um byte, ento o quociente ser armazenado no registrador AL e o resto em AH. Se for uma palavra, ento o quociente armazenado em AX e o resto em DX.

Instruo IDIV

Propsito: Diviso com sinal. Sintaxe: IDIV fonte Consiste basicamente como a instruo DIV, diferencia-se apenas por realizar a operao com sinal. Para os resultados so usados os mesmos registradores da instruo DIV.

Instruo MUL Propsito: Multiplicao com sinal. Sintaxe: MUL fonte Esta instruo realiza uma multiplicao no sinalizada entre o contedo do acumulador AL ou AX pelo operando-fonte, devolvendo o resultado no acumulador AX caso a operao tenha envolvido AL com um operando de 8 bits, ou em DX e AX caso a operao tenha envolvido AX e um operando de 16 bits.

Instruo IMUL Propsito: Multiplico de dois nmeros inteiros com sinal. Sintaxe: IMUL fonte Esta instruo faz o mesmo que a anterior, difere apenas pela incluso do sinal. Os resultados so mantidos nos mesmos registradores usados pela instruo MUL.

Instruo SBB Propsito: Subtrao com carry. Sintaxe:

SBB destino,fonte Esta instruo subtrai os operadores e subtrai um do resultado se CF est ativado. O operador fonte sempre subtrado do destino. Este tipo de subtrao usado quando se trabalha com quantidades de 32 bits.

Instruo SUB Propsito: Subtrao. Sintaxe: SUB destino,fonte Esta instruo subtrai o operador fonte do destino.

1998 Jeferson B. do Amaral