• Document: Aula Prática 1 Introdução à programação Assembly no DOS usando TASM Bruno Silva lauro Moura
  • Size: 1.46 MB
  • Uploaded: 2019-07-21 08:23:16
  • Status: Successfully converted


Some snippets from your converted document:

Interface Hardware Software Aula Prática 1 Introdução à programação Assembly no DOS usando TASM Bruno Silva bs@cin.ufpe.br lauro Moura lauromoura@gmail.com Conteúdo ● Visão geral do processo ● TASM / TLINK ● HELPPC ● Estrutura do Programa ● Teclado: Interrupção 16h ● Vídeo: Interrupção 10h ● Exercícios ● Referências Criando programas ● Compilação – Geração do código em linguagem de montagem. ● Montagem – Geração do código objeto. ● Ligação – Geração do executável a partir do objeto. Criando programas Foco na montagem e ligação Criando programas ● São necessárias 3 ferramentas: – Editor (óbvio...) – Montador – Linker(ligador) ● Exemplos – Editor -> edit, notepad, context – Montador -> nasm, tasm – Linker -> tlink TASM (Turbo assembler) ● Montador da Borland(age em conjunto com o linker TLINK também da Borland) ● Traduz programas *.asm para *.obj ● Enquanto o linker traduz programas *.obj para *.exe ou *.com dependendo de forma de montar e ligar Sua Excelência, HELPPC! Estrutura do programa no modo real (16-bits) .model small .data myvar db “gbooo$” .code main mov ax, @data mov ds, ax mov dx, offset myvar mov ah, 09h int 21h mov ax, 4c00h int 21h end main Modelos... Modelos... (não da Victoria's Secret, por enquanto...) Modelos...de memória! ● Sintaxe: .MODEL <model> ● <model> define o modelo da memória alocada que pode ser: – SMALL – COMPACT – MEDIUM – LARGE – HUGE Dados, dados, dados... ● Diretiva .DATA ● Aréa do programa que guarda as variáveis que serão utilizadas ● ex: .MODEL SMALL .Data array DB 12,45,88,A2,B5 Pilhas (não-alcalinas) ● Diretiva: .STACK ● Reserva espaço de memória para as Instruções de pilha ● Sintaxe .STACK [size] se nada for definido o default é 1K ● ex: .MODEL SMALL .DATA .STACK The brain ● Diretiva .CODE ● Inicia o segmento de código ● Sintaxe .CODE [name] – Podem existir vários segmentos de código no seu programa é aconselhável que haja apenas um (KISS). Modelo de um programa Assembly .MODEL small .DATA .STACK .CODE inicio: ;define o entry point ... ... END inicio Run it, baby, run it!!! ● Vá para o diretório corrente para onde está o seu programa fonte e execute ->tasm NomeDoPrograma[.asm] ● em seguida ->tlink NomeDoPrograma[.obj] ● se não der problema, o código .exe ja está disponível Dividir para conquistar (KISS!!!!) ● Procedimentos! <nome> proc ... <nome> endp ● Argumentos passados pela pilha ou pelos registradores. The Keyboard Interrupção 16h ● BIOS ● Leitura de valores ● Tecla disponível ● Teclas de status Int 16h / Ah = 00h ● Lê uma tecla do teclado. ● Trava até uma tecla estar disponível. – ● Sem eco... ● Retorno: – ah: Scan code – al: ASCII code Scan codes?!?!?! ● Códigos individuais das teclas. ● PageDown, Setas, Alt possuem scan codes? ● Representação interna. Int 16h / Ah = 01h ● Vê se uma tecla está disponível. ● Solução para o deadlock da interrupção anterior ● Tecla disponível? Zero flag! ● Retorno (se tiver alguma tecla): – Idêntico à função anterior. ● Não limpa o buffer... Int 16h / Ah = 02h ● Teclas de Status (Insert, Scroll, Caps, etc...) “Due to a bug in the BIOS code, these bits only reflect the current status of these keys, they do not necessarily reflect the status of these keys when the next key to be read from the system type ahead buffer was depressed. In order to ensure that these status bits correspond to the state of these keys when a scan code is read from the type ahead buffer, you've got to flush the buffer, wait until a key is pressed, and then immediately check the keyboard status.” [AOA Chapter 13.3] Exemplo: Ler String ● String = Seqüência de caracteres ASCII. ● Lê uma String terminada por '$'. ● arquivo str.asm ● procedimento getString ● Argumentos / Retorno: – DS:DX = Buffer de armazenamento – Retorna nada Vídeo(Modos de Operação) ● Existem 21 modos de vídeo(dependendo da placa de vídeo) que se classificam em: – Modo Texto – Modo Gráfico Vídeo(Coordenadas) ● O monitor pode ser considerado como um plano cartesiano com coodenadas da seguinte forma: – (0, 0) canto esquerdo superior do vídeo – (0, y_máx)esquerdo inferior do vídeo – (x_

Recently converted files (publicly available):