INSTRUÇÕES DE TRANSFERÊNCIA



Documentos relacionados
Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly

Operadores lógicos (bit a bit)

x86 arquitetura e instruções básicas

Microprocessadores. Família x86 - Programação do i8086

Programação ao nível da máquina. Operações lógicas e aritméticas

8. Instruções de multiplicação e divisão

7. Instruções lógicas, de deslocamento e de rotação

Software de Telecomunicações Tópicos de Assembly86

Arquitetura de Computadores. Prof. João Bosco Jr.

Microprocessador Intel 8086

PMR5229 Metodologia de projeto. Jun Okamoto Jr.

Os 3 principais tipos de Instruções (INSTRUTION SET) dos up são:

7. A pilha e subrotinas

A arquitectura IA32. A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador.

****************************************************************************

CPU. CPU Unidade Central de Processamento. Função: leitura, escrita e processamento de dados

EEL Microprocessadores

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Organização de Computadores 1

Assembly. Prof. Jorge Cavalcanti. Prof. Sérgio Faustino.

Introdução à programação em linguagem assembly

Organização de Computadores 1

Unidade: Unidade Lógica e Aritmética e Registradores. Unidade I:

LABORATÓRIO DE LINGUAGEM DE MONTAGEM INTERRUPÇÕES DO DOS E DA BIOS

Linguagem de Montagem

Software de Telecomunicações. Tópicos de Assembly86

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas

Conjunto de instruções e modos de. aula 4. Profa. Débora Matos

Arquitetura de Computadores. Tipos de Instruções

Organização Funcional

Introdução. Programando em Assembly. Primeiro Exemplo (2) Primeiro Exemplo (1) Linguagem Assembly do 8086/8088

INT 5h - Print screen Modo Resolução Caract. INT 10h - Vídeo INT 10h - Vídeo

CAPÍTULO 3 NÍVEL ISA. 3.1 Introdução ao Nível de Arquitetura do Conjunto de Instruções

Arquitetura de Computadores

Estrutura do tema ISA do IA-32

Arquitetura de Computadores

Fluxo de Execução em Assembly

Linguagem de Montagem 2. Operações e Operandos

A linguagem ASSEMBLY

Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32

Laboratório de Sistemas Processadores e Periféricos

2 Formalidades referentes ao trabalho

Conjunto de. Instrução MIPS. Parte II. Instruções MIPS. Instruções MIPS. Instruções MIPS :: Instruções lógicas. :: Instruções lógicas

Linguagem de Montagem

Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano

Criptografia e Segurança das Comunicações

Sistemas de Computação

Introdução a Engenharia Reversa

Sistemas de Computação para Controle e Automação CIC132. Assembly. Assembly. Notas. Décima quarta aula: Introdução a programação Assembly

Introdução a Organização de Computadores e Linguagens de Montagem. Ricardo Anido

ARQUITETURA DE COMPUTADORES

MÓDULO. Conjunto de Instruções do 8086/88 Aritméticas, lógicas, deslocamento e rotação M 02

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

ArchC. Wesley Nunes Gonçalves

Arquitectura de Computadores

Disciplina de. Organização de Computadores Digitais

x86 Assembly Mini-Course

ULA Sinais de Controle enviados pela UC

Objetivos Gerais. Arquitetura de Computadores. Arquiteturas estudadas. O Computador Neander

Sistemas Lógicos II. Aula 10

Computadores de Programação (MAB353)

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Programando em Assembly

Linguagem de Montagem e Assembly. André Luiz da Costa Carvalho

Neander - características

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar

Interface Hardware/Software. Centro de Informática - UFPE Paulo Maciel prmm@cin.ufpe.br

Conjunto de Instruções (ISA) II

Arquitectura de Computadores II. Medição de desempenho

Funcionamento básico de um computador

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

EXEMPLO DE ARQUITETURAS REAIS INTEL 8086 AULA 07 Arquitetura de Computadores Gil Eduardo de Andrade

Aula 14: Instruções e Seus Tipos

2 - Processadores. CEFET-RS Curso de Eletrônica. Organização de Computadores. Profs. Roberta Nobre & Sandro Silva

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Organização e Arquitetura de Computadores I

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Arquitetura de Computadores. Assembly Miscelâneas. Mário O. de Menezes.

Prova de Arquitectura de Computadores (21010) Data: 12 de Fevereiro de 2010

Arquitetura de Um Processador I

Prova de Arquitectura de Computadores (21010) Data: 5 de Fevereiro de 2009

Transcrição:

INSTRUÇÕES DE TRANSFERÊNCIA Transferência de dados MOV destino, fonte move fonte para destino (byte, word ou double word) PUSH fonte coloca fonte na pilha (word ou double word) POP destino retira topo da pilha para destino (word ou double word) XCHG op1, op2 troca (exchange) operandos BSWAP r32 inverte a ordem dos bytes 1. Acesso a registros de segmento: MOV, PUSH e POP; 2. Endereçamento imediato para CS e IP: não permitido; 3. Operandos de PUSH e POP: 16 ou 32 bits 4. PUSH: decrementa SP (2 ou 4) e escreve; POP: lê e incrementa SP (2 ou 4) Transferência de flags PUSHF/PUSHFD POPF/POPFD LAHF SAHF Transferência sobre endereços coloca registrador de flags na pilha (16 bits para F ou 32 bits para EF) retira registrador de flags da pilha (16 bits para F e 32 bits para EF) carrega AH com flags (8 bits menos significativos do registrador F) carrega flags com AH (8 bits menos significativos do registrador F) LEA r16/r32, mem carrega endereço efetivo do operando mem para reg (16 ou 32 bits) LDS r16/32, mem carrega endereço de mem para reg (16 ou 32 bits) e DS (16 bits) LES r16/32, mem carrega endereço de mem para reg (16 ou 32 bits) e ES (16 bits) LFS r16/32, mem carrega endereço de mem para reg (16 ou 32 bits) e FS (16 bits) LGS r16/32, mem carrega endereço de mem para reg (16 ou 32 bits) e GS (16 bits) Prof. Sérgio L. Cechin 1 de 12

Tradução XLAT converte AL (translate byte) AL [BX+AL]. Entrada e Saída IN acumulador, porta leitura de byte, word ou dobleword para AL, AX ou EAX OUT porta, acumulador transfere byte, word ou doubleword de AL, AX ou EAX para a porta 1. Espaço de endereçamento separado da memória 2. Capacidade para 65536 endereços (portas) 3. Formatos possíveis: IN AL, im8 OUT im8, AL IN AL, DX OUT DX, AL IN AX, im8 OUT im8, AX IN AX, DX OUT DX, AX IN EAX, im8 OUT im8, EAX IN EAX, DX OUT DX, EAX INSTRUÇÕES ARITMÉTICAS Com dois operandos ADD destino, fonte soma (destino = destino + fonte) ADC destino, fonte soma com carry (destino = destino + fonte + carry) SUB destino, fonte subtrai fonte do destino (destino = destino fonte) SBB destino, fonte subtrai com borrow (destino = destino fonte borrow) CMP destino, fonte compara destino fonte (sem armazenar o resultado) 1. Registradores de segmento não podem ser operados 2. Os dois operandos devem ter a mesma largura 3. O registrador envolvido determina a largura (8, 16 ou 32) 4. No caso de mem ou imed., declarar explicitamente a largura Prof. Sérgio L. Cechin 2 de 12

Com um operando INC destino incrementa de 1 DEC destino decrementa de 1 NEG destino troca sinal (complemento de dois) Multiplicação e Divisão MUL fonte multiplica como inteiro sem sinal IMUL fonte multiplica como inteiro com sinal DIV fonte divide como inteiro sem sinal IDIV fonte divide como inteiro com sinal 1. Um dos operandos está implícito; 2. Multiplicação...... de 8 bits AX AL x fonte... de 16 bits DX:AX AX x fonte... de 32 bits EDX:EAX EAX x fonte 3. Divisão...... de 8 bits AL (AH = resto) AL / fonte... de 16 bits AX (DX = resto) DX:AX / fonte... de 32 bits EAX (EDX = resto) EDX:EAX / fonte 4. Outros formatos para IMUL (para >= 486) IMUL reg, imed reg = reg x imed IMUL reg1, reg2, imed reg1 = reg2 x imed IMUL reg, mem, imed reg = mem x imed IMUL reg1, reg2 reg1 = reg1 x reg 2 IMUL reg, mem reg = reg x mem Prof. Sérgio L. Cechin 3 de 12

Conversão e Ajuste CBW converte byte para word (AL para AX) CWD converte word para double word (AX para DX:AX) CWDE converte word para double word (AX para EAX) CDQ converte double word para quad word (EAX para EDX:EAX) DAA decimal adjust after addition (sobre AL) DAS decimal adjust after subtraction (sobre AL) AAA ASCII adjust after addition (sobre AL) AAS ASCII adjust after subtraction (sobre AL) AAM ASCII adjust after multiplication (sobre AX) AAD ASCII adjust before division (sobre AX) 1. Usadas em conjunto com as instruções ADD, SUB, MUL e DIV 2. Para ADD, SUB e MUL, aplicar o ajuste após a operação 3. Para DIV, aplicar o ajuste antes da operação 4. AAx, ajustam um BCD por byte; 5. DAx, ajustam dois BCD por byte. Conversão e Ajuste MOVSX destino, fonte move fonte para destino com extensão do sinal (números com sinal) MOVZX destino, fonte move fonte para destino com extensão de zeros (inteiros positivos) 1. Após o 80386 2. Formatos possíveis MOVSX r16, rm8 MOVSX r32, rm8 MOVSX r32, rm16 MOVZX r16, rm8 MOVZX r32, rm8 MOVZX r32, rm16 Prof. Sérgio L. Cechin 4 de 12

MANIPULAÇÃO DE BITS Instruções lógicas NOT AND OR XOR TEST Deslocamento destino destino, fonte destino, fonte destino, fonte destino, fonte (AND, sem armazenar resultado) SHR destino, contador shift logical right 0 SAR destino, contador shift arithmetic right SHL destino, contador shift left SAL destino, contador shift left 0 ROR destino, contador rotate right 0 RCR destino, contador rotate with carry right ROL destino, contador rotate left RCL destino, contador rotate with carry left 1. Codificações possíveis operação reg,1 operação reg, CL operação reg, im8 operação mem,1 operação mem, CL operação mem, im8 2. Número de deslocamentos: 0 até 31 (a partir do 286) Prof. Sérgio L. Cechin 5 de 12

Operações sobre bits BSF operand1, operand2 Bit Scan Forward BSR operand1, operand2 Bit Scan Reverse BT operand, bit_index Bit Test BTC operand, bit_index Bit Test and Complement BTR operand, bit_index Bit Test and Reset BTS operand, bit_index Bit Test and Set 1. A partir do 386 2. BSF e BSR procuram pelo primeiro bit em 1 BSF, a partir do LSB BSR, a partir do MSB 3. BT, BTC, BTR e BTS testam o bit indicado (copia p/ ) BT, só testa BTC, testa e inverte BTR, testa e coloca 0 BTS, testa e coloca 1 INSTRUÇÕES DE DESVIO 1. desvios dentro do segmento de código corrente (não altera CS) near jump instrução dentro do segmento; short jump instrução localizada entre 128 e +127 da posição atual 2. desvios para fora do segmento de código corrente (altera o CS) far jump desvio para instrução em outro segmento de código Incondicional JMP destino 1. Formas possíveis: Direto: short IP IP + offset (1 byte) near IP IP + offset (2 ou 4 byte) far CS:IP offset (4 bytes) Indireto near IP (ou EIP) conteúdo de registrador ou de memória far CS:IP (ou CS:EIP) conteúdo de registrador ou de memória Prof. Sérgio L. Cechin 6 de 12

Controle de Laço LOOP endereço loop LOOPE endereço loop while equal / zero (enquanto ZF=1) LOOPZ endereço loop while equal / zero (enquanto ZF=1) LOOPNE endereço loop while not equal / not zero (ZF=0) LOOPNZ endereço loop while not equal / not zero (ZF=0) JCXZ endereço jump if CX = 0 JECXZ endereço jump if ECX = 0 1. LOOP e LOOPcc, utilizam o registro CX (ECX) como contador de laço 2. LOOPcc, além do contador, utilizam o ZF para decidir se desviam 3. Os desvios são short (8 bits) Subrotinas CALL endereço RET valor_opcional Interrupções de Software INT tipo interrupção INTO interrupção se overflow IRET retorno de interrupção Prof. Sérgio L. Cechin 7 de 12

Desvio condicional JG endereço greater ((SF XOR OF) OR ZF) = 0 JNLE endereço not less nor equal idem JGE endereço greater or equal (SF XOR OF) = 0 JNL endereço not less idem JL endereço less (SF XOR OF) = 1 JNGE endereço not greater nor equal idem JLE endereço less or equal ((SF XOR OF) OR ZF) = 1 JNG endereço not greater idem JO endereço overflow OF = 1 JS endereço sign SF = 1 JNO endereço not overflow OF = 0 JNS endereço not sign SF = 0 JA endereço above ( OR ZF) = 0 JNBE endereço not below nor equal idem JAE endereço above or equal = 0 JNB endereço not below idem JB endereço below = 1 JNAE endereço not above nor equal idem JBE endereço below or equal ( OR ZF) = 1 JNA endereço not above idem JC endereço carry = 1 JE/JZ endereço equal / zero ZF = 1 JP/JPE endereço parity / parity even PF = 1 JNC endereço not carry = 0 JNE/JNZ endereço not equal / not zero ZF = 0 JNP/JPO endereço not parity / parity odd PF = 0 1. Todos os desvios condicionais são relativos 2. Podem ser short (8bits) ou near (16 bits ou 32 bits) 3. Desvios near, somente a partir do 386 Prof. Sérgio L. Cechin 8 de 12

MANIPULAÇÃO DE STRINGS Utilização implícita dos seguintes registros: [E]SI índice para string fonte [E]DI índice para string destino ES segmento do string destino [E]CX contador AL/AX/EAX valor de busca (destino p/ LODS, fonte p/ STOS) DF 0 (auto incremento p/ DI, SI), 1 (auto decremento p/ DI, SI) ZF condição de término para busca e comparação Instruções: (s, nas instruções, pode ser substituído por B, W ou D) MOVSs move source string to destination string Move um elemento: DS:SI ES:DI CMPSs compare source string with destination string Compara dois elementos: DS:SI - ES:DI SCASs scan destination string Procura pelo elemento AL (AX ou EAX): AL - ES:DI LODSs load into AL/AX from source string Carrega elemento para AL (AX ou EAX): DS:SI AL STOSs store AL/AX into destination string Armazena elemento de AL (AX ou EAX): ES:DI AL 1. Controle de auto incremento (decremento): flag DF=0 (1) 2. Controle de repetição REP repeat REPE / REPZ repeat while equal / zero REPNE / REPNZ repeat while not equal / not zero Colocadas como prefixo Utiliza ECX para o número de repetições Prof. Sérgio L. Cechin 9 de 12

CONTROLE DO PROCESSADOR Instruções sobre flags STC CLC CMC STD CLD STI CLI set carry flag clear carry flag complement carry flag set direction flag clear direction flag set interrupt-enable flag clear interrupt-enable flag Instruções condicionais sobre flags SETcc rm8 set byte on condition (>=386) CMOVcc destino, fonte conditional move (>= Pentium Pro) Detalhes 1. cc todas as condições dos desvios condicionais 2. destino registro (16 ou 32 bits); fonte registro ou memória Instruções de prefixo SEG segreg override default segment register 1. Na linguagem simbólica, a instrução aparece como: MOV AX, ES:[BX] Prof. Sérgio L. Cechin 10 de 12

PILHA PILHA Exemplo de Programa SEGMENT STACK DB 32 DUP ( STACK--- ) ENDS CR: EQU 00DH LF: EQU 00AH DADOS SEGMENT MENSAGEM DB Hello World!,CR,LF TAMANHO EQU $-MENSAGEM CONTADOR DB? DADOS ENDS CODIGO SEGMENT ASSUME CS:CODIGO,SS:PILHA,DS:DADOS START: MOV AX, DADOS ; Inicializa segmento de dados MOV DS, AX MOV CONTADOR, 10 ; Loop de operação DE_NOVO: CALL FRASE DEC CONTADOR JNZ DE_NOVO MOV AH, 4CH ; DOS: Termina com código de retorno MOV AL, 0 INT 21H FRASE PROC NEAR MOV AH, 40H ; DOS: Grava em arquivo MOV BX, 0001H ; Saída padrão LEA DX, MENSAGEM MOV CX, TAMANHO INT 21H RET FRASE ENDP CODIGO ENDS END START Prof. Sérgio L. Cechin 11 de 12

Short Reference MOV destino, fonte PUSH fonte POP destino LEA r16/r32, mem Lrs r16/r32, mem rs=ds, ES, FS, GS XLAT AL [BX+AL] ADD destino, fonte ADC destino, fonte SUB destino, fonte SBB destino, fonte CMP destino, fonte INC destino DEC destino NEG destino MUL fonte AX AL x fonte; DX:AX AX x fonte; EDX:EAX EAX x fonte IMUL fonte DIV fonte IDIV fonte DAA (decimal-soma) AL DAS (decimal-subtração) AL AAA (ASCII-soma) AL AAS (ASCII-subtração) AL AAM (ASCII-multiplicação) AX AAD (ASCII-divisão) AX Prof. Sérgio L. Cechin 12 de 12