Você está na página 1de 14

Data de alterao 12/8/2003. ESTRUTURA DO PROGRAMA ASSEMBLER.

Pilha Tamanho_da_Pilha Data Definio das variveis. Code Comandos End

Comentrios.
Ser considerado um comentrio toda a string que estiver aps o caracter ;

DEFINIO DE VARIVEIS.
Finalidade Alocar espao na rea de dados. Tipos de variveis Word e char Sintaxe: def tipo nome_varivel. Exemplo: def word var1. def char 1 var2 def char 5 var3

INSTRUES
Movrr Movimenta valores entre registradores Sintaxe: movrr registrador_origem registrador_destino Exemplo: movrr AX BX Tamanho da instruo 3 bytes Cdigo binrio da Instruo - 10 Movcr Movimenta uma valor constante numrico para um registrador Sintaxe: movcr Constante_Numrica AX Exemplo: movcr 70000 AX Tamanho da instruo 6 bytes Cdigo binrio da Instruo 11 Movvr Movimenta o contedo de uma varivel para um registrador Sintaxe: movcr varivel DX Exemplo: movcr var1 AX Tamanho da instruo 3 bytes Cdigo binrio da Instruo 12
1

Movvv Movimenta o contedo de uma varivel para outra Sintaxe: movvv Varivel_Origem Varivel_Destino Exemplo: movvv var1 var2 Tamanho da instruo 3 bytes Cdigo binrio da Instruo 13 Movcv Movimenta uma constante numrico para uma varivel Sintaxe: movcv Constante_Numrica varivel Exemplo: movcr 70000 var1 Tamanho da instruo 6 bytes Cdigo binrio da Instruo 14 Movrv Movimenta o contedo de um registrador para uma varivel Sintaxe: movrv registrador_Origem varivel Exemplo: movcr AX var1 Tamanho da instruo 3 bytes Cdigo binrio da Instruo 15 Movstr Movimenta um bloco de memria com tamanho especfico (no mximo 50 bytes) a partir do endereo apontado por dois registradores. Sintaxe: movstr tamanho registrador_Origem registrador_Destino Exemplo: movstr 40 AX BX Tamanho da instruo 4 bytes Cdigo binrio da Instruo 16

OPERAO DE ENCERRAMENTO DE EXECUO


end Encerra a execuo do programa Sintaxe: end Exemplo: end Tamanho da instruo 1 bytes Cdigo binrio da Instruo 254

OPERAOES ARITMTICAS
Add Realiza a operao soma de dois registradores e o resultado armazenado no primeiro registrador Sintaxe: add registrador1 registrador2 Exemplo: add AX BX Tamanho da instruo: 3 bytes Cdigo Binrio: 30

Sub Realiza a operao subtrao de dois registradores e o resultado armazenado no primeiro registrador Sintaxe: sub registrador1 registrador2 Exemplo: sub AX BX Tamanho da instruo: 3 bytes Cdigo Binrio: 31 Mul Realiza a operao multiplicao de dois registradores e o resultado armazenado no primeiro registrador Sintaxe: mul registrador1 registrador2 Exemplo: mul AX BX Tamanho da instruo: 3 bytes Cdigo Binrio: 32 Div Realiza a operao diviso de dois registradores. A parte inteira armazenada no registrador CX e o resto da diviso no registrador DX Sintaxe: div registrador1 registrador2 Exemplo: div AX BX Tamanho da instruo: 3 bytes Cdigo Binrio: 33

INSTRUO DE CARGA DE ENDEREO


Load Carrega o endereo de uma varivel em um registrador Sintaxe: Load nome_varivel registrador Exemplo: load var1 AX Tamanho da instruo: 3 bytes Cdigo Binrio: 40

INSTRUO DE DESVIO
Jmp Desvia a execuo do programa incondicionalmente para algum label declarado no programa Sintaxe: jmp label Exemplo: jmp inicio Tamanho da instruo: 2 bytes Cdigo Binrio: 20 Jz Desvia a execuo do programa se o flag de comparao for zero Sintaxe: jz label Exemplo: jz inicio Tamanho da instruo: 2 bytes Cdigo Binrio: 21

Jnz Desvia a execuo

do programa se o flag de comparao for diferente de zero

Sintaxe: jnz label Exemplo: jnz inicio Tamanho da instruo: 2 bytes Cdigo Binrio: 22 Jgt Desvia a execuo do programa se o flag de comparao for maior que zero Sintaxe: jgt label Exemplo: jnz inicio Tamanho da instruo: 2 bytes Cdigo Binrio: 23 Jlt Desvia a execuo do programa se o flag de comparao for menor que zero Sintaxe: jlt label Exemplo: jnz inicio Tamanho da instruo: 2 bytes Cdigo Binrio: 22

INSTRUO DE COMPARAO
cmprr Realiza a comparao entre o contedo de dois registradores. O registrador de condio alterado. Sintaxe: cmprr registrador1 registrador2 Resultado: 0 se registrador1 igual a registrador2 1 se registrador1 maior que registrador2 -1 se registrador1 menor que registrador2 Exemplo: cmprr AX BX Tamanho da instruo: 3 bytes Cdigo Binrio: 50 cmprc Realiza a comparao entre o contedo de um registrador e um constante numrica. O registrado de condio alterado. Sintaxe: cmprr registrador Constante_Numrica Exemplo: cmprc AX 234567 Resultado: 0 se Constante_Numrica igual a registrador2 1 se Constante_Numrica maior que registrador2 -1 se Constante_Numrica menor que registrador2 Tamanho da instruo: 6 bytes Cdigo Binrio: 51 cmprv Realiza a comparao entre o contedo de um registrador e uma varivel numrica. O registrado de condio alterado. Sintaxe: cmprv registrador nome_varivel Exemplo: cmprv AX var1 Resultado: 0 se registrador igual a nome_varivel

1 se registrador maior que nome_varivel -1 se registrador menor que nome_varivel Tamanho da instruo: 3 bytes Cdigo Binrio: 52 cmpstr Realiza a comparao de duas cadeias de string apontado por dois registradores com tamanho especifico. O registrado de condio alterado. Sintaxe: cmpstr tamanho registrador registrador Exemplo: cmpstr 23 AX BX Resultado: 0 se a cadeia apontado por AX igual a cadeia apontado por BX 1 se se a cadeia apontado por AX maior que cadeia apontado por BX -1 se se a cadeia apontado por AX menor que cadeia apontado por BX Tamanho da instruo: 4 bytes Cdigo Binrio: 53

ENTRADA E SADA.
inw Realiza a leitura de um valor inteiro no teclado e armazena de forma binria no registrador. Sintaxe: inw registrador Exemplo: inw AX Tamanho da instruo: 2 bytes Cdigo Binrio: 60 inc Realiza a leitura de um caracter no teclado e armazena no endereo de memria apontado por um registrador. Sintaxe: inc registrador Exemplo: inc AX Tamanho da instruo: 2 bytes Cdigo Binrio: 61 instr Realiza a leitura de uma string com o tamanho mximo (no mximo 50 caracteres) especificado e armazena no endereo de memria apontado por um registrador. O ltimo byte da string dever conter o zero binrio (\0). Sintaxe: instr tamanho registrador Exemplo: instr 20 AX Tamanho da instruo: 3 bytes Cdigo Binrio: 62 outw Mostra um valor inteiro armazenado em um resgistrador. Sintaxe: outw registrador Exemplo: outw AX Tamanho da instruo: 2 bytes Cdigo Binrio: 63

outc Mostra um caracter armazenado em um endereo apontado por um resgistrador. Sintaxe: outc registrador Exemplo: outc AX Tamanho da instruo: 2 bytes Cdigo Binrio: 64 outstr Mostra uma string armazenada no endereo de memria apontado por um registrador. O ltimo byte da string dever conter o zero binrio (\0). Sintaxe: outstr registrador Exemplo: outstr AX Tamanho da instruo: 2 bytes Cdigo Binrio: 65

LABEL.
Para definir um rtulo dentro do cdigo necessrio utilizar um Label. A declarao de um rtulo realizado da seguinte forma: Label Nome_do_rtulo Preferencialmente colocar o rtulo em uma linha sem cdigo. O rtulo no gera cdigo. PILHA. push Coloca o contedo de um registrador na Pilha. Sintaxe: push registrador Exemplo: push AX Tamanho da instruo: 2 bytes Cdigo Binrio: 70 pop Retira um valor da pilha e armazena em um registrador. Sintaxe: pop registrador Exemplo: pop AX Tamanho da instruo: 2 bytes Cdigo Binrio: 71 CHAMADA DE PROCEDIMENTO. call Salva o endereo de execuo atual na pilha e desvia a execuo para uma funo. Sintaxe: call nome_de_funo. Exemplo: call calculo. Tamanho da instruo: 2 bytes Cdigo Binrio: 80

TABELA RESUMO.
Instruo Movrr Movcr Movvr Movvv Movcv Movrv Movstr Descrio Movimenta valores entre registradores Movimenta uma constante numrica para um registrador Movimenta o valor de uma varivel para um registrador Movimenta o valor de uma varivel para outra Movimenta uma constante numrica para uma varivel Movimenta o contedo de um registrador para uma varivel Movimenta um bloco de memria com tamanho especfico (no mximo 50 bytes) a partir do endereo apontador por dois registradores Desvia a execuo do programa para algum endereo dentro do cdigo Desvia a execuo do programa se o flag de condio for igual a zero Desvia a execuo do programa se o flag de condio no for igual a zero Desvia a execuo do programa se o flag de condio for maior que zero Desvia a execuo do programa se o flag de condio for menor que zero Realiza a operao de soma entre dois registradores e o resultado armazenado no primeiro registrador Realiza a operao de subtrao entre dois registradores e o resultado armazenado no primeiro registrador Realiza a operao de multiplicao entre dois registradores e o resultado armazenado no primeiro registrador Realiza a operao de diviso entre dois registradores. A parte inteira armazenado no registrador CX e o resto armazenado no registrador DX. Carrega o endereo de uma varivel em um registrador Realiza a comparao entre o contedo de
7

Cdigo Decimal 10 11 12 13 14 15 16

Tamanho Em bytes 3 6 3 3 6 3 4

Jmp Jz Jnz Jgt Jlt Add Sub Mul Div

20 21 22 23 24 30 31 32 33

2 2 2 2 2 3 3 3 3

Load cmprr

40 50

3 3

cmprc cmprv cmpstr Inw Inc Instr

Outw Outc Outstr Push Pop Call

dois registradores. O registrador de condio alterado Realiza a comparao entre o contedo de um registrador e uma constante numrica. O registrador de condio alterado Realiza a comparao entre um registrador e uma varivel numrica. O registrador de condio alterado Realiza a comparao entre duas cadeias de string apontado por dois registradores com tamanho especfico Realiza a leitura de um valor inteiro no teclado e armazena de forma binria no registrador Realiza a leitura de um caracter no teclado e armazena em um endereo apontado pelo registrador Realiza a leitura de uma string com tamanho mximo especificado (50 caracteres) e armazena no endereo de memria apontado por um registrador. O ltimo byte dever conter o zero binrio Mostra um valor inteiro armazenado em um registrado Mostra um caracter armazenado em um endereo de memria apontado por um registrador Mostra uma string armazenada no endereo de memria apontado por um registrador. Coloca um elemento na pilha e encrementa o registrador SP Retira um elemento da pilha e decrementa o registrador SP Desvia a execuo do programa para uma funo

51 52 53 60 61 62

6 3 4 2 2 2

63 64 65 70 71 80

2 2 2 2 2 2

EXEMPLO DE PROGRAMA ASSEMBLER.


Pilha 20 Data Def word var1 eq 0 Def word var2 eq 0 Def word var3 eq 0 Def char 20 msgx eq Primeiro Valor: Def char 20 msgy eq Segundo Valor: Def char 20 msgz eq O resultado : Code Load msgx ax Outstr ax Inw ax Movrv ax var1 Load msgy bx Label teste Outstr bx Inw cx Movrv cx var2 Movvr var1 ax Movvr var2 bx Add ax bx Movrv ax var3 Load msgz ax Outstr ax Movvr var3 bx Outw bx End

TABELA DE SMBOLOS.
Smbolo Var1 Var2 Var3 Msgx Msgy Msgz Tamanho 4 4 4 20 20 20 Endereo Inicial 0 4 8 12 32 52

TABELA DE LABEL
Nome teste Endereo 85

GERAO DE CDIGO.
N da linha 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Cdigo Assembler Data Def word var1 eq 0 Def word var2 eq 0 Def word var3 eq 0 Def char 20 msgx eq Primeiro Valor: Def char 20 msgy eq Segundo Valor: Def char 20 msgz eq O resultado : Code Load msgx ax Outstr ax Inw ax Movrv ax var1 Load msgy bx Outstr bx Inw cx Movrv cx var2 Movvr var1 ax Movvr var2 bx Add ax bx Movrv ax var3 Load msgz ax Outstr ax Movvr var3 bx Outw bx End Cdigo binrio Tamanho em bytes 4 4 4 20 20 20 40 12 0 65 0 60 0 15 0 0 40 32 1 65 1 60 2 15 2 4 12 0 0 12 4 1 30 0 1 15 0 8 40 52 0 65 0 12 8 1 63 1 254 3 2 2 3 3 2 2 3 3 3 3 3 3 2 3 2 1 72 75 77 79 82 85 87 89 92 95 98 101 104 107 109 112 114 Endereo

Segmento de Dados = 72 bytes Segmento de Cdigo = 43 bytes

10

FORMATO DO ARQUIVO BINRIO GERADO PELO MONTADOR.


Tam_arquivo_exe Tam_Data Data_Comp Hora_ Comp Quantidade_de_Variveis Endereo_inicial_da_varivel Tipo_da_varivel Tamanho Endereo_inicial_da_varivel Tipo_da_varivel Tamanho Endereo_inicial_da_varivel Tipo_da_varivel Tamanho Endereo_inicial_da_varivel Tipo_da_varivel Tamanho Endereo_inicial_da_varivel Tipo_da_varivel Tamanho Endereo_inicial_da_varivel Tipo_da_varivel Tamanho Cdigo Cdigo Cdigo Cdigo

Valor_Inicial Valor_Inicial Valor_Inicial Valor_Inicial Valor_Inicial Valor_Inicial

CDIGO DE MQUINA DO EXEMPLO.


72 08/08/2002 10:00 30 6 0040 4040 8040 12 1 20 Primeiro Valor: 32 1 20 Segundo Valor: 52 1 20 O Resultado : 40 12 0 65 0 60 0 15 0 0 40 32 1 65 1 60 2 15 2 4 12 0 0 12 4 1 30 0 1 15 0 8 40 52 0 65 0 15 8 1 63 1 254
145

11

CARGA DO PROGRAMA NA MEMRIA

12

ESTRUTURAS DE DADOS E CONSTANTES


//Constantes registradores de propsito geral #define AX #define BX #define CX #define DX 0 1 2 3

//Tamanho mximo da memria #define MAXMEM 256 // varivel que simula a CPU Struct CPU { int AX, BX, CX, DX; //registradores de propsito geral int IP; //Apontador da prxima instrao a ser executada int RB; //Registrador Base int FLAGS; //Registrador de Condio int SB, SP; //Base da Pilha e Ponteiro de Pilha }cpu; //Memria Simulada char memoria[MAXMEM]; //Constantes de Instrues #define MOVRR #define MOVCR #define MOVVR #define MOVVV #define MOVCV #define MOVRV #define MOVSTR #define JMP #define JZ #define JNZ #define JGT #define JLT #define ADD #define SUB #define MUL #define DIV #define LOAD #define CMPRR 10 11 12 13 14 15 16 20 21 22 23 24 30 31 32 33 40 50

13

#define CMPRC #define CMPRV #define CMPSTR #define INW #define INC #define INSTR #define OUTW #define OUTC64 #define OUTSTR #define PUSH #define POP #define CALL

51 52 53 60 61 62 63 65 70 71 80

OBSERVAES: -

Qualquer constante numrica ter o tamanho de 4 bytes. Qualquer constante numrica ser armazenado em 4 bytes. Um endereo de memria ter no mximo o valor 255 (1 byte). Todos os valores sero armazenados na memria simulada no formato binrio.

14