Organização num Sistema MS-DOS 4G Extended Memory (4 Gbyte) 16M EMS Window Extended Memory (16 Mbyte) 1. Page 2. Page 3. Page 1M fastopen buffers= files= device= 896k 768k 640k System BIOS 4. Page 48k 32k 16k 0k BIOS Extension Video RAM COMMAND.COM (Transient) Application Programs DOS Data BIOS Data INT Vectors COMMAND.COM (Resident) MSDOS.SYS IO.SYS 0k 128 Interface entre Aplicações/Sistema Operativo MS-DOS /BIOS /Hardware Maior Portabilidade Aplicações (1) (2) 1) “DOS Calls” Chamadas ao Sistema Operativo (3) MS-DOS 2) “BIOS Calls” Chamadas à BIOS (Basic Input/Output System) BIOS HARDWARE Menor Portabilidade 3) Acesso Directo aos Recursos do Hardware. Programação directa dos Registos (1) - Chamadas ao Sistema " DOS Calls" (2) - " BIOS Calls" Interrupçõ es por Sof tware 129 Interface entre Aplicações/Sistema Operativo MS-DOS /BIOS /Hardware Chamada da Rotina de Resposta a Interrupção N Tabela de VECTORES de INTERRUPÇÃO 1. Coloca Registo de Flags na PILHA N.º INT 2. Coloca Flag IF e TF a zero para impedir nova Interrupção 00400h 255 003FCh … … N Instrução INT N Descrição: N*4 … … 1 00004h 0 00000h MEMÓRIA 3. Coloca na Pilha o Endereço de Retorno (Segmento + Deslocamento) 4. Invoca a Rotina de resposta a Interrupção cujo endereço (Segmento + Deslocamento) está no Índice N da Tabela de Vectores de Interrupção 130 Interface entre Aplicações/Sistema Operativo MS-DOS /BIOS /Hardware Acesso aos SERVIÇOS/FUNÇÕES do DOS Instrução INT 21h Nº do Serviço Parâmetros Parâmetros de Saída /Função Registo de Entrada Mecanismo de passagem de parâmetros AH Por REGISTOS AL = Dia da Semana 0 = Domingo 1 =Segunda Exemplos: 1. Leitura da Data do Sistema Program GetDate Var DiaSem, Mês, DiaMes :Byte; Ano :Word; Begin ASM MOV AH,2Ah {N.º da Função} INT 21h {DOS call} MOV DiaSem, AL MOV Mes, DH MOV DiaMes, DL MOV Ano, CX End; Descrição CX= Ano 2Ah DH= Mês 1 = Janeiro 2 =Fevereiro … Leitura da data do Sistema DL = Dia do Mês (1..31) Writeln( DiaMes, ’/’, Mês,’ /’, Ano); End. 131 Interface entre Aplicações/Sistema Operativo MS-DOS /BIOS /Hardware 2. Acesso aos SERVIÇOS/FUNÇÕES do DOS Leitura de um caractere do teclado; e escrita de um caractere no display Nº do Serviço /Função Parâmetros de Parâmetros de Saída Descrição Registo AH Entrada Caractere AL Leitura de um caractere digitado no teclado 07h obtido do teclado (não faz display no ecrã) DL = Caractere 02h Escrita de um caractere no display a visualizar Procedure Read_Digitos(Var S :string); near; Assembler; {Leitura de uma sequência de dígitos terminada com a tecla = <RETURN>} ASM PUSH AX PUSH DX PUSH CX PUSH ES PUSH SI LES SI, S XOR CX, CX {Contador de Dígitos} @While: MOV AH, 07h {Função DOS nº 07h} INT 21h CMP AL, 13 {<RETURN>?} JE @EndWhile CMP AL, ‘0’ JB @NAODIGITO CMP AL, ‘9’ JA @NAODIGITO INC CX INC SI MOV ES:[SI], AL MOV DL, AL MOV AH, 02h {Função DOS nº 02h} INT 21h @NAODIGITO: JMP While @EndWhile: SUB SI, CX MOV ES:[SI], CL {Armazena nº de dígitos} POP SI POP ES POP CX POP DX POP AX END; 132