Interface Hardware Software Monitoria Ângelo Lima Mazer - alm Daniel Brito de Oliveira Carvalho – dboc Diogo de Lima Lages – dll Igor Marcel Leal de Morais - imlm Lucio Paulo de Souza Ribeiro - lpsr Pedro Fernandes Dallegrave – pfd2 Rodolfo Cesar de Avelar Ferraz - rcaf Diretivas assembler O que são? Diferentemente das instruções assembly (mov, add, push, jmp...), que são comandos direcionados à CPU, as diretivas assembler são comandos direcionados ao assembler (exemplo: TASM). As diretivas assembler são executadas em tempo de “compilação” (montagem). Já as instruções assembly são executadas em tempo de execução. Diretivas assembly podem ser comandos para reservar áreas de memória, definir procedimentos, definir constantes, entre outros. DIRETIVAS TASM Definindo o modelo de memória e segmentos Definindo variáveis Definindo procedimentos Criando macros Criando estruturas Modelos de memória Modelo Segmento de dados Segmento de Código *TINY UM UM SMALL UM UM MEDIUM UM VÁRIOS COMPACT VÁRIOS UM LARGE VÁRIOS VÁRIOS HUGE VÁRIOS VÁRIOS FLAT UM UM Obs.: No modelo tiny o segmento de dados e o de código compartilham a mesma região de memória. Definindo modelo de memória Estrutura básica de um código em assembly .model small .stack .data .code mov ax,@data mov ds,ax mov int end ;Diretiva assembler .model definindo o modelo de memória ;Definindo o segmento de pilha ;Definindo segmento de dados ;Definindo segmento de código ax, 4c00h 21h ;Fim do segmento de código Variáveis .model small .stack .data Numero Numero1 VetorNumeros .code db 10 dw ? db 10 dup(5) ; Definindo um vetor com 10 posições ;de um byte contendo o valor 5 Constantes Declarando uma constante .model small .stack .data Numero Numero1 ConstanteCinco .code ... db 10 dw ? equ 5 Procedimento Declarando uma procedure .model small .stack .data .code mov ax,@data mov ds,ax call Func_1 mov ax, 4c00h int 21h Func_1 proc push bx mov bx,ax pop bx ret Func_1 endp end ;modelo de memória a ser usado ;Define o segmento de pilha ;Define segmento de dados ;Define segmento de código ;DS aponta para o segmento de dados ;AH – Função a ser chamada ;Chama SO para executar função requisitada Macros Declarando uma Macro .data meumacro MACRO <lista de parametros> <corpo do macro (código)> ENDM .code ... end Macros Exemplo: .model small .stack .data num1 num2 db 10 db 20 soma MACRO a , b mov al ,a add al,b mov a ,al Endm .code .startup soma num1 , num2 .exit end Estruturas Declarando uma estrutura .data minhastruc STRUC <corpo da estrutura (definição de variáveis)> ENDS .code ... end Estruturas Exemplo: .model small .stack .data date struc day db ? month db ? year dw ? ends ;definindo a estrutura aniversario date <04h,05h,1987h> feriado date <15h,11h,2008h> ;criando variável do tipo date ;e inicializando .code .startup mov al,aniversario.day mov ah,aniversario.month mov bx,aniversario.year .exit end Exercício 1 1.Definir uma struc “telefone” com ddd e o numero do telefone; Exercício 2 1. Definir uma struc “datas” e definir um vetor deste tipo, contendo 31 posições; 2. Definir uma macro que receba 3 parâmeros (dia, mês, ano), e armazene estes valores na primeira posição do vetor criado. 3. Definir uma macro que receba 4 parâmeros (data, mês, ano e posição de memória), que armazene estes valores na variável “data” correspondente; 4. Definir um procedimento, que utilize a macro criada, para inserir no vetor os 31 dias do mês de outubro de 2008.