Post on 19-Apr-2015
Interface Hardware/Software
Centro de Informática - UFPEPaulo Maciel
prmm@cin.ufpe.br
Interrupções do BIOS
• INT 10h - Vídeo– Interrupção do BIOS que trata o vídeo.– Os serviços são passados através do registrador AH.
• INT 13h – DISCO
• INT 16h - Teclado
• INT 17h – Impressora
• INT 1Ah – Ler relógio/data ou atualiza relógio/data.
2
INT 10h - Vídeo
• Ajusta o Modo de Vídeo
– Chama-se com: AH = 00h AL = Modo
– Recebe-se em: nenhum
3
Modo (em AL) Tipo Tamanho Cor
0 Texto 40 x 25 Off
1 Texto 40 x 25 On
2 Texto 80 x 25 Off
3 Texto 80 x 25 On
4 Gráficos 320 x 200 On
5 Gráficos 320 x 200 Off
6 Gráficos 640 x 200 Off
7 Texto 80 x 25 Off
INT 10h - Vídeo
• Ajusta formato do cursor
– Chama-se com: AH = 01h CL = Linha Inicial CH = Linha Final
– Recebe-se em: nenhum
Número de linhas = 74
INT 10h - Vídeo
• Posiciona o cursor
– Chama-se com: AH = 02h DL = Coluna DH = Linha BH = Número da página
A tela monocromática (modo 7) possui somente uma página de texto.
– Recebe-se em: nenhum
5
INT 10h - Vídeo
• Ler posição do cursor
– Chama-se com: AH = 03h BH = Número da página
– Recebe-se em: DL = Linha Inicial DH = ColunaInicial CX = Tipo do Cursor
6
INT 10h - Vídeo
• Selecionar página
– Chama-se com: AH = 05h AL = Página
– Recebe-se em: nenhum
7
INT 10h - Vídeo
• Rolar para cima a janela de vídeo
– Chama-se com: AH = 06 AL = número de linhas a serem roladas (Zero (0) rola todas) CH = linha do canto superior esquerdo CL = coluna do canto superior esquerdo DH = linha do canto inferior direito DL = coluna do canto inferior direito BH = atributo a ser usado nas novas linhas
– Recebe-se em: nenhum
8
INT 10h - Vídeo
• Rolar para baixo a janela de vídeo
– Chama-se com: AH = 07 AL = número de linhas a serem roladas (Zero (0) rola todas). CH = linha do canto superior esquerdo CL = coluna do canto superior esquerdo DH = linha do canto inferior direito DL = coluna do canto inferior direito BH = atributo a ser usado nas novas linhas
– Recebe-se em: nenhum
9
INT 10h - Vídeo
• Ler o caracter e o atributo da posição do cursor
– Chama-se com: AH = 08h BH = Número da Página
– Recebe-se em: Al = Caráter AH = Atributo do caracter
10
INT 10h - Vídeo
• Escreve caracter e atributo
– Chama-se com: AH = 09h BH = Número da Página Al = Caracter AH = Atributo do carácter CX = Número de repetições
– Recebe-se em: nenhum
11
INT 10h - Vídeo
• Escreve caracter
– Chama-se com: AH = 10 BH = número da página AL = caracter CX = número de repetições
– Recebe-se em: nenhum
12
INT 10h - Vídeo
• Escreve um ponto (pixel)
– Chama-se com: AH = 12 AL = cor do pixel. BH = página CX = coordenada X (coluna) DX = coordenada Y (linha)– Recebe-se em:
nenhum
13
INT 10h - Vídeo
• Ler um ponto (pixel)
– Chama-se com: AH = 13 BH = página CX = coordenada X (coluna) DX = coordenada Y (linha)– Recebe-se em:
AL = cor do pixel.
14
INT 10h - Vídeo
• Obtém o modo do vídeo
– Chama-se com: AH = 15
– Recebe-se em: AH = 00h
AL = Modo BH = página
15
INT 13h - DISCO
• Reseta sistema de disco
– Chama-se com: AH = 00 DL = Número do Driver – Recebe-se em:
CF = 0 Sem erro 1 Erro AH = Código do erro
16
Código do Erro00h - sem erro01h - comando inválido02h - “address mark” não encontrado03h - disco protegido04h - setor não encontrado05h - falha de reset06h - disco removido08h - erro de DMA09h - erro de limite de DMA10h - setor com erro20h - falha do controlador40h - trilha não encontrada80h - time-out
INT 13h - DISCO
• Obtém status
– Chama-se com: AH = 01 – Recebe-se em:
AH = Código do erro
17
INT 13h - DISCO
• Ler/Escrever/Verificar/Formatar
– Chama-se com: AH=02h/03h/04h/05h
AL= número de setores CH= número do cilindro CL= número do setor (1, se AH=5) DH= número da cabeça DL= número da unidade ES:BX= buffer
18
Recebe-se em: CF = 0 Sem erro
1 Erro AH = Código do erro
INT 16h - Teclado
• Aguarda a digitação de um caracter e o lê– Chama-se com: AH = 0h
Se um caractere ASCII foi digitado – Recebe-se em: AH = código de varredura AL = código ASCII
Se um caractere especial foi digitado– Recebe-se em: AH = código ASCII estendido AL = 00h
19
INT 16h - Teclado
• Verifica se um caracter está pronto
– Chama-se com: AH = 01h
Se um caractere ASCII foi digitado – Recebe-se em: ZF=0 AH = Código de varredura AL =Código ASCII
Caso contrário, ZF=1
20
INT 16h - Teclado
• Obtêm status do teclado
– Chama-se com: AH = 02h
– Recebe-se em: AL = status 01h - shift direito ativo
02h - shift esquerdo ativo 04h - crtl ativo 08h - alt ativo 10h - num lock ativo 20h - scroll lock ativo 40h - caps lock ativo 80h - inserção ativa
21
INT 17h - Impressora
• Inicializa impressora
– Chama-se com: AH = 01h DX = Número da impressora (Porta paralela:
0..2) – Recebe-se em:
Nenhum
22
INT 17h - Impressora
• Obtêm status da impressora
– Chama-se com: AH = 02h
DX = Número da impressora
– Recebe-se em:
AH = status
01h - time-out
08h - erro de I/O
10h - impressora selecionada 20h - sem papel
40h - reconhecimento
80h - impressora desocupada
23
INT 17h - Impressora
• Imprime caractere
– Chama-se com: AH = 00h AL = caractere DX = número da impressora – Recebe-se em:
AH = status
24
Interrupção
• INT 1Ah– Ler o Relógio;
– Atualizar o Relógio;
– Ler a Data;
– Atualizar a Data.
25
Interrupção - INT 1Ah
• Ler o contador do relógio.
– Chama-se com: AH = 00h
– Recebe-se em: AL = 0, se não se passaram 24h da última
leitura. CX = Parte de alta-ordem do contador. DX = Parte de baixa-ordem do contador.
26
Interrupção - INT 1Ah
• Atualizar o contador do relógio.
– Chama-se com: AH = 01h. CX = Parte de alta-ordem do contador. DX = Parte de baixa-ordem do contador.
27
Interrupção - INT 1Ah
• Ler o relógio.
– Chama-se com: AH = 02h
– Recebe-se em: CH = Horas em BCD. CL = Minutos em BCD. DH = Segundos em BCD. DL = Milesegundos em BCD.
28
Interrupção - INT 1Ah
• Ler a data.
– Chama-se com: AH = 04h
– Recebe-se em: CH = Século (19, 20,21) em BCD. CL = Ano em BCD. DH = Mês em BCD. DL = Dia em BCD.
29
Interrupção - INT 1Ah
• Atualizar a data.
– Chama-se com:AH = 05h.CH = Século (19,20,21) em BCD.CL = Ano em BCD.DH = Mês em BCD.DL = Dia em BCD.
30
Interrupção
• INT 21h– Chamar uma diversidade de funções do
DOS.
31
Interrupção - INT 21h
• Leitura do teclado com eco.
– Chama-se com:
AH = 01h
Se um caractere ASCII foi digitado.
– Recebe-se em:
AL = código ASCII.
Se um caracter não foi digitado, aguarda.
– Exemplo.:
char db ?
.....
mov ah,1
int 21h
mov char,al
32
Interrupção - INT 21h
• Mostra um caracter em tela.
– Chama-se com:AH = 02hDL = código ASCII do caracter.
– Exemplo.: mov ah,02mov dl,´*´int 21h
33
Interrupção - INT 21h
• Leitura de uma entrada auxiliar (serial 1).
– Chama-se com:AH = 03h.
– Recebe-se em:AL = código ASCII.Se um caracter não foi digitado, aguarda.
– Exemplo.: char db ? ....mov ah,3int 21hmov char,al
34
Interrupção - INT 21h
• Transmite caracter via saída auxiliar.
– Chama-se com:AH = 04hDL = código ASCII do caracter.
– Exemplo.: mov ah,04
mov dl,´*´ int 21h
35
Interrupção - INT 21h
• Envia caracter para a impressora.
– Chama-se com:AH = 05hDL = código ASCII do caracter.
– Exemplo.: mov ah,05mov dl,´*´int 21h
36
Interrupção - INT 21h
• Leitura do teclado sem eco (sem filtro).– Chama-se com:
AH = 07h.Se um caractere ASCII foi digitado .
– Recebe-se em:AL = código ASCII.Se um caracter não foi digitado, aguarda.Não é sensível a control-c e control-break
– Exemplo.: char db ? .....mov ah,7int 21hmov char,al
37
Interrupção - INT 21h
• Leitura do teclado sem eco.– Chama-se com:
AH = 08h.Se um caractere ASCII foi digitado .
– Recebe-se em:AL = código ASCII.
Se um caracter não foi digitado, aguarda. Sensível a control-c e control-break
– Exemplo.: char db ?
.... mov ah,8 int 21h
mov char,al
38
Interrupção - INT 21h
• Leitura do teclado com armazenamento no buffer.
– Chama-se com: AH = 0Ah DS:DX = apontam para o endereço
do início do buffer.
– Formato do buffer:
Byte Conteúdo 0 Máximo número de carateres a
serem lidos. 1 Número de caracteres que de
fato foram lidos. 2+ Cadeia de caracteres lida.
– Ex.:buff db 81
db 0db 81
dup(0)
mov ah,0ahmov dx,seg buffmov ds,dxlea dx,buffint 21h
39
Interrupção - INT 21h
• Mostra cadeia de caracter na tela.
– Chama-se com:AH = 09h.DS:DX = apontam para o endereço do início da cadeia de
caracter.A cadeia dever ser finalizada com ´$´.
– Exemplo.: mens db ´Bom Dia´,´$´
.... lea dx, mens mov ah,9
int 21h
40
Interrupção - INT 21h
• Lê a data do sistema.
– Chama-se com:AH = 2Ah.
– Recebe-se em:CX = Ano.DH = Mês (1-12).DL = Dia ( 1-31).AL = Dia da semana (0= dom, …7=sab).
41
Interrupção - INT 21h
• Atualiza a data do sistema.– Chama-se com:
AH = 2Bh.CX = ano.DH = Mês (1-12).DL = Dia ( 1-31).
– Recebe-se em:AL = 0, se definido com sucesso.AL = FFh, caso contrário.
42
Interrupção - INT 21h
• Lê o tempo do sistema.– Chama-se com:
AH = 2Ch.
– Recebe-se em:CH = Hora (0 – 23).CL = Minutos (0-59).DH = Segundos ( 0-59).DL = Milisegundos (0 – 99).
43
Interrupção - INT 21h
• Atualiza o tempo do sistema.
– Chama-se com:AH = 2Dh.CH = Hora (0 – 23).CL = Minutos (0-59).DH = Segundos ( 0-59).DL = Milisegundos (0 – 99).
– Recebe-se em:AL = 0, se definido com sucessoAL = FFh, caso contrário.
44
Interrupção - INT 21h
• Finalização do programa.
– Chama-se com: AH = 4Ch.
– Exemplo.: mov ax,4c00h
int 21h ; Finalização do programa.
45
Interrupção - INT 21h
• Cria um arquivo.– Chama-se com:
AH = 3Ch CX = atributo.
Bit Significado0 somente
leitura1 invisível2 sistema
…DS:DX apontam para o endereço que contem o caminho (string terminada por 0) e o nome do arquivo a ser criado.
– Retorno:CF = 0 e AX = Manipulador, se
sucesso.CF = 1 e AX = Código de erro,
caso contrário.
• EX.: fname db ´C:\MYDIR\MYFILE.DAT´,0 fhandle dw ?
mov ah,3chxor cx,cx; atributo normalmov dx,seg fnamemov ds,dxlea dx,fnameint 21hjc erromov fhandle,ax
46
Interrupção - INT 21h
• Abrir arquivo– Chama-se com: AH = 3Dh AL = modo de acesso 0 – leitura 1 – escrita 2 – leitura e escrita … DS:DX apontam para o endereço
que contem o caminho (string terminada por 0) e o nome do arquivo a ser criado.
– Retorno: CF = 0 e AX = manipulador, se
sucesso.
CF = 1 e AX = código de erro, caso contrário.
• EX.: fname db ´C:\MYDIR\MYFILE.DAT´,0 fhandle dw ?
mov ah,3dh mov al,2; leitura e escrita mov dx,seg fname mov ds,dx lea dx,fname int 21h jc erro mov fhandle,ax
47
Interrupção - INT 21h
• Fechar arquivo– Chama-se com:AH = 3Eh.BX = manipulador.
– RetornoCF = 0, se sucesso.CF = 1, caso contrário.
• EX.:fhandle dw ?
mov ah,3Ehmov bx,fhandle int 21hjc erro
48
Interrupção - INT 21h
• Ler arquivo – Chama-se com:AH = 3Fh.BX = manipulador.CX = número de bytes a ser lido.DS:DX = endereço inicial do buffer.
– Retorno:
CF = 0, se sucesso. AX = bytes lidos.
CF = 1, caso contrário. AX = código de erro.
• Exemplo.:fhandle dw ?buff db 1024 dup(?)
mov ah,3Fhmov dx, seg buffmov ds,dxlea dx,buffmov bx,fhandlemov cx,1024int 21hjc erro
cmp ax,cx jl done
49
Interrupção - INT 21h
• Escrever em arquivo– Chama-se com:
AH = 40h.
BX = manipulador.
CX = número de bytes a ser escrito.
DS:DX = endereço inicial do buffer.
– Retorno:
CF = 0, se sucesso. AX = bytes escritos.
CF = 1, caso contrário. AX = código de erro.
• EX.:fhandle dw ?buff db 1024 dup(1)
mov ah,40hmov dx, seg buffmov ds,dxlea dx,buffmov bx,fhandlemov cx,1024int 21hjc erro
cmp ax,cx jl done 50
Interrupção - INT 21h
• Apaga arquivo– Chama-se com:
AH = 41hDS:DX apontam para o endereço que contem o caminho (string
terminada por 0) e o nome do arquivo a ser apagado.
– Retorno:CF = 0 , se sucesso.CF = 1 e AX = código
de erro, caso contrário.
• EX.:fname db ´C:\MYDIR\MYFILE.DAT´,0
mov ah,41hmov dx,seg fnamemov ds,dxlea dx,fnameint 21hjc erro
51
Interrupção - INT 21h
• Posicionar Ponteiro de Arquivo
– Chama-se com:AH = 42h
BX = manipulador. AL = método de posicionamento. CX:DX = deslocamento.
– Retorno: CF = 0, se sucesso. DX:AX = nova
posição. CF = 1, caso contrário. AX = código de
erro.
– Método 0 - (absoluto) Começo do arquivo.
1 - Relativo a posição atual. 2 - (absoluto) Fim do arquivo.
• EX.:fhandle dw ?
mov ah,42h mov al,2h
mov bx,fhandlemov cx,0Mov dx,1024int 21hjc erro
52