Você está na página 1de 42

APOSTILA DE ASSEMBLY

(2 PARTE)
INF 1091 TPD PUC-RIO
PROFESSOR: RODRIGO TOLEDO
email: rtoledo@openlink.com.br

-1-

NDICE

Vdeo, Modo Texto


MDA, CGA, Tabela de Modos de Vdeo, Set/Get Video Mode, Stosb, Stosw e Rep.

03

Vdeo, Modo Grfico


Modo 13h da VGA, Paleta de cor (e suas interrupes), Passagem de parmetro por pilha e Multiplicao usando Shl e Add.

09 14 16 19 23 25 29 33

PSP (Program Segment Prefix)


Estrutura do PSP, PTR e Movsb

Interrupes
O esquema de tratamento de interrupes, System Timer, L contador de Timer Ticks

Programas Residentes (Clock)


Dword, Pushf, Popf, Iret, Org, Programas .com, Get/Set Interrupt Vector, Terminate and Stay Resident

Endereos Especiais (Numoff e Boot)


At, Terminate Program, Shift Status (0000:0417h), Endereo (F000:FFF0)

Acesso a Arquivos
Open a File, Close a File, Read From File, Move File Pointer.

Mouse
"Reset Mouse", "Show/Hide Mouse Cursor", "Poll Mouse Status", "Set Cursor Position", "Set Mouse X/Y Limit", "Set Mouse Cursor"

ndice Alfabtico

-2-

VDEO, MODO TEXTO


A Placa de Vdeo MDA (Monochrome Display Adapter)
Capaz de gerar apenas vdeo alfanumrico monocromtico. Possui um nico modo de operao 25 x 80 (Modo 07h). A tela armazenada em memria na prpria placa no endereo 0B000h. Cada posio da tela corresponde a 2 bytes na memria de vdeo. O primeiro (posio par) determina o caracter a ser apresentado. O segundo (posio mpar) contm o atributo do caracter:

Atributo:
bit 7 = 1 piscante bit 3 = 1 intenso bits 6 5 4 1 1 1 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 1 1 1 0 0 1 0 0 0 Reverso Normal Sublinhado Invisvel

quaisquer outros Normal

Posio na memria: O caracter na linha L (0 a 24) e coluna C (0 a 79 ou 0 a 49) fica armazenado no endereo: 0B000h + (160 * L) + (2 * C)

-3-

A Placa de Vdeo CGA (Color Graphics Adapter)


Capaz de gerar vdeo alfanumrico e grfico. Em todos os modos a tela armazenada no endereo inicial 0B800h em uma memria de 16Kbytes contida na prpria placa. Suporta 8 pginas independentes de vdeo no modo 40 colunas, e 4 pginas no modo 80 colunas (modos alfanumricos). O armazenamento da tela no modo alfanumrico semelhante ao da MDA (1 byte para o caracter e 2 byte para o atributo), mudando apenas a codificao do atributo:

Atributo: Bits 7 6,5,4 3 2,1,0 Descrio Este bit pode ser programado como atributo piscante (default), ou como intensidade da cor de fundo. Selecionam a cor de fundo do caracter, correspondendo respectivamente s cores RGB (Red Green and Blue). Intensidade da cor de frente (1 = Intenso). Selecionam a cor de frente, correspondendo respectivamente s cores RGB.

Posio na memria: O caracter correspondente linha L (0 a 24), coluna C (0 a 79) da pgina P (0 a 3 ou 0 a 7) armazenado no endereo: 0B800h + (01000h * P) + (160 * L) + (2 * C) ; Modo 80 Colunas 0B800h + (00800h * P) + (80 * L) + (2 * C) ; Modo 40 Colunas

INT 10h, 00h (Set Video Mode)


Define o modo de vdeo. Entrada: Retorna: Ah = 00h Al = Video Mode Nada

-4-

Tabela de Modos de Vdeo:


Modo 00h 01h 02h 03h 04h 05h 06h 07h 0Dh 0Eh 0Fh 10h 12h 13h Tipo Texto Texto Texto Texto Grfico Grfico Grfico Texto Grfico Grfico Grfico Grfico Grfico Grfico Resoluo 40 x 25 40 x 25 80 x 25 80 x 25 320 x 200 320 x 200 640 x 200 80 x 25 320 x 200 640 x 200 640 x 350 640 x 350 640 x 480 320 x 200 Adaptador Todos* Todos* Todos* Todos* Todos* Todos* Todos* MDA EGA EGA EGA EGA VGA VGA Colors 16 tons de cinza 16 de frente e 8 de fundo 16 tons de cinza 16 de frente e 8 de fundo 4 4 tons de cinza 2 pb (preto e branco) 16 16 pb (preto e branco) 16 16 256 (ao mesmo tempo) Address B800h B800h B800h B800h B800h B800h B800h B000h A000h A000h A000h A000h A000h A000h

Todos* = Todos exceto MDA

Observao: Quando o modo trocado, a tela limpa. Entretanto, no se deve usar este servio como um "Clear Screen", pois ele mais lento que as rotinas normais de limpeza de tela (servios 06h ou 07h).

INT 10h, 0Fh (Get Current Video Mode)


Informa o modo de vdeo, o nmero de colunas e a pgina de vdeo correntes. Entrada : AH 0Fh Retorna : AL AH BH Video mode Caracteres por linha Pgina ativa.

-5-

Detectando a Placa de Vdeo: INT 10h, 12h (Alternate Select EGA)


Retorna informaes sobre a placa EGA e permite a seleo de uma rotina alternativa de PrintScreen. Entrada: AH BL 12h Subservio 10h Pega informaes sobre a EGA 20h Seleciona Print Screen Alternativo

Retorna: (Subservio 10h): BH Mode ativo 00h Color mode 01h Monochrome mode BL EGA memory (se a placa for EGA ou superior) 00h 64K 01h 128K 02h 192K 03h 256K CH Adapter bits CL Switch setting

Exemplo: Como detectar a placa de vdeo


Mov Mov Int Cmp superior Jne Mov Int Cmp Je Mov Jmp MDA: Mov Fim: Ret ... EndVideo CGA Ah,12h Bl,10h 10h Bl,10h

; Se Bl continuar com 10 ento no EGA ou

Fim Ah,0Fh ; Pega Video Mode 10h Al,7 MDA Cga,1 ; Se Chegou Aqui, CGA Fim EndVideo, 0B000h

dw 0B800h db 0

-6-

STOSB (Store String Byte)


Sintaxe:
Copia

STOSW (Store String Word)


Sintaxe:
Copia

Stosb

Stosw

o valor em AL para o endereo apontado por ES:DI. DI ento incrementado ou decrementado em um byte (segundo DF) para apontar para o prximo endereo.

o valor em AX para o endereo apontado por ES:DI. DI ento incrementado ou decrementado em dois bytes (segundo DF) para apontar para o prximo endereo.

Lgica: (ES:DI) AL Se DF = 0 DI ++ Seno DI Flags: No so alteradas

Lgica: (ES:DI) AX Se DF = 0 DI = DI + 2 Seno DI = DI 2 Flags: No so alteradas

Observao: DI incrementado (ou decrementado) para se preparar para uma possvel repetio do comando (Stosb ou Stosw)

REP (Repeat)
Sintaxe: Rep instruo
Repete uma (nica) instruo CX vezes.

Lgica: Enquanto (CX != 0) { executa instruo CX } Exemplo: Mov CX, 5 Mov Al,R Rep STOSB Observao: REP = REPE (Repeat While Equal) = REPZ (Repeat While Zero).

-7-

FillScr.asm
Code_Seg Segment Assume Cs:Code_Seg, Ds:Data_Seg Proc Near Mov Ax, Data_Seg Mov Ds, Ax Call Detect_Video Call Fill Mov Ah,4Ch Mov Al,00 Int 21h Endp Proc Push Push Push Push Push Mov Mov Call Mov Mov Mov Sub Inc Mov Mov Sub Inc Mov Cld Mov Mov Push Mov Rep Pop Add Dec Jnz Call Pop Pop Pop Pop Pop Ret Near Ax, Bx Cx Di Es Ax,Lin1 Bx,Col1 Video_OffSet Di,Ax Es,EndVideo Ax,Lin2 Ax,Lin1 Ax Rows,Ax Ax,Col2 Ax,Col1 Ax Cols,Ax Al,Char Ah,Att Di Cx,Cols Stosw Di Di,160 Rows FillScr1 Enable_Cga Es Di Cx Bx Ax

FillScr

FillScr Fill

;-----------------------------; Entrada: Ax = Linha ; Bx = Coluna ; Saida: Ax = OffSet ;-----------------------------Video_OffSet Proc Near Push Dx Push Bx Mov Bx,160 Mul Bx Pop Bx Shl Bx,1 Add Ax,Bx Pop Dx Ret Video_OffSet EndP Code_Seg Data_Seg Lin1 Col1 Lin2 Col2 Char Att Rows Cols EndS Segment Dw 10 Dw 0 Dw 13 dw 79 db 67 db 31 dw ? dw ?

EndVideo dw 0B800h Cga db 0 Data_Seg Ends

FillScr1:

Stack_Seg db Stack_Seg End FillScr

SEGMENT STACK 10 Dup(' ') Ends

Fill Endp

-8-

VDEO, MODO GRFICO


O Modo 13h da VGA (320 x 200 x 256)
Cada pixel (picture element) equivale a 1 byte na memria de vdeo. So discriminadas 256 cores em uma tabela (paleta) entre as 262.144 cores possveis. Cada byte correspondente ao pixel contm o valor (de 0 a 255) do ndice de sua cor na paleta. Por isso s possvel ter 256 cores diferentes ao mesmo tempo na tela, apesar do total de cores disponveis ser bem maior. Cada cor na paleta tambm conhecida como registro de cor. Posio na memria: O byte correspondente ao pixel localizado na linha L (0 a 199) e coluna C (0 a 319) fica armazenado na memria de vdeo no deslocamento: (L * 320) + C

Int 10h, 1010h (Ajuste Individual dos Registros de Cor VGA)


Entrada: AH AL BX CH CL DH Nada 10h 10h Nmero do Registro de Cor a alterar Intensidade da cor verde, variando de 0 a 63 Intensidade da cor azul, variando de 0 a 63 Intensidade da cor vermelha, variando de 0 a 63

Retorna:

-9-

Int 10h, 1012h (Ajusta um bloco de registros de cor VGA)


Entrada: AH AL BX CX ES:DX 10h 12h Nmero do primeiro registro de cor a modificar Nmero de registros de cor a modificar Ponteiro para o buffer com os valores dos registros de cores. O buffer deve ter o comprimento de trs vezes a quantidade de registros a serem modificados, conforme indicado no parmetro CX (com os valores de RGB para cada cor).

Retorna:

Nada

Int 10h, 1015h (Leitura individual dos registros de cor VGA)


Entrada: AH AL BX CH CL DH 10h 15h Nmero do registro de cor a ler Intensidade da cor verde, variando de 0 a 63 Intensidade da cor azul, variando de 0 a 63 Intensidade da cor vermelha, variando de 0 a 63

Retorna:

Int 10h, 1017h (Leitura de um bloco de registros de cor VGA)


Entrada: AH AL BX CX ES:DX ES:DX 10h 17h Nmero do primeiro registro de cor a ser lido Nmero de registros de cor a serem lidos. Ponteiro para o buffer de registros O buffer conter os valores dos registros de cor.

Retorna:

Observao: O buffer tem que ter tamanho trs vezes maior que o nmero de registros de cor (cada byte receber o valor de RGB).

10

- 10 -

Passagem de Parmetro Por Pilha:

push AX

call SetVideoMode

SP
BP BP AX

SP
BP

IP
AX

push BP

SP add BP, 2 SP SP
BP

mov BP, SP

BP IP
AX

BP

BP IP
AX

SP
BP

BP IP
AX

A partir de agora o valor passado como parmetro pode ser acessado como [BP+2], independente do uso ou no da pilha. Caso houvesse mais de um parmetro, eles seriam acessados como [BP+2], [BP+4], [BP+6] etc...

push AX SP AX BP
BP

pop AX

SP
BP

BP IP
AX

IP
AX

Ret 2

pop BP

SP
BP BP

IP
AX

Os prximos dois passos so o retorno correto de uma funo que recebeu os parmetros na pilha. O Ret 2X garante que sero retirados os X parmetros que se encontravam na pilha. (Ret 2 SP = SP+2)

SP

11

- 11 -

Multiplicao por 320 usando Shl e Add:

320 160 80 40 20 10 5 1

2 2 2 2 2 2 5

320 = 26 * 5 = 26 * (4 + 1) 320 = 4 * 26 + 26 = 28 + 26

320 A = B = ? =

* x A B

x * * +

= ? 26 22 A

Mov Shl Mov Shl Add

Di, Di, Ax, Di, Di,

x 6 Di 2 Ax

;Di ;Di ;Ax ;Di ;Di

= = = = =

x x * 26 x * 26 x * 28 x * 320

12

- 12 -

Graf.asm
Code_Seg Segment Assume CS:Code_Seg, DS:Data_Seg Graf Proc Near Mov Ax, Data_Seg Mov DS, Ax Mov Ax, 13h Push Ax Call SetVideoMode Call Tela Call Wait_Key Mov Ax, 0003h Push Ax Call SetVideoMode Mov Ah, 4Ch Int 21h Graf EndP PutPixel Proc Push Mov Add Push Push Mov Shl Mov Shl Add Add Mov Mov Stosb Pop Pop Pop Ret Endp Near Bp Bp, Sp Bp, 2 Ax Di Di, [Bp+6] ;lin Di, 6 Ax, Di Di, 2 Di, Ax Di, [Bp+4] ;col Ax, [Bp+2] ;cor Es, EndSeg Di Ax Bp 6

PutPixel

SetVideoMode Push Mov Add Push Mov Mov Int Pop Pop Ret SetVideoMode

Proc Near Bp Bp, Sp Bp, 2 Ax Ax, [Bp+2] Ah, 00 10h Ax Bp 2 Endp

13

- 13 -

Line Proc Near ;Traa linha (X1,Y1,X2,Y2,Cor) Line EndP Tela Proc Push Mov Mov Mov Mov Mov Mov Call Inc Inc Inc Loop Fim_Tela: Pop Ret Endp Proc Near Push Ax Cx Stack_Seg db Stack_Seg End Graf Near Cx X1, 0 Y1, 0 X2, 319 Y2, 0 Cor,0 Cx, 200 Line Y1 Y2 Cor Loop_Tela Wait_Key Code_Seg

Mov Int Pop Ret Endp Ends

Ah, 08 21h Ax

Loop_Tela:

Data_Seg Segment EndSeg dw 0A000h ... ;variveis usadas pelo Line ... X1 dw ? X2 dw ? Y1 dw ? Y2 dw ? cor dw ? Data_Seg Ends Segment Stack 200 Dup('Pilha Ends

Tela Wait_Key

')

14

- 14 -

PSP (PROGRAM SEGMENT PREFIX)


Estrutura do PSP:
Neste segmento ficam guardadas as informaes sobre os parmetros passados na linha de comando (tamanho e string). Endereo 80h 81h Tamanho 1 127 Descrio Tamanho em bytes (caracteres) da lista de parmetros. String com a lista de parmetros.

Observaes: O espao entre o nome do programa e o incio dos parmetros na linha de comandos est includo na lista de parmetros. Ao iniciar um programa, o DS j comea apontando para PSP.

PTR
Sintaxe:
Muda

tipo PTR expresso

temporariamente o tipo da expresso (varivel ou rtulo) do seu default para tipo. Geralmente usado para acessar uma varivel de uma maneira diferente da qual ela foi definida; por exemplo, para acessar o byte de mais alta ordem de uma varivel do tipo word. Nome: Byte Word Dword Qword Tbyte Near Far Valor: 1 2 4 8 10 0FFFFh 0FFEEh Exemplo: Mov Al, byte PTR wordvar Mov Al, byte PTR wordvar[1] Call Far PTR rotina

tipo pode ser:

15

- 15 -

MOVSB (Move String Byte)


Sintaxe: Movsb Copia um byte entre dois pontos da memria. O byte de origem deve estar sendo apontado por DS:SI e o destino apontado por ES:DI. Lgica: (ES:DI) (DS:SI) Se (DF == 0) DI ++ SI ++ Seno DI SI Flags: No so alteradas Observao: Existe tambm o MOVSW, que transfere uma word e incrementa ou decrementa os indexadores de dois.

PSP.asm
Code_Seg Segment Assume Cs:Code_Seg, Ds:Data_Seg Psp Proc Mov Mov Call Call Call Mov Mov Int Endp Near Ax, Data_Seg Es, Ax Limpa Le_Texto Say Ah,4Ch Al,00 21h

Psp Le_Texto

Proc Near Push Cx,Si,Di Cld Mov Si,80h Xor Ch,Ch Mov Cl,Byte Ptr[Si] Inc Si Lea Di,String Rep MovsB Push Es Pop Ds Mov Byte Ptr[Di],'$' Pop Di,Si,Cx Ret Le_Texto Endp

16

- 16 -

Say

Say Limpa Limpa Code_Seg

Proc Push Push Mov Lea Int Pop Pop Ret EndP Proc EndP Ends

Near Ax Dx Ah,09 Dx,String 21h Dx Ax

Data_Seg Texto

Segment Label Byte Num_Param String Ends

Db 0 Db 127

Dup(' ') Data_Seg

Near

Stack_Seg db Stack_Seg End PSP

SEGMENT STACK 50 Dup('Pilha Ends

')

17

- 17 -

INTERRUPES:
O Esquema de Tratamento de Interrupes
Interrupes so mecanismos para transferir o controle (CS:IP) de uma localizao na memria para outra. Quando uma interrupo ocorre, a CPU suspende temporariamente o que ela estiver fazendo e executa uma rotina especial conhecida como rotina de servio de interrupo (ISR). Quando a ISR termina, a CPU volta execuo no ponto imediatamente aps a instruo que foi interrompida. Existem trs tipos diferentes de interrupes no PC: Interrupes de Software: usadas pelos programas para invocar rotinas na BIOS e no ncleo do DOS; Interrupes de Hardware: usadas pelos dispositivos de hardware para avisar a CPU de que eles precisam de ateno; e Excees: usadas pela prpria CPU para indicar erros. Quando ocorre uma interrupo, uma seqncia de eventos executada para garantir que a CPU responda interrupo e, mais tarde, retorne execuo como se nada tivesse acontecido. Esta seqncia de eventos a seguinte: 1) O registrador de flags empilhado. 2) Os contedos de CS e IP so colocados na pilha, preservando o endereo no qual a interrupo ocorreu. 3) A flag de interrupo (IF) no registrador de flags limpa, para evitar novas interrupes. O flag de Trap (TF) tambm limpo neste momento. 4) O endereo de 32 bits da ISR obtido da tabela de interrupes localizada no incio da memria, e a execuo ento transferida para este endereo. 5) A ISR executa o processamento necessrio para servir a requisio da interrupo. 6) Quando o manipulador da interrupo executa uma instruo IRET (Interruption Return), os contedos de CS, IP e flags so recuperados da pilha e a execuo retorna de onde parou. obrigao da ISR salvar o estado do sistema no momento em que a interrupo ocorreu e restaur-lo antes que ela termine, de modo que o programa que foi interrompido no seja afetado. Geralmente, a ISR comea salvando na pilha quaisquer registradores que ela possa modificar e termina desempilhando estes registradores. Toda interrupo tem um nmero associado, variando de 0 a 255. Quando uma interrupo ocorre, este nmero serve como um ndice para a tabela conhecida como Vetor de Interrupes, armazenada na memria baixa. Esta tabela contm os endereos de at 256 ISR diferentes. A interrupo 05h, por exemplo, resulta na execuo da ISR cujo endereo o sexto no Vetor (interrupo 0 o primeiro). A tabela est sempre armazenada nos primeirssimos bytes da memria (0000:0000). Uma interrupo de software gerada quando um programa executa uma instruo INT. 18 - 18 -

Existem dois tipos de interrupes de hardware: Mascarveis e No mascarveis. As interrupes no mascarveis so assim chamadas porque so executadas mesmo que o flag de interrupo esteja desativado. As interrupes mascarveis, por sua vez, so desativadas quando o flag estiver zerado. Um dispositivo gera uma interrupo no mascarvel ativando o pino NMI (Non-Maskarable Interrupt) na CPU. Uma Int 02h (Non-Maskable Interrupt) gerada se uma condio no mascarvel, como um erro de paridade na memria, ocorrer. Esta a nica interrupo que no pode ser mascarada pela instruo CLI (Clear Interrupts). As interrupes mascarveis ocorrem quando um dispositivo (como o teclado, o Clock ou a porta serial) ativa uma linha de interrupo. Tipicamente, estes dispositivos no esto conectados diretamente na CPU, mas sim ao controlador de interrupes, cujo trabalho acumular as requisies de interrupo dos dispositivos de hardware, prioriz-las e pass-las para a CPU uma por vez. A sada do controlador de interrupes (geralmente um Intel 8259) conectada a uma linha de interrupo da CPU. Um exemplo clssico de interrupo de hardware o que acontece quando uma tecla pressionada no teclado. Atravs do controlador de interrupes, uma interrupo 09h gerada, o que executa uma ISR do ROM BIOS. A ISR l o cdigo de varredura da porta do teclado, converte este cdigo em seu equivalente ASCII e o coloca no Buffer do teclado. O ltimo tipo de interrupo, a Exceo, gerada pela CPU quando esta detecta uma condio de erro durante ou aps a execuo de uma instruo. Por exemplo, se um programa tenta dividir por zero, a CPU executa uma interrupo 0.

INT 08h (System Timer)


Esta uma interrupo de hardware (IRQ 0) ativada pelo Timer do Sistema 18.2 vezes por segundo (a cada 55ms). A rotina padro faz o seguinte: 1) Incrementa o contador do nmero de "Timer Ticks" (desde meia-noite) na localizao de memria 0000:046Ch (Long Integer 4 bytes). Aps 24 horas de operao, uma flag acionada na localizao de memria 0000:0470h para sinalizar esta condio e o contador do timer (0000:046Ch) zerado. 2) Decrementa o contador do motor do drive na localizao de memria 0000:0440h se ele no for 0. Quando o contador chega a 0, o motor do drive desligado, e o status do motor do drive na localizao de memria 0000:043Fh atualizado para indicar que o motor foi desligado. 3) Gera uma INT 1Ch (obtm informaes sobre a unidade de disco). O usurio pode instalar a sua prpria rotina, obtendo o controle a todo "Timer Tick" (55ms). A nova rotina da INT 08h dever chamar primeiro a rotina padro da Int 08h, que ir gerenciar os sinais de final de interrupo para o controlador. Aps o fim da rotina padro, o novo manipulador far sua tarefa a todo "Timer Tick".

19

- 19 -

INT 1Ah, 00h (Read System-Timer Time Counter)


L o contador de Timer Ticks, informando a hora e se 24 horas passaram desde o ltimo boot ou ltimo reset. Interrupo de software. Entrada: Retorna: Ah Cx Dx Al 00h Parte alta do contador do Clock Parte baixa do contador do Clock 0 se no passaram 24 horas ou 1.

Observaes: As seguintes frmulas convertem o contador do Clock, na hora corrente. Horas Resto Minutos Resto Segundos = = = = = Clock / 65543 (10007h) Clock % 65543 Resto / 1092 (444h) Resto % 1092 Resto / 18.21

O contador do Clock tambm pode ser lido como um valor inteiro de 4 bytes no endereo de memria 0000:046Ch. Este valor igual ao inteiro em CX:DX aps a chamada deste servio. Aps a chamada, a flag (0000:0470h) resetada independente de terem passado ou no 24 horas. O comando TIME do DOS pega a hora por meio deste servio.

Observaes:
O "System Timer" (diferentemente do relgio de tempo real, que fsico) o timer que inicializado junto com o sistema. Ele temporrio, durando somente enquanto o sistema estiver ligado. Os incrementos no Clock ocorrem em uma taxa de 18.2 vezes por segundo. Resumo da seqncia de eventos executados quando ocorre uma interrupo: Os registradores de flags, CS e IP so empilhados As flags de interrupo (IF) e de debug (TF) so zeradas. O endereo da ISR obtido no vetor de interrupes, localizado no incio da memria, e a execuo ento transferida para este endereo. A ISR executada. Ao final da ISR, CS, IP e flags so recuperados (comando IRET)

20

- 20 -

PROGRAMAS RESIDENTES (CLOCK)


DWORD
Tipo de dado com 4 bytes de tamanho. Usada para associar um tipo de dado de uma varivel como uma palavra dupla (4 bytes). Use DD para definir uma varivel do tipo Double Word.

PUSHF
Sintaxe: PUSHF Salva o registrador colocando-o na pilha. Lgica: SP = SP 2 (SP) = reg_flags Flags: No so alteradas de flags,

POPF
Sintaxe: POPF Restaura o registrador de flags, retirando-o da pilha. Lgica: reg_flags = (SP) SP = SP + 2 Flags: O D I T S Z A P C * * * * * * * * *

IRET
Sintaxe: IRET Retorna da chamada de interrupo. Lgica: Pop Reg-Flags Pop IP Pop CS Flags: O D I T S Z A P C * * * * * * * * *

ORG
Sintaxe: ORG tam Pseudo-instruo que cria um espao de tamanho tam no executvel.

Observaes sobre programas .com :


Para gerar um programa .com deve-se usar a opo /t do tlink. No podem ter mais que 64k. No permitem um segmento de pilha, sendo necessrio criar um espao para ela.

21

- 21 -

INT 21h, 35h (Get Interrupt Vector)


Pega o endereo da rotina de manipulao de uma determinada interrupo. Entrada: Retorna: Ah = 35h Al = Nmero da interrupo Es:Bx = Ponteiro para a rotina de manipulao da interrupo

INT 21h, 25h (Set Interrupt Vector)


Troca a rotina de manipulao de uma interrupo. Entrada: Ah = 25h Al = Nmero da interrupo Ds:Dx = Endereo da nova rotina de manipulao da interrupo

INT 27h (Terminate and Stay Resident)


Termina a execuo de um programa deixando uma parte residente na memria. Usado para programas .com Entrada: Cs = Segmento Dx = Endereo a partir do qual ser liberado para o sistema operacional. Observaes: O trecho residente se limita a 64k. Para deixar residentes programas .exe use int 21h, 31h.

Observaes:
O programa Clock deve ser gerado com extenso .com. Diviso em duas etapas. Exemplo: 100.000 / 65.500 = 1 e resto = 34.500 34.500 / 1.100 = 31 e resto = 400 100.000 / 100 = 1.000 1.000 / 655 = 1 e resto = 345 345 / 11 = 31 e resto = 4 4 x 100 = 400 Diviso em uma etapa.

Diviso por 100 e 655 separadamente.

22

- 22 -

Clock.asm
Code_Seg Segment Assume Cs:Code_Seg Org 100h Inicio: Jmp Inicializa

Inicializa: Assume Ds:Code_Seg Mov Ah,00h Int 1Ah Mov Ax,Dx Mov Dx,Cx Mov Bx,100 Div Bx Xor Mov Div Mov Mov Xor Mov Div Mov Mov Mov Mul Mov Div Xor Mov Mov Mov Int Mov Mov Mov Mov Lea Int Lea Int Code_Seg End Inicio Dx,Dx Bx,655 Bx Hora,Ax Ax,Dx Dx,Dx Bx,11 Bx Minutos,Ax Ax,Dx Bl,100 Bl Bl,18 Bl Ah,Ah Segundos,Ax Ah,35h Al,08h 21h Old_Int,Bx Old_Int[2],Es Ah,25h Al,08h Dx,New_Int 21h Dx,Inicializa 27h Ends

OldInt8 Old_Int Hora Minutos Segundos Num Contador Ender

Label DWord Dw 2 Dup(?) Dw Dw Dw Dw Db Dw ? ? ? ? 18 144

New_Int ... New_Int

Proc Endp

Near

Imp_Decimal Proc ... Imp_Decimal Endp Imp_Digito ... Imp_Digito Imp_Car ... Imp_Car Proc Endp Proc Endp

Near

Near

Near

23

- 23 -

New_Int

Proc Near Push Ax,Bx,Cx,Dx Push Si,Di,Es,Ds,Bp PushF Call OldInt8 Cli Sub Sp,2 Cmp Contador,18 Jb Fim_Int8 Mov Contador,0 Mov Ax,Hora Mov Num,Ax Call Imp_Decimal Mov Call Mov Mov Call Mov Call Mov Mov Call Al,':' Imp_Car Ax, Minutos Num,Ax Imp_Decimal Al,':' Imp_Car Ax, Segundos Num,Ax Imp_Decimal

iRet New_Int Endp

Inc Segundos Cmp Segundos,60 Jb Fim_Int8 Mov Segundos,0 Inc Minutos Cmp Minutos,60 Jb Fim_Int8 Mov Minutos,0 Inc Hora Cmp Hora,24 Jb Fim_Int8 Mov Hora,0 Fim_Int8: Inc Contador PopF Pop Bp,Ds,Es,Di,Si Pop Dx,Cx,Bx,Ax Mov Ender,144 Sti

24

- 24 -

Imp_Decimal Proc Near Push Ax,Bx,Cx,Dx Mov Ax,Num Mov Bx,10 Xor Cx,Cx Nao_Zero: Xor Dx,Dx Div Bx Push Dx Inc Cx Or Ax,Ax Jne Nao_Zero Cmp Cx,1 Ja Imp_Dig_Loop Push Ax Mov Al,'0' Call Imp_Car Pop Ax Imp_Dig_Loop: Pop Dx Call Imp_Digito Loop Imp_Dig_Loop Fim_Decimal: Pop Dx,Cx,Bx,Ax Ret Imp_Decimal Endp

Imp_Digito Proc Near Push Ax,Dx Mov Ax,Dx Cmp Al,10 Jae Letra_Hexa Add Al,'0' Jmp Short Imp_Dig Letra_Hexa: Add Al,'A'-10 Imp_Dig: Call Imp_Car Pop Dx,Ax Ret Imp_Digito Endp Imp_Car Proc Near Push Di, Es Cld Mov Ah,1Fh Mov Di,0B800h Mov Es,Di Mov Di,Ender Stosw Add Ender,2 Pop Es, Di Ret Imp_Car Endp

25

- 25 -

ENDEREOS ESPECIAIS (NUMOFF E BOOT)


AT (Segment At)
Sintaxe: nome_seg Segment At Ender
Especifica um endereo Todas as labels

de incio para um segmento.

e endereos no segmento so relativos ao Ender especificado.

Observaes: O parmetro Ender o endereo de incio do pargrafo para o segmento. Ele pode ser qualquer expresso vlida, mas no deve conter referncias futuras. Esta clusula geralmente usada como uma ponte para dados ou cdigos que esto em uma localizao absoluta na memria, como a rea de dados do ROM BIOS, o vetor de interrupes ou a memria de vdeo. Em conjunto com ORG podemos fazer referncias a posies na memria com segmento + deslocamento.

INT 20h (Terminate Program)


Termina a execuo de um programa. Usado para programas .com Entrada: Cs = Ponteiro para PSP Observao: Para programas .exe use int 21h, 4Ch.

Shift Status (0000:0417h) e Extended Shift Status (0000:0418h)


Variveis do sistema que se mantm atualizadas com o teclado. Alteraes nestas variveis alteram o estado do teclado. Localizadas nos endereos 0000:0417h e 0000:0418h. Ambas de tamanho 1 byte.

Shift Status: B Funo i t Insert Ligado 7 Caps Lock Ligado 6 Num Lock Ligado 5 Scroll Lock Ligado 4 Tecla Alt pressionada 3 Tecla Ctrl pressionada 2 Shift Esquerdo pressionado 1 Shift Direito pressionado 0 26 - 26 -

Extended Shift Status: B Funo i t Tecla Insert pressionada 7 Tecla Caps Lock pressionada 6

5 4 3 2 1 0

Tecla Num Lock pressionada Tecla Scroll Lock pressionada Pause ligado Tecla SysReq pressionada Alt esquerdo pressionado Ctrl direito pressionado

27

- 27 -

O Endereo F000:FFF0
Este endereo contm uma instruo FAR JUMP para o incio do Power-on Self Test (POST). A razo pela qual este endereo usado para este propsito que, quando a famlia de micro-processadores 8086 recebe energia, o registrador CS setado para FFFFh e o registrador IP para 0, que exatamente o mesmo endereo que F000:FFF0h. Se voc deseja rebootar o sistema (quente ou frio), execute um FAR JUMP para este endereo. Isto forar o POST a tomar o controle, o que ir causar um boot na mquina. O POST olha a Word no endereo 0:0472h para determinar se um boot quente ou frio deve ser executado. Se o valor em 0:472h for 1234h, ento um boot quente executado, seno um boot frio ser executado.

Numoff.asm
Shift_Area SEGMENT AT 0000h ORG 0417h Shift_Status Db ? Shift_Area ENDS Code_Seg Segment Assume CS:Code_Seg, Ds:Shift_Area Org 100h INICIO: Mov Ax, Shift_Area Mov Ds, Ax And Shift_Status, 0DFh Int 20h Code_Seg ENDS END INICIO

Boot.asm
BOOT_AREA TESTE TESTE BOOT_AREA SEGMENT AT 0F000h ORG 0FFF0h PROC FAR ENDP ENDS

CODE_SEG SEGMENT ASSUME CS:CODE_SEG ORG 100h INICIO: CALL TESTE CODE_SEG ENDS END INICIO

28

- 28 -

ACESSO

ARQUIVOS:

INT 21h, 3Dh (Open a File)


Abre um arquivo especificando o modo.

Entrada: Ah 3Dh Al Modo de abertura Ds:Dx Ponteiro para o nome do arquivo (string terminada por zero) Retorna: AX File handle ou cdigo do erro se houver erro CF 1 se houver erro, seno 0 Cdigos de erro: 1 Function number invalid 2 File not found 3 Path not found 4 No handle available 5 Access denied 12 Open mode invalid Modos de abertura: Bit 7 Flag de hierarquia Bits 4 5 6 Modo de compartilhamento Bit 3 Reservado (sempre 0) Bits 0 1 2 Modo de acesso Observao: Inicia o File Pointer com zero. Modos de acesso: Bits 2 1 0: 0 0 0 Read-only 0 0 1 Write-only 0 1 0 Read/write

INT 21h, 3Eh (Close a File Handle)


Fecha o handle de um arquivo.

Entrada: Ah 3Eh Bx File handle Retorna: Ax cdigo do erro se houver erro CF 1 se houver erro, seno 0 Cdigos de erro: 6 Invalid handle

29

- 29 -

INT 21h, 3Fh (Read from File)


L bytes de um arquivo (ou dispositivo) para um buffer.

Entrada: Ah 3Fh Cx Nmero de bytes a serem lidos Ds:Dx Ponteiro para o buffer

Bx

File handle

Retorna: Ax Nmero de bytes efetivamente lidos ou cdigo do erro se houver erro CF 1 se houver erro, seno 0 Cdigos de erro: 5 Acesso negado 6 Invalid handle

Observaes: Os bytes so lidos a partir do File Pointer, que ao final incrementado com o total de bytes lidos. O fim de arquivo pode ser detectado se o nmero de bytes lidos for inferior ao solicitado e no tiver ocorrido nenhum erro.

INT 21h, 42h (Move File Pointer LSeek)


Move o File Pointer.

Entrada: Ah 42h Bx File handle Cx:Dx Deslocamento em bytes (inteiro de 32 bits com sinal) Al Cdigo da origem do deslocamento (mode code) Retorna: Ax Cdigo do erro se houver erro CF 1 se houver erro, seno 0 Dx:Ax Nova posio do File Pointer a partir da origem, se no houver erro. Cdigos da origem do deslocamento: 0 Incio do arquivo 1 Atual posio do File Pointer Cdigos de erro: 1 Invalid mode code 2 Fim do arquivo

Invalid handle

Observaes: Independente da origem do deslocamento, um deslocamento positivo ir aumentar a posio do File Pointer e um negativo ir diminu-lo. Este servio pode ser usado para descobrir o tamanho de um arquivo, assim como para aumentar o seu tamanho ou diminu-lo (com bytes zero). permitido mover o File Pointer para posies fora do arquivo (neste caso a leitura e a escrita iro falhar).

30

- 30 -

INT 21h, 40h (Write to File)


Escreve bytes em um arquivo (ou dispositivo).

Entrada: Ah 40h Bx File handle Cx Nmero de bytes a serem escritos Ds:Dx Ponteiro para o buffer contendo os bytes a serem escritos Retorna: Ax Nmero de bytes efetivamente escritos ou cdigo do erro se houver erro CF 1 se houver erro, seno 0 Cdigos de erro: 5 Acesso negado 6 Invalid handle

Observaes: Os bytes so escritos a partir do File Pointer, que ao final incrementado com o total de bytes escritos. Um arquivo pode ser truncado posicionando o File Pointer no ponto de fim desejado, movendo 0 para Cx e chamando este servio.

Observaes:
Para criar um novo arquivo o servio o 3Ch. Erros estendidos podem ser conseguidos atravs do servio 59h do DOS.

31

- 31 -

Video.asm
Code_Seg Segment Assume Cs:Code_Seg, DS:Data_Seg Main Proc Mov Mov Mov Mov Lea Call JC Mov Push Call Mov Mov Cld Loop_Video:Call Loop Call Call Lea Call JC Call Call Fim: Mov Push Call Mov Mov Int Main Endp Near Ax, Data_Seg Ds, Ax Ax, 0A000h Es, Ax Dx,FileName OpenFile Fim Ax, 13h Ax SetVideoMode Cx, 200 DI, 0 ShowLine Loop_Video CloseFile EsperaTecla Dx,Pallete OpenFile Fim SetPallete EsperaTecla Ax,3 Ax SetVideoMode Ah,4Ch Al,00 21h

CloseFile ShowLine

ShowLine

Endp Proc Push Push Push Mov Lea Call Lea Rep Pop Pop Pop Ret Endp

Near Cx Dx Si Cx,320 Dx,Buffer ReadFromFile Si,Buffer Movsb Si Dx Cx

;DS:DX Aponta para nome arquivo OpenFile Proc Near Push Ax Push Dx Mov Ah,3Dh Mov Al,0 Int 21h Mov Handle,Ax Pop Dx Pop Ax Ret OpenFile Endp CloseFile Proc Push Push Mov Mov Int Pop Pop Ret Near Ax Bx Ah, 3Eh Bx, Handle 21h Bx Ax

SetPallete Proc Near Push Ax, Bx, Cx, Dx, Es Mov CX,768 Lea Dx,BufPal Call ReadFromFile Mov Ah,10h Mov Al,12h Mov Bx,0 Mov Cx,256 Lea Dx,BufPal Push Ds Pop Es Int 10h Pop Es, Dx, Cx, Bx, Ax Ret SetPallete Endp ;------------------------------; CX No de Bytes a serem lidos ; DS:DX Ponteiro para o Buffer ;------------------------------ReadFromFile Proc Near Push Ax Push Bx Mov Ah,3Fh Mov Bx,Handle Int 21h Pop Bx Pop Ax Ret ReadFromFile Endp Code_Seg Ends Data_Seg FileName Pallete BufPal Handle Buffer Data_Seg Stack_Seg db Stack_Seg Segment Db 'VGA.VGA',0 db 'CORES.COR',0 db 768 dup(?) Dw ? Db 320 Dup(?) Ends Segment Stack 200 Dup(?) Ends

32

- 32 -

End Main

33

- 33 -

MOUSE:
INT 33h, 0000h (Reset Mouse)
Inicializa Mouse.

Entrada: Ax 0000h Retorna: Ax FFFFh se houver mouse disponvel, seno 0000h. Bx nmero de botes suportado pelo driver se houver mouse disponvel. Observaes: O cursor do mouse default uma seta em modo grfico ou um block em modo texto. No suficiente para o mouse aparecer. Reinicializa posio do mouse e retira as restries de movimentao.

INT 33h, Cursor)


Incrementa

1h

(Show

Mouse INT 33h, 2h (Hide Mouse Cursor)

cursor.

o contador de visibilidade do Decrementa o contador de visibilidade do cursor. Entrada: Ax 0002h Retorna: Nada

Entrada: Ax 0001h Retorna: Nada

Observaes: O cursor do mouse no aparece sempre que o contador tem um valor negativo e sempre aparece para valores maiores e igual a zero (o contador comea com -1). Ao se desenhar deve-se esconder o mouse de modo a no danificar o desenho quando o mouse se mexer.

INT 33h, 0003h (Poll Mouse Status)


Pega informaes

correntes do Mouse.

Entrada: Ax 0003h Retorna: Bx Estado dos botes (0 = solto) Bit 0: Boto esquerdo Bit 1: Boto direito Bit 2: Boto do meio Observao: Cx Dx Coordenada X atual Coordenada Y atual

14/06/99

34

As coordenadas de mouse no so as de tela, no caso de modo texto deve-se dividir o valor de ambas as coordenadas por 8, no caso de modo grfico com 320 colunas devese dividir a coordenada X por 2.

INT 33h, 0004h (Set Mouse Cursor Position)


Reposiciona o cursor do mouse,

mesmo se ele estiver invisvel. Dx Coordenada Y

Entrada: Retorna:

Ax Cx Nada

0004h Coordenada X

INT 33h, 07h (Set Mouse X Limit)


Restringe

INT 33h, 08h (Set Mouse Y Limit)

a movimentao do mouse Restringe a movimentao do mouse horizontalmente. verticalmente. Entrada: Entrada: Ax 0007h Ax 0008h Cx Coordenada X mnima. Cx Coordenada Y mnima. Dx Coordenada X mxima. Dx Coordenada Y mxima. Retorna: Nada Retorna: Nada Observao: Caso o mouse no esteja dentro da rea restrita a sua posio no alterada imediatamente, s no prximo redesenho.

INT 33h, 0009h (Set Mouse Graphics Mode Cursor)


Altera a aparncia do cursor do mouse em modo grfico.

Entrada: Ax 0009h Es:Dx Ponteiro para buffer contendo a mscara do mouse seguida do seu bitmap. Bx Coordenada X do foco do cursor. Cx Coordenada Y do foco do cursor. Retorna: Nada Observaes: O cursor um bitmap de 16 por 16 pixels, por isso tanto sua mscara como o seu bitmap tem tamanho de 32 bytes (um bit para cada pixel). A matriz de bits do bitmap define um cursor cujos pixels so brancos se o bit correspondente for 1 e preto se o bit correspondente for 0. A mscara define a transparncia dos pixels. Quando um bit na mscara 0, o pixel correspondente no cursor do mouse ser opaco, ou seja, o pixel que estiver na tela por baixo do mouse no aparecer. Quando um bit na mscara 1, o pixel correspondente no cursor do mouse ser "transparente", na verdade, o pixel que estiver na tela por baixo do mouse far um OR com o pixel do mouse (podendo aparecer com uma cor diferente da real). O novo cursor s aparece no prximo redesenho do mouse. Para efetuar a troca imediata deve-se desaparecer e reaparecer com o mouse. 14/06/99 35

Observaes:
As coordenadas de mouse no so as de tela (vide observao do Poll Mouse Status) Existem vrios outros servios de mouse como: Mouse Press Info (05h); Mouse Release Info (06h); Set Mouse Text Cursor (0Ah); Set Mouse Sensitivity (0Fh) e Set Mouse Event Handler (0Ch).

14/06/99

36

Mouse.asm
Code_Seg Segment Assume CS:Code_Seg,DS:Data_Seg Mouse Proc Near Mov Ax, Data_Seg Mov DS, Ax Mov Ax, 13h Push Ax Call SetVideoMode Call DesenhaAreaDesenho Mov cx,4 criaBotoes: Call CriaBotao Loop criaBotoes Call InicializaMouse Call ControlaBotoes Mov Ax, 0003h Push Ax Call SetVideoMode Mov Ah, 4Ch Int 21h Mouse EndP DesenhaAreaDesenho Proc Near Push Ax Mov Ax,AreaDesenho Inc Ax Mov X1,Ax Mov X2,Ax Mov Y1,0 Mov Y2,199 Mov Cor,15 Call Line Pop Ax Ret DesenhaAreaDesenho Endp InicializaMouse Proc Near Push Ax,Cx,Dx Mov Ax,0 Int 33h Mov Cx,255+319 Mov Dx,(5+53)/2 Mov Ax,4 Int 33h Call MostraMouse Pop Dx,Cx,Ax Ret InicializaMouse Endp

14/06/99

37

ControlaBotoes Proc Near Push Ax, Bx, Cx, Dx pegaDadosMouse2: Call WaitLeftButtonPress Call VerificaBotao Jnc pegaDadosMouse2 Call WaitLeftButtonRelease Cmp Ax,0 Jne botao1 Call PegaCor Jmp pegaDadosMouse2 botao1: Cmp Ax,1 Jne botao2 Call PintaComMouse Jmp pegaDadosMouse2 botao2: Cmp Ax,2 Jne botao3 Call DesenhaRetangulo Jmp pegaDadosMouse2 botao3: Cmp Ax,3 PegaCor Proc Near Push Ax,Bx,Cx,Dx,Di,Es Call DesenhaPaleta Mov Ax,07h Mov Cx,256*2 Mov Dx,319*2 Int 33h Mov Ax,08h Mov Cx,130 Mov Dx,199 Int 33h Mov Ax,4 Mov Cx,(256+319) Mov Dx,(130+199)/2 Int 33h Call WaitLeftButtonPress Call SomeMouse Mov Di,Dx Mov Ax,Cx Call VideoOffset

Jne pegaDadosMouse2 Pop Dx, Cx, Bx, Ax Ret ControlaBotoes Endp CriaBotao Proc Near ;Cria e desenha um botao nao permitindo ; que sejam criados mais de 12 botoes. CriaBotao Endp VerificaBotao Proc Near ;Recebe em Cx/Dx coluna/linha do mouse ;Retorna em CF=0 se nao esta sobre ; algum botao, senao CF=1 e Ax = botao VerificaBotao Endp WaitLeftButtonPress pegaDadosMouse: Proc Near Push Ax Mov Ax, 3 Int 33h And Bx,1 Jz pegaDadosMouse Shr Cx,1 Pop Ax Ret Endp Near Ax,Bx,Cx,Dx Ax, 3 33h Bx,1 esperaRelease Dx,Cx,Bx,Ax

WaitLeftButtonPress

WaitLeftButtonRelease Proc Push Mov esperaRelease: Int And Jnz Pop Ret WaitLeftButtonRelease Endp Xor Mov Mov Mov

Ah,Ah Es,EndSeg Al,[Es:Di] corCorrente,Ax

Call WaitLeftButtonRelease Call InicializaMouse Call ApagaPaleta Pop Es,Di,Dx,Cx,Bx,Ax Ret PegaCor Endp DesenhaPaleta Proc Near Push Cx, Bx Call SomeMouse Mov Y1,130 Mov Y2,132 Mov Bx,0 Mov Cor,0 proximaLinha: Cmp Bx,16 Jae fimPaleta Mov X1,256 Mov X2,258

14/06/99

38

Mov Cx,16 proximaCor: Call PintaRetanguloCheio Inc Cor Add X1,4 Add X2,4 Loop proximaCor Add Y1,4 Add Y2,4 Inc Bx Jmp proximaLinha fimPaleta: Call MostraMouse Pop Bx, Cx Ret DesenhaPaleta Endp

ApagaPaleta Proc Near Mov Cor,0 Mov Y1,130 Mov Y2,199 Mov X1,256 Mov X2,319 Call PintaRetanguloCheio Ret ApagaPaleta Endp MostraMouse Proc Push Mov Int Pop Ret MostraMouse Endp SomeMouse Proc Push Mov Int Pop Ret SomeMouse Endp Near Ax Ax,1 33h Ax

Near Ax Ax,2 33h Ax

PintaComMouse Proc Near Push Ax,Bx,Cx,Dx,Es,Di Mov Di,0 Call VaiParaAreaDesenho Call SomeMouse Push Ds Pop Es Mov Ax,9 Lea Dx,mask1 Mov Bx,8 Mov Cx,8 int 33h Call MostraMouse pegaDadosMouse1: Mov Ax, 3 int 33h Shr Cx,1 botaoEsq: And Bx,1 Jnz pintaPixel Or Di,0 Jz pegaDadosMouse1 Jmp fim pintaPixel: Push Dx Push Cx Or Di,0 Jnz pintaSemMouse Call SomeMouse Mov Di,1 pintaSemMouse:Push corCorrente Call PutPixel Jmp pegaDadosMouse1 fim: Call InicializaMouse Pop Di,Es,Dx,Cx,Bx,Ax Ret PintaComMouse Endp

14/06/99

39

14/06/99

40

NDICE ALFABTICO:
A
Alternate Select.........................6 AT26

B
Boot.asm..................................28

Programas .com....................21 PSP..........................................15 PSP.asm...................................16 PTR..........................................15 PUSHF.....................................21

C
CGA...........................................4 Clock.asm................................23 Close a File Handle.....29, 34, 35

R
Read System-Timer Time Counter...............................20 REP............................................7

D
DD...........................................21 DWORD..................................21

S
Set Interrupt Vector.................22 Set Video Mode.........................4 Shift Status...............................26 STOSB.......................................7 STOSW......................................7 System Timer...........................19

E
Extended Shift Status..............26

F
FillScr.asm.................................8

T
Tabela de Modos de Vdeo........5

G
Get Current Video Mode...........5 Get Interrupt Vector................22 Graf.asm..................................13

V
VGA...........................................9 Video.asm................................32

I
INT............................................... INT 08h..............................19 INT 10h, 00h........................4 INT 10h, 0Fh........................5 INT 10h, 1010h....................9 INT 10h, 1012h..................10 INT 10h, 1015h..................10 INT 10h, 1017h..................10 INT 10h, 12h........................6 INT 1Ah, 00h.....................20 INT 20h..............................26 INT 21h, 25h......................22 INT 21h, 35h......................22 INT 21h, 3Dh.........29, 34, 35 INT 21h, 3Eh..........29, 34, 35 INT 21h, 3Fh......................30 INT 21h, 40h......................31 INT 21h, 42h......................30 INT 27h..............................22 Interrupes.............................18 IRET........................................21

W
Write to File ............................31 Modo 13h..................................9 Read from File .......................30 Terminate and Stay Resident..22 Terminate Program.................26

M
MDA..........................................3 Move File Pointer....................30 MOVSB...................................16 MOVSW..................................16

N
Numoff.asm.............................28

O
Open a File..................29, 34, 35 ORG.........................................21

P
POPF........................................21 POST.......................................28

14/06/99

41

14/06/99

42

Você também pode gostar