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.
Download

Interface Hardware Software