Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .stack 256
- .data
- DADOS EQU 0300H
- ACK EQU 0301H
- STB EQU 0302H
- CONTROLE EQU 0303H
- VAR db ?
- fnome db 'C:\keyboard.txt',0
- fhandle dw ?
- CTRL_LER_BUFFER db 00001010b
- CTRL_ESC_ACK db 00001101b
- .code
- criar_abrir_arquivo proc near
- mov dx, offset fnome
- mov al,0
- mov ah, 3ch
- int 21h ;criar arquivo
- mov fhandle, ax
- mov dx, offset fnome
- mov al,2
- mov ah, 3dh
- int 21h; abrir arquivo
- mov fhandle, ax
- ret
- criar_abrir_arquivo endp
- fechar_arquivo proc near
- mov ah, 3eh
- mov bx, fhandle
- int 21h
- ret
- fechar_arquivo endp
- ler_buffer proc near
- pega_dados:
- mov dx, STB
- in al, dx ; verifica se há dados no buffer, ou seja, se o STB está setado
- mov ah, 0 ; pra comparar com o al
- cmp ah, al ;se nao houver dados, cmp vai ser 1
- je pega_dados ;fica nesse laco ate STB ser ativado
- ;ESCREVE NO ACK
- mov dx, CONTROLE
- mov al, CTRL_ESC_ACK
- out dx, al ;ativa escrita no ack
- mov al, 1
- mov dx, ACK
- out dx, al ; seta o ACK
- ;LER DADOS:
- mov dx, CONTROLE
- mov al, CTRL_LER_BUFFER
- out dx, al ; envia os sinais correspondentes para ler o dado do buffer
- mov dx, DADOS
- in al, dx ; recebe o byte em al
- mov [VAR], al ; poe o byte na variavel
- ;RESETAR ACK
- mov dx, ACK
- mov al,0
- out dx, al
- ret
- ler_buffer endp
- imprime_tela proc near
- mov dl, [VAR]
- mov ah, 02h
- int 21h
- ret
- ret
- imprime_tela endp
- escreve_arquivo proc near
- mov bx, fhandle
- mov cx, 1
- mov dx, offset VAR
- mov ah, 40h
- int 21h
- ret
- escreve_arquivo endp
- main:
- mov ax, @data
- mov ds, ax
- call criar_abrir_arquivo
- laco:
- call ler_buffer
- call imprime_tela
- call escreve_arquivo
- jmp laco
- call fechar_arquivo
- mov ah, 4ch
- int 21h
- end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement