Capítulo – 6
Introdução aos fundamentos da informática
Introdução
Às vezes, em alguns casos, quando você está tentando recuperar dados ou executar qualquer tarefa de solução de problemas de dados e disco (ou pode ser qualquer outra tarefa relacionada ao sistema), é muito conveniente usar o comando DEBUG DOC.
Também é possível que em alguns casos especiais você ache mais fácil realizar essa tarefa específica usando DEBUG em vez de programação. Vejamos um exemplo. A codificação de depuração a seguir será suficiente para criar um backup do DBR. Basta digitar as seguintes linhas:
DEBUGANDO BKDBR.BIN
E 100 2 0 1
R.S.H.
200
EM
EM
Aqui você pode ver que apenas digitando algumas linhas acima você pode evitar escrever um programa. Vamos dar uma olhada em outro exemplo de codificação que carrega um backup DBR no disco
Lembre-se sempre! Não tente fazer isso sem conhecimento pleno. Tenha certeza do que você vai fazer. O uso descuidado das instruções a seguir pode resultar em grande perda de dados, pois o uso incorreto das instruções pode tornar todas as informações no disco inacessíveis.
DEBUGANDO BKDBR.BIN
Em 100 2 0 1
EM
Depois de ver o código deste exemplo, você pode facilmente imaginar o quanto ele pode ajudar quando você mais precisar. Além disso, é impossível programar em todas as situações. Entretanto, em casos de problemas simples, para usar as instruções de compilação, você só precisa copiar debug.exe/debug.com para o disco de inicialização e começar a escrever o código.
A funcionalidade e os exemplos descritos neste capítulo e neste livro são compatíveis apenas com a arquitetura da família de processadores Intel x86.
Primeiro, precisamos saber um pouco sobre os conceitos básicos de arquitetura de computadores para que possamos entender os termos usados nas seções a seguir ao descrever o funcionamento e os exemplos em diferentes estágios. Vamos aprender alguns conceitos básicos de arquitetura de computadores:
Conceitos básicos
CPU
Esta parte também é conhecida como unidade central de processamento ou CPU, que por sua vez consiste em uma unidade de controle e uma unidade lógica aritmética. Suas funções incluem ler e escrever o conteúdo das células de memória, transferir dados entre células de memória e registradores especiais, e decodificar e executar instruções de programa. O processador possui diversas células de memória que são usadas com muita frequência e, portanto, fazem parte da CPU.
Essas células são conhecidas como registradores. Um processador pode ter uma ou duas dúzias desses registradores. A unidade lógica aritmética da CPU implementa operações relacionadas a cálculos numéricos e simbólicos.
Normalmente, esses dispositivos têm a capacidade de executar apenas operações muito básicas, como somar e subtrair dois números inteiros, multiplicar e dividir números inteiros, manipular bits de registradores e comparar o conteúdo de dois registradores. Os computadores pessoais podem ser classificados pelo que é chamado de tamanho de palavra, que é o número de bits que o processador pode processar ao mesmo tempo.
Memória central
É um grupo de células feitas com semicondutores usados para processos comuns, como execução de programas e armazenamento de informações para operações. Cada uma dessas células pode conter um valor numérico e tem a propriedade de ser direcional. É isso que eles podem diferenciar uns dos outros usando um número ou endereço exclusivo para cada célula. O nome geral para esses dispositivos de armazenamento é memória de acesso aleatório ou RAM.
A principal desvantagem desse tipo de memória é que os circuitos integrados perdem as informações armazenadas quando o fornecimento de energia é interrompido. Isso levou à criação da memória, cuja informação não é perdida quando o sistema é desligado. Essa memória é chamada de Memória Somente Leitura ou ROM.
Para que um computador processe informações, é necessário que essas informações sejam armazenadas em células especiais chamadas registradores. Os registradores são grupos de 8 ou 16 flip-flops.
Um flip-flop é um dispositivo capaz de armazenar dois níveis de voltagem, um baixo, normalmente 0,5 volts, e outro, comumente de 5 volts. O baixo nível de energia no flip-flop é interpretado como desligado ou 0, e o alto nível como ligado ou
- Esses estados são geralmente conhecidos como bits, que são a menor unidade de informação em um computador.
Um grupo de 16 bits é conhecido como palavra; uma palavra pode ser dividida em grupos de 8 bits chamados bytes, e os grupos de 4 bits são chamados nibbles.
Registros de CPU
A CPU tem 4 registradores internos, cada um de 16 bits. Os quatro primeiros, AX, BX, CX e DX são registradores de uso geral e também podem ser usados como registradores de 8 bits, se usados dessa forma é necessário se referir a eles, por exemplo, como: AH e AL, que são os bytes altos e baixos do registrador AX. Essa nomenclatura também é aplicável aos registradores BX, CX e DX.
Os registros conhecidos por seus nomes específicos:
Registrar |
Nome específico |
MACHADO |
Acumulador |
BX |
Registro de base |
CX |
Registro de contagem |
DX |
Registro de dados |
DS |
Registro de segmento de dados |
É |
Registro de segmento extra |
SS |
Registro de segmento de bateria |
CS |
Registro de segmento de código |
PA |
Registro de ponteiros base |
E |
Registro de índice de origem |
DE |
Registro de índice de destino |
SP |
Registro de ponteiro de bateria |
Propriedade Intelectual |
Próximo registrador de ponteiro de instrução |
F |
Registro de bandeiras |
No entanto, usaremos esses registros em interrupções de programação através de C nos próximos capítulos em detalhes, mas aprender o básico da linguagem assembly aqui será ideal e nos ajudará na programação de operações de disco, etc.
É possível visualizar os valores dos registradores internos da CPU usando o programa Debug. Para começar a trabalhar com o Debug, digite o seguinte prompt no seu computador:
C:/>Depurar <Enter>
Na próxima linha aparecerá um traço, este é o indicador de Debug, neste momento as Instruções de Debug podem ser introduzidas usando o seguinte comando:
- r <Entrar>
Todo o conteúdo dos registradores internos da CPU é exibido. Uma alternativa para visualizá-los é usar o comando "r" usando como parâmetro o nome do registrador cujo valor deseja ser visto. Por exemplo:
-rbx <Entrar>
Esta instrução exibirá apenas o conteúdo do registro BX e o indicador de depuração mudará de "-" para ":"
Quando o prompt estiver assim, é possível alterar o valor do registro que foi visto digitando o novo valor e <Enter>, ou o valor antigo pode ser deixado pressionando Enter sem digitar nenhum outro valor.
É possível alterar o valor do registrador flag, e usá-lo como uma estrutura de controle em nossos programas como veremos mais tarde. Cada bit do registrador tem um nome e significado especial, a lista a seguir descreve o valor de cada bit, ligado ou desligado e sua relação com as operações do processador:
Transbordamento
NV = não há estouro
OV = há um estouro
Direção
PARA CIMA = para frente
DN = para trás
Interrupções
DI = desativado
EI = ativado
Sinal
PL = positivo
NG = negativo
Zero
NZ = não é zero
ZR = é zero
Transporte Auxiliar
NA = não há transporte auxiliar
AC = há transporte auxiliar
Paridade
PO = paridade desigual
PE = paridade par
Carregar
NC = não há transporte
CY = há transporte
Estrutura do montador
Em linguagem assembly, as linhas de código têm duas partes, a primeira é o nome da Instrução que deve ser executada, e a segunda são os parâmetros do comando. Por exemplo:
ADICIONE ah, bh
Aqui "ADD" é o comando a ser executado; neste caso, uma adição, e "ah" e "bh" são os parâmetros.
O nome das Instruções na linguagem é composto por duas, três ou quatro letras. Essas Instruções também são chamadas de nomes mnemônicos ou códigos de operação, pois representam uma função que o processador executará. Existem alguns comandos que não requerem parâmetros para sua operação, assim como outros que requerem apenas um parâmetro.
Às vezes, as instruções são usadas da seguinte forma:
Adicionar al,[170]
Os colchetes no segundo parâmetro nos indicam que vamos trabalhar com o conteúdo da célula de memória número 170 e não com o valor 170; isso é conhecido como direção direta.
Agora estamos prontos para codificar nosso primeiro programa com a ajuda do debug. Vamos criar um programa que funcione para ilustrar o que temos visto, e o que faremos é adicionar dois valores que introduziremos diretamente no programa.
O primeiro passo é iniciar o Debug, este passo consiste apenas em digitar debug <Enter> no prompt do sistema operacional.
Para montar um programa no Debug, o comando "a" (assemble) é usado. Quando esse comando é usado, o endereço onde você quer que a montagem comece pode ser dado como parâmetro, se o parâmetro for omitido a montagem será iniciada na localidade especificada pelo CS:IP, geralmente 0100h, que é a localidade onde os programas com extensão .COM devem ser iniciados. E será o local que usaremos, pois somente o Debug pode criar esse tipo específico de programas.
Embora neste momento não seja necessário dar um parâmetro ao comando "a", é recomendável fazê-lo para evitar problemas quando os Registros CS:IP forem utilizados, portanto digitamos:
-a0100 <Entrar>
Quando isso for feito aparecerá na tela algo assim: 0C1B:0100 e o cursor estará posicionado à direita desses números, note que os quatro primeiros dígitos, em sistema hexadecimal, podem ser diferentes, mas os quatro últimos devem ser 0100, pois é o endereço que indicamos como begin. Agora podemos introduzir as Instruções:
0C1B:0100 mov ax,0002; coloca o valor 0002 no registrador ax
0C1B:0103 mov bx,0004; coloca o valor 0004 no registrador bx
0C1B:0106 adicionar ax,bx; o conteúdo de bx é adicionado ao conteúdo de ax
0C1B:0108 int 20; provoca o término do programa.
0C1B:010A
Não é necessário escrever os comentários que vão depois do ";". Uma vez que o último comando foi digitado, int 20, <Enter> é pressionado sem escrever mais nada, para ver o prompt do Debugger novamente.
A última linha escrita não é propriamente uma instrução do assembler, mas sim uma chamada para uma interrupção do sistema operacional. Essas interrupções nos economizam muitas linhas e são muito úteis para acessar funções do sistema operacional.
Para executar o programa que escrevemos, usamos o comando "g", e quando usado veremos uma mensagem que diz:
"Programa finalizado normalmente". Naturalmente com uma mensagem como essa não podemos ter certeza de que o programa fez a adição, mas há uma maneira simples de verificar, usando o comando "r" do Debug podemos ver o conteúdo de todos os registradores do processador, basta digitar:
-r <Entrar>
Cada registro com seu respectivo valor atual aparecerá na tela assim:
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A DE BD
Existe a possibilidade de que os registradores contenham valores diferentes, mas AX e BX devem ser os mesmos, pois são os que acabamos de modificar.
Outra forma de ver os valores, enquanto o programa é executado, é utilizar o endereço onde queremos que a execução termine e mostrar os valores dos registradores como parâmetro para "g", neste caso seria: g108, esta Instrução executa o programa, ela para no endereço 108 e mostra o conteúdo dos registradores.
Um acompanhamento do que está acontecendo nos registradores pode ser feito através do comando "t" (trace), a função deste comando é executar linha por linha o que foi montado, mostrando a cada vez o conteúdo dos registradores.
Para sair do Debug, use o comando "q" (sair).
Vantagens do Montador
O primeiro motivo para trabalhar com assembler é que ele oferece a oportunidade de conhecer melhor o funcionamento do seu PC, o que permite o desenvolvimento de software de forma mais consistente.
A segunda razão é o controle total do computador, que você pode ter com o uso do assembler. Outra razão é que os programas baseados em assembly são mais rápidos e, em alguns casos, são menores, e têm capacidades maiores do que aqueles criados com outras linguagens.
Deixe-me cumprir minha promessa!!
Na parte anterior deste capítulo, usamos algumas instruções como exemplo para fazer o backup do DBR e carregar o backup do DBR para seu local original quando necessário. Primeiro, examinamos a Instrução para fazer o backup.
C:\>DEBUG A:\BKDBR.BIN <Enter>
Arquivo não encontrado
- L 100 2 0 1 < Entrar>
- R CX < Entrar>
CX 0000
: 200 < Entrar>
- W < Entrar>
Escrevendo 00200 bytes
- Q < Entrar>
Neste exemplo, vamos começar a estudar a partir da primeira linha. O comando DEBUG A:\BKDBR.BIN Inicializa o comando debug com a criação de um arquivo na unidade de disquete A: chamado BKDBR.BIN se ele ainda não estiver presente lá. É por isso que recebemos a mensagem “Arquivo não encontrado” no início.
Em nossa segunda Instrução L 100 2 0 1, o comando L (load) é para carregar o DBR do drive instruído. Vamos aprender como? Nesta Instrução o número 100 é o endereço do buffer, onde o DBR será armazenado, o próximo número 2 é usado para o drive C(C :). Os números do drive são dados da seguinte forma:
Letra da unidade |
Número usado |
UM: |
0 |
B: |
1 |
C: |
2 |
E: |
3 |
. |
. |
. |
. |
e assim por diante |
. |
O próximo número 0 é o número do setor inicial do número de setores a serem lidos. Aqui estamos usando 0 para ler o 1º setor, ou seja, o setor DBR. O próximo número que é 1 é usado para informar o número de setores a serem lidos.
Aqui demos 1 porque queremos ler apenas um setor. No entanto, podemos usar os números e locais dos setores inicial e final de acordo com nossas necessidades em diferentes tipos de outras operações. Portanto, ele carregará um setor começando do 1º setor da unidade C: até o local de memória 100.
E a instrução R CX é usada para alterar ou definir o comprimento dos dados que queremos gravar no arquivo BKDBR.BIN. Esta instrução mostrará o valor atual do registro CX e permitirá que você faça qualquer alteração. Digitamos 200 aqui porque o comando DEBUG usa o sistema hexadecimal e o tamanho do DBR em hexadecimal é 200(h) bytes, ou seja, 512 bytes no sistema decimal.
O comando W diz ao DEBUG para gravar os 200(h) bytes do local 100 no arquivo BKDBR.BIN. E finalmente usamos a Instrução Q para sair do DEBUG e voltar ao prompt do DOS.
Aviso!!! Aviso!!! Aviso!!!
É estritamente recomendado que você saiba o que e como está fazendo no procedimento de restauração do DBR de qualquer disco. Se você acidentalmente armazenar o DBR ilegal ou de qualquer outro disco, é possível na maioria dos casos que os dados completos do disco se tornem inacessíveis.
quando você digita a primeira Instrução da codificação que é:
DEBUG A:\BKDBR.BIN <Enter>
O arquivo deve estar no local fornecido onde você está iniciando o programa DEBUG. Agora, se você receber a mensagem de erro “Arquivo não encontrado” antes do prompt DEBUG, pare imediatamente o processo usando o comando Q (sair). Porque isso significa que o arquivo BKDBR.BIN não pôde ser encontrado ou aberto pelo programa DEBUG e se você continuar esse processo, algumas informações inúteis serão gravadas no DBR e isso tornará a partição completa inacessível. |
Agora vamos ver o que fizemos na codificação das Instruções para restaurar o DBR do arquivo de backup que fizemos chamado BKDBR.BIN. Os comandos do DEBUG para restaurar o backup são os seguintes:
C:\> DEBUG A:\BKDBR.BIN <Enter>
- W 100 2 0 1 < Entrar>
- Q < Entrar >
|
Esta instrução gravará 1 setor de informações do arquivo BKDBR.BIN na unidade de disquete (a:) no local de memória 100 no primeiro setor, que é o setor 0 da 2ª unidade, que é a unidade (C:).
Armazenando e carregando os programas
Não parece prático digitar um programa inteiro toda vez que for necessário, e para evitar isso é possível armazenar um programa no disco, com a enorme vantagem de que por já estar montado não será necessário executar o Debug novamente para executá-lo.
Os passos para salvar um programa que já está armazenado na memória são:
- Obtenha o comprimento do programa subtraindo o endereço final do endereço inicial, naturalmente no sistema hexadecimal.
- Dê um nome e uma extensão ao programa.
- Coloque o comprimento do programa no registrador CX.
- Ordene que o Debug grave o programa no disco.
Usando o programa a seguir como exemplo, teremos uma ideia mais clara de como seguir esses passos. Quando o programa for finalmente montado, ele ficará assim:
0C1B:0100 movimento machado,0002
0C1B:0103 movimento bx,0004
0C1B:0106 adicionar ax,bx
0C1B:0108 você tem 20 anos
0C1B:010A
-h 10a 100
020a 000a
-n teste.com
-rcx
CX 0000
:000a
-Em
Escrevendo bytes 000A
Para obter o comprimento de um programa, o comando "h" é usado, pois ele nos mostrará a adição e subtração de dois números em hexadecimal. Para obter o comprimento do nosso, damos como parâmetros o valor do endereço final do nosso programa (10A), e o endereço inicial do programa (100). O primeiro resultado que o comando nos mostra é a adição dos parâmetros e o segundo é a subtração.
O comando "n" nos permite nomear o programa. O comando "rcx" nos permite mudar o conteúdo do registrador CX para o valor que obtivemos do tamanho do arquivo com "h", neste caso 000a, já que o resultado da subtração do endereço final do endereço inicial.
Por fim, o comando "w" grava nosso programa no disco, indicando quantos bytes ele gravou. Além disso, para salvar um arquivo já carregado, são necessários dois passos:
- Dê o nome do arquivo a ser carregado.
- Carregue-o usando o comando "l" (carregar).
Para obter o resultado correto dos passos seguintes, é necessário que o programa acima já esteja criado.
Dentro de Debug escrevemos o seguinte:
-n teste.com
-eu
-em 100 109
0C3D:0100 B80200 MOVIMENTO AX,0002
0C3D:0103 BB0400 MOVIMENTO BX,0004
0C3D:0106 01D8 ADICIONE AX,BX
0C3D:0108 CD20 INT 20
O último comando "u" é usado para verificar se o programa foi carregado na memória. O que ele faz é desmontar o código e mostrá-lo desmontado. Os parâmetros indicam para DEBUG de onde e para onde desmontar. DEBUG sempre carrega os programas na memória no endereço 100H, caso contrário é indicado.
Segmentos
A arquitetura dos processadores x86 força o uso de segmentos de memória para gerenciar as informações, o tamanho desses segmentos é de 64kb.
A razão de ser desses segmentos é que, considerando que o tamanho máximo de um número que o processador pode gerenciar é dado por uma palavra de 16 bits ou registrador, não seria possível acessar mais de 65536 localidades de memória usando apenas um desses registradores, mas agora, se a memória for dividida em grupos ou segmentos, cada um de 65536 localidades, e usarmos um endereço em um registrador exclusivo para encontrar cada segmento, e então fizermos cada endereço de um slot específico com dois registradores, e será possível acessarmos uma quantidade de 4294967296 bytes de memória.
Para que o montador consiga gerenciar os dados, é necessário que cada informação ou Instrução se encontre na área que corresponde aos seus respectivos segmentos. O montador acessa essas informações levando em conta a localização do segmento, dada pelos registradores DS, ES, SS e CS e dentro do registrador o endereço da informação especificada. É por isso que quando criamos um programa usando o Debug em cada linha que montamos, aparece algo assim:
1CB0:0102 MOVIMENTO AX,BX
Onde o primeiro número, 1CB0, corresponde ao segmento de memória que está sendo usado, o segundo se refere ao endereço dentro deste segmento, e as instruções que serão armazenadas a partir desse endereço seguem.
O montador ajusta o tamanho dos segmentos tomando como base a quantidade de bytes que cada Instrução montada precisa, pois seria desperdício de memória usar os segmentos inteiros. Por exemplo, se um programa precisa de apenas 10kb para armazenar dados, o segmento de dados será de apenas 10kb e não os 64kb que ele pode manipular.
Movimentação de dados
Estou listando algumas instruções em linguagem assembly para operações de dados aqui para seu conhecimento e conveniência, pois quando estivermos programando com a ajuda de interrupções e outras operações do BIOS, precisaremos de seus conceitos básicos.
Introdução detalhada e estudo completo da linguagem assembly estão além do limite deste livro. Embora o conhecimento dos fundamentos da assembly seja necessário para prosseguir nos capítulos importantes de programação, se você sentir dificuldade para entender todas as Instruções, não precisa se preocupar, mas é recomendado que você obtenha a ideia básica das Instruções.
Em qualquer programa é necessário mover os dados na memória e nos registradores da CPU e há várias maneiras de fazer isso. Ele pode copiar dados da memória para algum registrador, de registrador para registrador, de um registrador para uma pilha, de uma pilha para um registrador, transmitir dados para dispositivos externos e vice-versa.
Essa movimentação de dados está sujeita a regras e restrições. Seguem algumas delas:
- Não é possível mover dados de um local de memória para outro diretamente. É necessário primeiro mover os dados do local de origem para um registrador e, então, do registrador para a localidade de destino.
- Não é possível mover uma constante diretamente para um registrador de segmento; primeiro ela deve ser movida para um registrador na CPU.
- É possível mover blocos de dados por meio das Instruções MOVS, que copiam uma cadeia de bytes ou palavras. MOCSB que copia n bytes de um local para outro e MOVSW copia n palavras de um local para outro. As duas últimas Instruções pegam os valores dos endereços definidos por DS:SI como um grupo de dados a serem movidos e ES:DI como a nova localização dos dados.
Para mover dados também existem estruturas chamadas de baterias, onde os dados são introduzidos com a Instrução push e são extraídos com a Instrução pop. Em uma pilha o primeiro dado a ser introduzido é o último que podemos pegar, isto é, se em nosso programa usarmos estas Instruções:
MACHADO DE EMPURRAR
EMPURRE BX
EMPURRE CX
Para retornar os valores corretos para cada registrador no momento de retirá-los da pilha é necessário fazê-lo na seguinte ordem:
POP CX
POP-BX
POP-AXÉ
Para a comunicação com dispositivos externos, o comando out é usado para enviar informações para uma porta e o comando in para ler as informações recebidas de uma porta.
A sintaxe do comando OUT é:
FORA DX,AX
Onde DX contém o valor da porta que será usada para a comunicação e AX contém as informações que serão enviadas.
A sintaxe do comando IN é:
EM AX,DX
Onde AX é o registrador onde as informações recebidas serão mantidas e DX contém o endereço da porta pela qual as informações chegarão.
Instrução MOV
Usado para transferência de dados entre células de memória, registradores e o acumulador. A sintaxe é a seguinte:
Destino MOV, Fonte
Os diferentes movimentos de dados permitidos para esta Instrução são mostrados na tabela a seguir:
S. Não. |
Destino |
Fonte |
1. |
memória |
acumulador |
2. |
acumulador |
memória |
3. |
registro de segmento |
memória/registro |
4 |
memória/registro |
registro de segmento |
5. |
Registrar |
registrar |
6. |
Registrar |
memória |
7. |
memória |
registrar |
8. |
Registrar |
dados imediatos |
9. |
memória |
dados imediatos |
Vejamos um exemplo:
MOVIMENTO AX,0006
MOVIMENTO BX,AX
MOVIMENTO AX,4C00
INT 21
Este programa move o valor de 0006H para o registrador AX, então move o conteúdo de AX (0006h) para o registrador BX e, por último, move o valor 4C00h para o registrador AX para finalizar a execução com a opção 4C da interrupção 21h. Faremos uma breve introdução à interrupção 13H e à interrupção 21H mais tarde.
Interrupções
Uma interrupção é um recurso de hardware que faz com que a CPU suspenda a execução, salve seu status e transfira para um local específico. O local de transferência especifica o endereço de um programa que deve tomar uma ação em resposta à interrupção. O programa que é executado como resultado da interrupção é chamado de programa de tratamento de interrupção.
Por exemplo: se o DOS quiser enviar alguma informação para o BIOS ou o BIOS quiser enviar alguma informação para o sistema do computador, o DOS ou o BIOS geram interrupções. Sempre que uma interrupção é gerada, o computador suspende o que quer que esteja fazendo e primeiro cuida da operação que gerou a interrupção.
Cada dispositivo capaz de gerar interrupção recebe um número de interrupção exclusivo para identificar qual dispositivo está gerando essas interrupções. Discutiremos todas as funções e subfunções da interrupção 13H, Extensões da interrupção 13H e interrupção 21H neste livro.
Basicamente, as interrupções podem ser dos três tipos seguintes:
- Interrupções internas de hardware
- Interrupções de hardware externo
- Interrupções de software
Interrupções de hardware interno
Interrupções internas são geradas por certos eventos que surgem durante a execução de um programa. Esse tipo de interrupção é gerenciado em sua totalidade pelo hardware e não é possível modificá-lo.
Um exemplo claro desse tipo de interrupção é aquela que atualiza o contador do relógio interno do computador, o hardware faz a chamada para essa interrupção diversas vezes durante um segundo para manter o tempo atualizado.
Embora não possamos gerenciar diretamente essa interrupção, já que não podemos controlar a atualização do tempo por meio de software, ainda é possível usar seus efeitos no computador em nosso benefício.
Por exemplo: para criar um relógio virtual atualizado continuamente, precisamos apenas escrever um programa que leia o valor real do contador e o traduza para um formato compreensível para o usuário.
Interrupções de hardware externo
Interrupções externas são geradas por dispositivos periféricos, como teclados, impressoras, placas de comunicação, etc. Elas também são geradas por coprocessadores. Não é possível desativar interrupções externas.
Essas interrupções não são enviadas diretamente para a CPU, mas sim para um circuito integrado cuja função é lidar exclusivamente com esse tipo de interrupções.
Interrupções de software
Interrupções de software podem ser ativadas diretamente pelo montador invocando o número da interrupção desejada com a Instrução INT.
O uso de interrupções nos ajuda na criação de programas e, ao usá-las, nossos programas ficam mais curtos. É mais fácil entendê-los e eles geralmente têm um melhor desempenho, principalmente devido ao seu tamanho menor. Este tipo de interrupção pode ser separado em duas categorias: as interrupções do DOS do sistema operacional e as interrupções do BIOS.
A diferença entre os dois é que as interrupções do sistema operacional são mais fáceis de usar, mas também são mais lentas, pois essas interrupções fazem uso do BIOS para atingir seu objetivo, por outro lado, as interrupções do BIOS são muito mais rápidas, mas têm a desvantagem de que, por fazerem parte do hardware, são muito específicas e podem variar dependendo até mesmo da marca do fabricante do circuito.
A escolha do tipo de interrupção a ser utilizada dependerá unicamente das características que você deseja dar ao seu programa.
Como usaremos interrupções para programação de recuperação de dados com a ajuda da linguagem C por meio do tratamento de interrupções com C, discutiremos apenas as rotinas de interrupção 13H, extensões de interrupção 13H e interrupção 21H especialmente. Não é tão importante discutir todas as outras interrupções e suas funções porque na linguagem C, funções mais fáceis estão disponíveis para executar a maioria dessas tarefas. No entanto, o conhecimento da interrupção 13H e suas extensões é essencial para a programação de recuperação de dados. |
Vamos fazer uma breve introdução à interrupção 20H e à interrupção 21H. O valor escrito entre parênteses (como 0x20) indica como usar
INT 20H ( 0x20) --> Encerrar processo
Chamada com: CS = endereço do segmento do prefixo do segmento do programa
Retorna: Nada
Comentários:
Ele encerra o processo atual. Este é um dos vários métodos que um programa pode usar para executar uma saída final. Você também pode usar funções (00H ou 31H ou 4CH) de INT 21H ou simplesmente INT 27H para executar uma saída final onde as funções 31H e 4CH de INT 21H são geralmente preferidas porque permitem que um código de retorno seja passado para o processo pai.
É recomendável que, se você tiver usado Blocos de Controle de Arquivos (FCBs) para gravar qualquer arquivo, feche o arquivo primeiro, caso contrário, você poderá perder os dados porque, na ação de saída final, toda a memória que foi ocupada pelo processo é liberada, os buffers de arquivo são esvaziados e quaisquer identificadores abertos para arquivos ou dispositivos de propriedade do processo são fechados.
Portanto, se você tiver identificadores de arquivo abertos, poderá perder os dados.
INT 21H (0x21)
Função 00H (0x00) --> Terminar processo
Chamada com: AH = 00H
CS = endereço de segmento do prefixo do segmento do programa
Retorna: Nada
Comentários:
Esta interrupção encerra o processo atual. Este é um dos vários métodos que um programa pode usar para executar uma saída final. Para mais informações, veja INT 20H
INT 21H (0x21)
Função 01H (0x01) --> Entrada de caracteres com eco
Chamada com: AH = 01H
Retorna: AL = dados de entrada de 8 bits
Comentários:
Esta interrupção lê um caractere do dispositivo de entrada padrão, como um teclado, e o ecoa para o dispositivo de saída padrão. Se nenhum caractere estiver pronto, espera até que um esteja disponível.
INT 21H (0x21)
Função 02H (0x02) --> Saída de caracteres
Chamada com: AH = 02H
DL = dados de 8 bits para saída
Retorna: Nada
Comentários:
Ele emite um caractere para o dispositivo de saída padrão. A saída pode ser redirecionada. Se a saída for redirecionada, não há como detectar disco cheio.
Também é possível enviar strings para o display executando uma gravação (INT 21H, Função 40H) usando o identificador predefinido para a saída padrão (0001H), se a saída não tiver sido redirecionada ou se um identificador tiver obtido o dispositivo lógico CON.
INT 21H (0x21)
Função 03H (0x03) --> Entrada auxiliar
Chamada com: AH = 03H
Retorna: AL = dados de entrada de 8 bits
Comentários:
Ele lê um caractere do dispositivo auxiliar padrão. O padrão é a primeira porta serial (COM1).
Se o dispositivo auxiliar enviar dados mais rápido do que seu programa pode processá-los, caracteres podem ser perdidos. Não há como um programa de usuário ler o status do dispositivo auxiliar ou detectar erros de E/S, como caracteres perdidos, por meio dessa chamada de função.
INT 21H (0x21)
Função 04H (0x04) --> Saída auxiliar
Chamada com: AH = 04H
DL = dados de 8 bits para saída
Retorna: Nada
Comentários:
Esta função do INT 21H emite um caractere para o dispositivo auxiliar padrão. O padrão é a primeira porta serial (COM1). Strings também podem ser enviadas para o dispositivo auxiliar executando uma gravação (INT 21H Função 40H) usando o identificador predefinido para o dispositivo auxiliar padrão (00034) ou usando um identificador obtido abrindo o dispositivo lógico AUX.
INT 21H (0x21)
Função 05H (0x05) --> Saída da impressora
Chamada com: AH = 05H
DL = dados de 8 bits para saída
Retorna: Nada
Comentários:
Esta função envia um caractere para o dispositivo de lista padrão. O dispositivo padrão é a impressora na primeira porta paralela (LPT1). Strings também podem ser enviadas para a impressora executando uma gravação (INT 21H Função 40H) usando o identificador predefinido para o dispositivo de impressora padrão (0004H) ou usando um identificador obtido abrindo o dispositivo lógico PRN ou LPT1.
INT 21H (0x21)
Função 06H (0x06) --> E/S direta do console
Chamada com: AH = 06H
DL = função solicitada tal que,
Se solicitação de saída, 00H-FEH
Se solicitação de entrada, 0FFH
Retorna: Nada, se chamado com DL = 00H-0FEH
Se chamado com DL = FFH e um personagem estiver pronto
Bandeira zero = limpo
AL = dados de entrada de 8 bits
Se chamado com DL = FFH e nenhum caractere estiver pronto
Bandeira zero = definida
Comentários:
Ele lê um caractere do dispositivo de entrada padrão ou grava um caractere no dispositivo de saída padrão. A E/S pode ser redirecionada, mas se a E/S tiver sido redirecionada, não há como detectar EOF ou disco cheio. Esta função do INT 21H é usada por programas que precisam ler e gravar todos os caracteres possíveis e códigos de controle sem nenhuma interferência do sistema operacional.
INT 21H (0x21)
Função 07H (0x07) --> Entrada de caracteres não filtrada sem eco
Chamada com: AH = 07H
Retorna: AL = dados de entrada de 8 bits
Comentários:
Esta função lê um caractere do dispositivo de entrada padrão sem ecoá-lo no dispositivo de saída padrão.
INT 21H (0x21)
Função 08H (0x08) --> Entrada de caracteres sem eco
Chamada com: AH = 08H
Retorna: AL = dados de entrada de 8 bits
Comentários:
Esta função lê um caractere do dispositivo de entrada padrão sem ecoá-lo no dispositivo de saída padrão.
INT 21H (0x21)
Função 09H (0x09) --> Exibir string
Chamada com: AH = 09H
DS:DX = segmento: deslocamento da string
Retorna: Nada
Comentários:
Ele envia uma sequência de caracteres para o dispositivo de saída padrão. A saída pode ser redirecionada. Se a saída tiver sido redirecionada, não há como detectar disco cheio. A sequência também pode ser enviada para o display executando uma gravação (INT 21H Função 40H) usando o identificador predefinido para a saída padrão (0001H), se não tiver sido redirecionada, ou um identificador obtido abrindo o dispositivo lógico CON.
INT 21H (0x21)
Função 0AH (0x0A ou 10) --> Entrada de teclado com buffer
Chamada com: AH = 0AH
DS:DX = segmento: deslocamento do buffer
Retorna: Dados colocados no buffer, Não retorna nada
Comentários:
Ele lê uma sequência de bytes do dispositivo de entrada padrão, até e incluindo um retorno de carro ASCII (0DH), e os coloca em um buffer designado pelo usuário. Os caracteres são ecoados para o dispositivo de saída padrão. O buffer usado pela função tem o seguinte formato:
Byte |
Conteúdo |
0 |
Número máximo de caracteres para ler, definido pelo programa |
1 |
Número de caracteres realmente lidos (excluindo retorno de carro), definido pelo MS-DOS |
2+ |
String lida do teclado ou entrada padrão, terminada por um retorno de carro (0DH) |
INT 21H (0x21)
Função 0BH (0x0B ou 11) --> Verificar status de entrada
Chamada com: AH = 0BH
Retorna: AL = 00H (se nenhum caractere estiver disponível)
FFH (se pelo menos um caractere estiver disponível)
Comentários:
Verifica se um caractere está disponível no dispositivo de entrada padrão, como o teclado. Esta função é equivalente a IOCTL INT 21H Função 44H Sub função 06H.
INT 21H (0x21)
Função 0CH (0x0C ou 12) --> Liberar buffer de entrada e depois Entrada
Chamada com: AH = 0CH
AL = número de entradas a serem invocadas após a reinicialização
buffer (deve ser 01H, 06H, 07H, 08H ou 0AH)
Se AL = 0AH
DS: DX = segmento: deslocamento do buffer de entrada
Retornos: Se chamado com AL = 01H, 06H, 07H ou 08H,
AL = dados de entrada de 8 bits
Se chamado com AL= 0AH,
Nada (dados colocados no buffer)
Comentários:
Limpa o buffer de entrada padrão e então invoca uma das funções de entrada de caracteres. A entrada pode ser redirecionada. Um número de função em AL, exceto 01H, 06H, 07H, 08H ou 0AH, esvazia o buffer de entrada e retorna o controle para o programa de chamada.
INT 21H (0x21)
Função 0DH (0x0D ou 13) -> Reinicialização do disco
Chamada com: AH = 0DH
Retorna:Nada
Comentários:
Esta função limpa todos os buffers de arquivo. A função não atualiza o diretório do disco para nenhum arquivo que ainda esteja aberto.
INT 21H (0x21)
Função 0EH (0x0E ou 14) -> Selecionar disco
Chamada com: AH = 0EH
DL = código de acionamento (0 = A, 1= B, etc.)
Retorna: AL = número de unidades lógicas no sistema
Comentários:
Seleciona a unidade especificada como atual ou padrão, unidade de disco e retorna o número total de unidades lógicas no sistema.
Os aplicativos devem se limitar às letras de unidade de AZ (0 = A, 1 = B, etc.). Unidades lógicas significam o número total de dispositivos de bloco, como unidades de disquete e disco rígido, etc. Geralmente, uma única unidade de disco rígido física é particionada em duas ou mais unidades lógicas.
INT 21H (0x21)
Função 0FH (0x0F ou 15) -> Abrir arquivo
Chamada com: AH = 0FH
S: DX = segmento: deslocamento do bloco de controle de arquivo
Retorna: Se a função for bem-sucedida e o arquivo for encontrado
AL = 00H
E o FCB preenchido pelo MS-DOS é o seguinte:
Campo de acionamento (deslocamento 00H) = 1 para acionamento A, 2 para acionamento B, etc. Campo de bloco atual (deslocamento 0CH) = 00H
Campo de tamanho de registro (deslocamento 0EH) = 0080H
Campo de tamanho (deslocamento 10H) = tamanho do arquivo do diretório
Campo de dados (deslocamento 14H) = carimbo de data do diretório
Campo de tempo (deslocamento 16H) = carimbo de hora do diretório
Se a função não for bem-sucedida e o arquivo não for encontrado
AL = 0FFH
Comentários:
Abre um arquivo e o torna disponível para operação de leitura/gravação subsequente. Se o programa for usar um tamanho de registro diferente de 128 bytes, ele deve definir o campo record-size no deslocamento FCB 0EH após o arquivo ser aberto com sucesso e antes de qualquer outra operação de disco.
INT 21H (0x21)
Função 10H (0x10 ou 16) -> Fechar arquivo
Chamada com: AH = 10H
DS: DX = segmento: deslocamento do bloco de controle de arquivo
Retorna: Se a função for bem-sucedida (atualização de diretório bem-sucedida)
AL = 00H
Se a função não for bem-sucedida (arquivo não encontrado no diretório)
AL = FFH
Comentários:
É usado para fechar um arquivo. Ele fecha um arquivo, limpa todos os buffers de disco internos do MS-DOS associados ao arquivo para o disco e atualiza o diretório do disco se o arquivo tiver sido modificado ou estendido.
INT 21H (0x21)
Função 11H (0x11 ou 17) -> Encontrar o primeiro arquivo
Chamada com: AH = 11H
DS: DX = segmento: deslocamento do bloco de controle de arquivo
Retorna: Se a função for bem-sucedida e o arquivo correspondente for encontrado
AL = 00H
E o buffer no endereço atual da área de transferência de disco (DTA) é preenchido como um FCB normal não aberto ou FCB estendido, dependendo do tipo de FCB que foi inserido para funcionar.
Se a função não for bem-sucedida (nenhum nome de arquivo correspondente encontrado)
AL = FFH
Comentários:
Ela pesquisa o diretório atual na unidade designada para um nome de arquivo correspondente. Você pode usar curingas (? e *). Esta função retorna o primeiro nome de arquivo correspondente.
INT 21H (0x21)
Função 12H (0x12 ou 18) -> Localizar próximo arquivo
Chamada com: AH = 12H
DS: DX = segmento: deslocamento do bloco de controle de arquivo
Retorna: Se a função for bem-sucedida e o nome do arquivo correspondente for encontrado
AL = 00H
E o buffer no endereço atual da área de transferência do disco (DTA) é configurado como um FCB normal não aberto ou FCB estendido, dependendo do tipo de FCB que foi originalmente inserido na função INT21H 11H
Se a função não for bem-sucedida e os nomes de arquivo correspondentes não forem encontrados
AL = FFH
Comentários:
Este é o companheiro da função anterior. Se INT 21H Function 11H tiver sido bem-sucedido, ele retornará o próximo nome de arquivo correspondente, se houver. Esta função assume que o FCB usado como entrada foi inicializado corretamente por uma chamada anterior para INT 21H Function 11H e possíveis chamadas subsequentes para INT 21H Function 12H e que o nome de arquivo ou extensão sendo pesquisado continha pelo menos um caractere curinga.
INT 21H (0x21)
Função 13H (0x13 ou 19) -> Excluir arquivo
Chamada com: AH = 13H
DS: DX = segmento: deslocamento do bloco de controle de arquivo
Retorna: Se a função for bem-sucedida e o arquivo ou arquivos forem excluídos
AL = 00H
Se a função não for bem-sucedida e nenhum arquivo correspondente for encontrado ou pelo menos um arquivo correspondente for somente leitura,
AL = FFH
Comentários:
Ele apaga todos os arquivos correspondentes do diretório atual na unidade de disco padrão ou especificada. Você também pode usar curingas (? e *).
INT 21H (0x21)
Função 14H (0x14 ou 20) -> Leitura sequencial
Chamada com: AH = 14H
DS: DX = segmento: deslocamento do aberto anteriormente
bloco de controle de arquivo
Retorna: AL = 00H se a leitura for bem-sucedida
01H se fim do arquivo
02H se segmento quebrar
03H se registro parcial lido no final de
arquivo
Comentários:
Esta função lê o próximo bloco sequencial de dados de um arquivo e, em seguida, incrementa o ponteiro do arquivo apropriadamente. O número de bytes de dados a serem lidos é especificado pelo campo record-size (offset 0EH) do bloco de controle de arquivo (FCB).
O registro é lido na memória no endereço atual da área de transferência de disco (DTA), especificado pela chamada mais recente para a função INT 21H 1AH. Se o tamanho do registro e a localização do buffer forem tais que um estouro de segmento ou wraparound ocorreria, a função falhará com um código de retorno de 02H.
INT 21H (0x21)
Função 15H (0x15 ou 21) --> Escrita sequencial
Chamada com: AH = 15H
DS: DX = segmento: deslocamento do bloco de controle de arquivo aberto anteriormente
Retorna: AL = 00H, se a gravação for bem-sucedida
01H, se o disco for arquivo
02H, se o segmento for quebrado
Comentários:
Esta função grava o próximo bloco sequencial de dados em um arquivo e, em seguida, incrementa o ponteiro do arquivo apropriadamente. O número de bytes de dados a serem gravados é especificado pelo campo de tamanho de registro (deslocamento 0EH) do bloco de controle de arquivo (FCB).
INT 21H (0x21)
Função 16H (0x16 ou 22) --> Criar arquivo
Chamada com: AH = 16H
DS: DX = segmento: deslocamento do bloco de controle de arquivo não aberto
Retorna: Se a função for bem-sucedida e o arquivo foi criado ou truncado
AL = 00H
E o FCB foi preenchido pelo MS-DOS da seguinte forma:
Campo de acionamento (deslocamento 00H) = 1 para acionamento A, 2 para acionamento B, etc.
Campo de bloco atual (offset0CH) = 00H
Campo de tamanho de registro (deslocamento 0EH) = 0080H
Campo de tamanho (deslocamento 10H) = tamanho do arquivo do diretório
Campo de data (deslocamento 14H) = carimbo de data do diretório
Campo de tempo (deslocamento 16H = carimbo de hora do diretório
Se a função não for bem-sucedida (diretório cheio)
AL = FFH
Comentários:
Esta função cria uma nova entrada de diretório no diretório atual ou trunca qualquer arquivo existente com o mesmo nome para comprimento zero. Também abre o arquivo para operações de leitura/gravação subsequentes. Esta função deve ser usada com cautela porque um arquivo existente com o nome especificado é truncado para comprimento zero e todos os dados naquele arquivo são irrevogavelmente perdidos.
INT 21H (0x21)
Função 17H (0x17 ou 23) --> Renomear arquivo
Chamada com: AH = 17H
DS: DX = segmento: deslocamento do bloco de controle de arquivo especial
Retorna: Se a função for bem-sucedida e um ou mais arquivos forem renomeados
AL = 00H
Se a função não for bem-sucedida e não houver arquivos correspondentes, ou se o novo nome do arquivo corresponder a um arquivo existente
AL = FFH
Comentários:
Esta função altera o nome de todos os arquivos correspondentes no diretório atual do disco na unidade especificada.
Você também pode usar curingas com isso. O bloco de controle de arquivo especial tem um código de unidade, nome de arquivo e extensão na posição usual (bytes 0 a 0BH) e um segundo nome de arquivo começando 6 bytes após o primeiro (deslocamento 11H).
INT 21H
Função 18H (0x18 ou 24) --> Reservado
INT 21H (0x21)
Função 19H (0x19 ou 25) --> Obter disco atual
Chamada com: AH = 19H
Retorna: AL = código de unidade (0 para unidade A, 1 para unidade B etc.)
Comentários:
Esta função retorna o código da unidade de disco atual ou padrão.
INT 21H (0x21)
Função 1AH (0x1A ou 26) --> Definir endereço DTA
Chamada com: AH = 1AH
DS: DX = segmento: deslocamento da área de transferência do disco.
Retorna: Nada
Comentários:
Esta função especifica o endereço da área de transferência de disco (DTA) a ser usada para chamadas de função subsequentes relacionadas ao FCB.
INT 21H (0x21)
Função 1BH (0x1B ou 27) --> Obter dados de unidade padrão
Chamada com: AH = 1BH
Retorna: Se a função for bem-sucedida
AL = setores por cluster
DS: DX = deslocamento do segmento do byte de ID da mídia
CX = tamanho do setor físico em bytes
DX = número de clusters para unidade padrão
Se a função não for bem-sucedida (unidade inválida ou erro crítico)
AL = FFH
Comentários:
Esta função obtém informações selecionadas sobre a unidade de disco padrão e um ponteiro para o byte de identificação de mídia de sua tabela de alocação de arquivos.
O byte de ID de mídia tem os seguintes significados:
ID do descritor de mídia |
Médio |
0F0H |
Disquete de 3,5 polegadas, frente e verso, 18 setores (ou outro) |
0F8H |
disco fixo |
0F9H |
Disquete de 5,25 polegadas, frente e verso, 15 setores |
0F9H |
Disquete de 3,5 polegadas, frente e verso, 9 setores |
0FCH |
Disquete de 5,25 polegadas, lado único, 9 setores |
0FDH |
Disquete de 5,25 polegadas, frente e verso, 9 setores |
0FDH |
Disquete de 8 polegadas, face única, densidade única |
0FEH |
Disquete de 5,25 polegadas, lado único, 8 setores |
0FEH |
Disquete de 8 polegadas, face única, densidade única |
0FEH |
Disquete de 8 polegadas, dupla face, dupla densidade |
0FFH |
Disquete de 5,25 polegadas, frente e verso, 8 setores |
INT 21H (0x21)
Função 1CH (0x1C ou 28) --> Obter dados da unidade
Chamada com: AH = 1CH
DL = Código de Condução
Retorna: Se a função for bem-sucedida
AL = setores por cluster
DS: BX = segmento: deslocamento do byte de ID da mídia
CX = tamanho do setor físico em bytes
DX = número de clusters para unidade padrão ou especificada
Se a função não for bem-sucedida e a unidade for inválida ou houver erro crítico
AL = FFH
Comentários:
Esta função obtém informações de alocação sobre a unidade de disco especificada e um ponteiro para o byte de identificação de mídia de sua tabela de alocação de arquivo. Consulte a tabela de bytes de ID do descritor de mídia, fornecida em INT 21H, Função 1BH, para obter informações de ID de mídia.
INT 21H (0x21)
Função 1DH (0x1D ou 29) --> Reservado
INT 21H (0x21)
Função 1EH (0x1E ou 30) --> Reservado
INT 21H (0x21)
Função 1FH (0x1F ou 31) --> Reservado
INT 21H (0x21)
Função 20H (0x20 ou 32) --> Reservado
INT 21H (0x21)
Função 21H (0x21 ou 33) --> Leitura aleatória
Chamada com: AH = 21H
DS: DX = segmento: deslocamento do aberto anteriormente
bloco de controle de arquivo
Retorna: AL = 00H se a leitura for bem-sucedida
01H se fim do arquivo
02H se segmento quebrar, leitura cancelada
03H se registro parcial lido no final de
arquivo
Comentários:
Esta função lê um registro selecionado de um arquivo para a memória. O registro é lido para a memória no endereço da área de transferência de disco atual, especificado pela chamada mais recente para INT 21H Function 1AH.
INT 21H (0x21)
Função 22H (0x22 ou 34) --> Escrita aleatória
Chamada com: AH = 22H
DS: DX = segmento: deslocamento do aberto anteriormente
bloco de controle de arquivo
Retorna: AL = 00H se a gravação for bem-sucedida
01H se disco cheio
02H se o segmento for quebrado, a gravação será cancelada
Comentários:
Esta função grava os dados da memória em um registro selecionado em um arquivo.
INT 21H (0x21)
Função 23H (0x23 ou 35) --> Obter tamanho do arquivo
Chamada com: AH = 23H
DS: DX = segmento: deslocamento do arquivo não aberto
bloco de controle
Retorna: Se a função for bem-sucedida e o nome do arquivo correspondente for encontrado
AL = 00H
E o campo de registro relativo do FCB (deslocamento 21H) definido para o número de registros no arquivo, arredondado para cima, se necessário, para o próximo registro completo
Se a função não for bem-sucedida e nenhum arquivo correspondente for encontrado
AL = FFH
Comentários:
Esta função procura um arquivo correspondente no diretório atual; se um for encontrado, atualiza o FCB com o tamanho do arquivo em termos de número de registros. Não há tamanho de registro padrão para esta função, portanto, um valor apropriado deve ser colocado no campo de tamanho de registro do FCB (deslocamento 0EH) antes de chamar esta função.
INT 21H (0x21)
Função 24H (0x24 ou 36) --> Definir número de registro relativo
Ligue com: AH = 24H
DS: DX = segmento: deslocamento do aberto anteriormente
bloco de controle de arquivo
Retorna: AL é destruído (outro registro não afetado)
Campo de registro relativo FCB (deslocamento 21H) atualizado
Comentários:
Esta função define o campo de número de registro relativo de um bloco de controle de arquivo (FCB) para corresponder à posição atual do arquivo, conforme registrado no FCB aberto.
INT 21H (0x21)
Função 25H (0x25 ou 37) --> Definir vetor de interrupção
Chamada com: AH = 25H
AL = número de interrupção
DS: DX = segmento: deslocamento do tratamento de interrupção
rotina
Retorna: Nada
Comentários:
Esta função Inicializa um vetor de interrupção da CPU para apontar para uma rotina de tratamento de interrupção. Ela deve ser usada preferencialmente para edição direta da tabela de vetores de interrupção por aplicativos bem comportados.
INT 21H (0x21)
Função 26H (0x26 ou 38) --> Criar novo prefixo de segmento de programa (PSP)
Chamada com: AH = 26H
DX = segmento: do novo segmento do programa
prefixo (PSP)
Retorna: Nada
Comentários:
Esta função copia o prefixo de segmento de programa (PSP) do programa em execução no momento para um endereço de segmento especificado na memória livre e, em seguida, atualiza o novo PSP para torná-lo utilizável por outro programa.
INT 21H (0x21)
Função 27H (0x27 ou 39) --> Leitura de bloco aleatório
Chamada com: AH = 27H
CX = número de registros a serem lidos
DS: DX = segmento: deslocamento do aberto anteriormente
bloco de controle de arquivo
Retorna: AL = 00H se todos os registros solicitados forem lidos
01H se fim do arquivo
02H se segmento quebrar
03H se registro parcial lido no final de
arquivo
CX = número real de registros lidos
Comentários:
Esta função lê um ou mais registros sequenciais de um arquivo para a memória, começando em um local de arquivo designado. Se o tamanho e o local do buffer forem tais que um estouro de segmento ou wraparound ocorreria, a função falha com um código de retorno de 02H e se um registro parcial for lido no final do arquivo, o restante do registro é preenchido com zeros.
INT 21H (0x21)
Função 28H (0x28 ou 40) --> Escrita de bloco aleatório
Chamada com: AH = 28H
CX = número de registros a serem gravados
DS: DX = segmento: deslocamento do aberto anteriormente
bloco de controle de arquivo
Retorna: AL = 00H se todos os registros solicitados forem gravados
01H se disco cheio
02H se segmento quebrar
CX = número real de registros gravados
Comentários:
Esta função grava um ou mais registros sequenciais da memória para um arquivo, começando em um local de arquivo designado. Se o tamanho e o local do buffer forem tais que um estouro de segmento ou wraparound ocorreria, a função falha com um código de retorno 02H.
INT 21H (0x21)
Função 29H (0x29 ou 41) --> Analisar nome de arquivo
Chamada com: AH = 29H
AL = sinalizadores para controlar a análise
Bit 0 = 1, se os separadores iniciais forem
escaneado (ignorado).
= 0, se os separadores iniciais não forem
escaneado
Bit 1 = 1, se o byte de ID da unidade no FCB for
modificado somente se uma unidade foi
especificado na string que está sendo analisada.
= 0, se o byte de ID da unidade no FCB for
modificado independentemente, se nenhuma unidade
o especificador está presente na string analisada, o campo de código de unidade FCB é definido como 0 (padrão)
Bit 2 = 1, se o campo de nome de arquivo no FCB for
modificado somente se um nome de arquivo for
especificado na string que está sendo analisada.
= 0, se o campo de nome de arquivo no FCB for modificado independentemente, se nenhum nome de arquivo estiver apresentando a string analisada, o nome de arquivo do FCB será definido como espaços ASCIIZ.
Bit 3 = 1, se o campo de extensão no FCB for
modificado, somente se uma extensão for
especificado na string que está sendo analisada.
= 0, se o campo de extensão no FCB for
modificado independentemente, se nenhuma extensão
está presente na string analisada, FCB
a extensão está definida para espaços em branco ASCIIZ
DS: SI = segmento: deslocamento da string
ES: DI = segmento: deslocamento do bloco de controle de arquivo
Retorna: AL = 00H, se não houver caracteres curinga
Encontrado 01H, se string analisada
continha caracteres curinga FFH,
se o especificador de unidade for inválido
DS: SI = segmento: deslocamento do primeiro caractere
depois do nome do arquivo analisado
ES: DI = segmento: deslocamento do formatado
bloco de controle de arquivo não aberto
Comentários:
Esta função analisa uma sequência de texto nos vários campos de um bloco de controle de arquivo (FCB).
Esta função considera os caracteres (: . ; , = + tab space ) como caracteres separadores e considera todos os caracteres de controle e caracteres (: . ; , = + tab space < > | / “ [ ]) como caracteres terminadores.
INT 21H (0x21)
Função 2AH (0x2A ou 42) --> Obter dia e data
Chamada com: AH = 2AH
Retornos: CX = ano (1980 a 2099)
DH = mês (1 a 12)
DL = dia (1 a 31)
AL = dia da semana (0 = domingo,
1= Segunda-feira, etc.)
Comentários:
Esta função obtém o dia do mês, dia da semana, mês e ano do sistema.
INT 21H (0x21)
Função 2BH (0x2B ou 43) --> Definir data
Chamada com: AH = 2BH
CX = ano (1980 a 2099)
DH = mês (1 a 12)
DL = dia (1 a 31)
Retorna: AL = 00H se a data for definida com sucesso
FFH se a data não for válida (ignorado)
Comentários:
Esta função inicializa o driver do relógio do sistema para uma data específica, mas a hora do sistema permanece inalterada.
INT 21H (0x21)
Função 2CH (0x2C ou 44) --> Obter hora
Chamada com: AH = 2CH
Retorna: CH = horas (0 a 23)
CL = minutos (0 a 59)
DH = segundos (0 a 59)
DL = centésimos de segundos (0 a 99)
Comentários:
Isso é usado para obter a hora do dia do driver do relógio em tempo real do sistema, convertida em horas, minutos, segundos e centésimos de segundos.
INT 21H (0x21)
Função 2DH (0x2D ou 45) --> Definir hora
Chamada com: AH = 2DH
CH = horas (0 a 23)
CL = minutos (0 a 59)
DH = segundos (0 a 59)
DL = centésimos de segundos (0 a 99)
Retorna: AL = 00H, se o tempo for definido com sucesso
FFH, se o tempo não for válido (ignorado)
Comentários:
Esta função inicializa o relógio de tempo real do sistema para uma hora, minuto, segundo e centésimo de segundo especificados. A data do sistema não é afetada.
INT 21H (0x21)
Função 2EH (0x2E ou 46) --> Definir sinalizador de verificação
Chamada com: AH = 2EH
AL = 00H, se desligar o sinalizador de verificação
01H, se estiver ativando o sinalizador de verificação
DL = 00H
Retorna: Nada
Comentários:
Esta função desliga ou liga o sinalizador do sistema operacional para verificação automática de leitura após gravação de dados. A configuração padrão do sinalizador de verificação é OFF porque a verificação de leitura após gravação torna as operações de disco mais lentas.
INT 21H (0x21)
Função 2FH (0x2F ou 47) --> Obter endereço DTA
Chamada com: AH = 2FH
Retorna:ES: BX = segmento: deslocamento da área de transferência do disco
Comentários:
Esta função obtém o endereço atual da área de transferência de disco (DTA) para operações de leitura/gravação de arquivos FCB.
INT 21H (0x21)
Função 30H (0x30 ou 48) --> Obter número da versão do MS-DOS
Chamada com: AH = 30H
AL = 00H
Retorna: AL = número da versão principal (MS-DOS 3.10=3, etc.)
AH = número da versão secundária (MS-DOS 3.10= 0AH, etc.)
BH = Fabricante do Equipamento Original
(OEM's) número de série (OEM-dependente - geralmente 00H para IBM's
PC-DOS, 0FFH ou outros valores para MS-DOS)
BL: CX = número de série do usuário de 24 bits (opcional, dependente do OEM)
Comentários:
Ele retorna o número da versão do sistema operacional MS-DOS do host.
INT 21H (0x21)
Função 31H (0x31 ou 49) --> Terminar e Permanecer Residente (TSR)
Chamada com: AH = 31H
AL = código de retorno
DX = quantidade de memória em parágrafos, para reservar
Não retorna nada
Comentários:
Esta função encerra a execução do programa em execução no momento passando um código de retorno para o processo pai, mas reserva parte ou toda a memória do programa para que ele seja sobreposto pelo próximo programa transiente a ser carregado. Esta função deve ser usada preferencialmente em vez de INT 27H porque ela suporta CS para conter o segmento do prefixo do segmento do programa.
INT 21H (0x21)
Função 32H (0x32 ou 50) --> Reservado
INT 21H (0x21)
Função 33H (0x33 ou 51) --> Obter ou definir sinalizador de interrupção, obter unidade de inicialização
Ligue com: Se receber uma bandeira de interrupção
AH = 33H
AL = 00H
Se definir o sinalizador de interrupção
AH = 33H
AL = 01H
DL = 00H se o sinalizador de interrupção estiver DESLIGADO
01H se a bandeira de interrupção estiver LIGADA
Se estiver obtendo a unidade de inicialização
AH = 33H
AL = 05H
Retorna: Se chamado com AL = 00H ou 01H
DL = 00H sinalizador de interrupção está DESLIGADO
A bandeira de interrupção 01H está LIGADA
Se chamado com AL = 05H
DL = unidade de inicialização (1 = A, 2 = B, etc.)
Comentários:
Esta função obtém ou altera o status do sinalizador de interrupção do sistema operacional, o que influencia a verificação Ctrl-C durante chamadas de função.
INT 21H (0x21)
Função 34H (0x34 ou 52) --> Reservado
INT 21H (0x21)
Função 35H (0x35 ou 53) --> Obter vetor de interrupção
Chamada com: AH = 35H
AL = número de interrupção
Retorna: ES: BX = segmento: deslocamento do manipulador de interrupção
Comentários:
Esta função obtém o endereço da rotina de tratamento de interrupção atual para a interrupção da máquina especificada.
INT 21H (0x21)
Função 36H (0x36 ou 54) --> Obter informações de alocação de unidade
Chamada com: AH = 36H
DL = código de unidade (0 padrão, 1 = A, etc.)
Retorna: Se a função for bem-sucedida
AX = setor por cluster
BX = número de clusters disponíveis
CX = bytes por setor
DX = cluster por unidade
Se a função não for bem-sucedida (unidade inválida)
AX = FFFFH
Comentários:
Esta função obtém informações selecionadas sobre uma unidade de disco.
Esta função é muito importante na recuperação de dados e na programação de solução de problemas de disco, a partir da qual é possível calcular a capacidade da unidade, o espaço livre restante e muitas outras coisas importantes.
INT 21H (0x21)
Função 37H (0x37 ou 55) --> Reservado
INT 21H (0x21)
Função 38H (0x38 ou 56) --> Obter ou definir informações do país
Ligue para: Se estiver obtendo informações sobre o país
AH = 38H
AL = 0, para obter informações atuais do país
1-FEH, para obter informações para
países com código <255
FFH, para obter informações sobre países
com código >=255
BX = código do país, se AL = FFH
DS:DX = segmento: deslocamento do buffer para informações retornadas
Se estiver definindo o código do país atual
AH = 38H
AL = 1-FEH, código de país para países com código <255
FFH, para países com código >=255
BX = código do país, se AL = 0FFH
DX = FFFFH
Retornos:
Se a função for bem-sucedida
Bandeira de transporte = limpar
E, se estiver obtendo informações sobre internacionalização
BX = código do país
DS: DX = segmento: deslocamento do buffer que contém informações de internacionalização.
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função obtém informações internacionais para o país atual ou especificado ou define o código do país atual.
INT 21H (0x21)
Função 39H (0x39 ou 57) --> Criar diretório
Chamada com: AH = 39H
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função cria um diretório usando a unidade e o caminho especificados.
ASCIIZ é conhecido como a sequência de caracteres ASCII terminados em Nulo ou Zero, Byte. |
INT 21H (0x21)
Função 3AH (0x3A ou 58) --> Excluir diretório
Ligue com: AH = 3AH
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função remove um diretório usando a unidade e o caminho especificados. Se qualquer elemento do nome do caminho não existir ou o diretório não estiver vazio ou o acesso for negado ou o diretório especificado também for o diretório atual, a função de exclusão do diretório falhará.
INT 21H (0x21)
Função 3BH (0x3B ou 59) --> Definir diretório atual
Chamada com: AH = 3BH
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função define o diretório atual ou padrão usando a unidade e o caminho especificados. Se o caminho especificado ou qualquer elemento do caminho não existir, a função falhará.
INT 21H (0x21)
Função 3CH (0x3C ou 60) --> Criar arquivo
Chamada com: AH = 3CH
CX = atributo de arquivo, onde atributo
bits de significância podem ser combinados.
A significância dos bits é dada na tabela a seguir:
Bit(s) |
Significância (se definida) |
0 |
Somente leitura |
1 |
Escondido |
2 |
Sistema |
3 |
Etiqueta de volume |
4 |
Reservado (0) |
5 |
Arquivo |
6 – 15 |
Reservado (0) |
DS: DX = segmento: deslocamento de ASCIIZ
nome do caminho
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = alça
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Se um caminho ASCIIZ for fornecido, esta função cria um novo arquivo no diretório designado ou padrão na unidade de disco designada ou padrão. Se o arquivo especificado já existir, ele será truncado para comprimento zero. Em ambos os casos, o arquivo é aberto e um identificador é retornado que pode ser usado pelo programa para acesso subsequente ao arquivo.
Se algum elemento do caminho não existir ou o arquivo estiver sendo criado no diretório raiz e o diretório raiz estiver cheio ou o acesso for negado ou um arquivo com atributo somente leitura já estiver no diretório especificado, a função de criação de arquivo falhará.
INT 21H (0x21)
Função 3DH (0x3D ou 61) --> Abrir arquivo
Chamada com: AH = 3DH
AL = modo de acesso
A significância dos bits do modo de acesso é dada na tabela a seguir:
Pedaços |
Significado |
0 – 2 |
Modo de acesso
000 = acesso de leitura
001 = acesso de gravação
010 = acesso de leitura/gravação |
3 |
Reservado (0) |
4 – 6 |
Modo de compartilhamento
000 = modo de compatibilidade
001 = negar tudo
010 = negar gravação
011 = negar leitura
100 = negar nada |
7 |
Sinalizador de herança
0 = o processo filho herda o identificador
1 = o filho não herda o identificador |
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = alça
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Se um caminho ASCIIZ for fornecido, esta função abre o arquivo especificado no diretório designado ou padrão na unidade de disco designada ou padrão. Um handle é retornado, o qual pode ser usado pelo programa para acesso subsequente ao arquivo.
INT 21H (0x21)
Função 3EH (0x3E ou 62) --> Fechar arquivo
Chamada com: AH = 3EH
BX = alça
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função libera todos os buffers internos associados ao arquivo para o disco, fecha o arquivo e libera o handle para reutilização, de um handle previamente aberto ou criado com sucesso. Se o arquivo foi modificado, o carimbo de data e hora e o tamanho do arquivo são atualizados na entrada de diretório do arquivo.
INT 21H (0x21)
Função 3FH (0x3F ou 63) --> Ler arquivo ou dispositivo
Chamada com: AH = 3FH
BX = alça
CX = número de bytes a serem lidos
DS: DX = segmento: deslocamento do buffer
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = byte transferido
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função transfere dados na posição atual do ponteiro de arquivo do arquivo para o buffer e então atualiza a posição do ponteiro de arquivo para um determinado identificador de arquivo válido de uma operação de abertura ou criação anterior, um endereço de buffer e um comprimento em bytes.
INT 21H (0x21)
Função 40H (0x40 ou 64) --> Escrever arquivo ou dispositivo
Chamada com: AH = 40H
BX = alça
CX = número de bytes a serem escritos
DS: DX = segmento: deslocamento do buffer
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = byte transferido
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função transfere dados do buffer para o arquivo e então atualiza a posição do ponteiro do arquivo para um dado identificador de arquivo válido de uma operação de abertura ou criação anterior, um endereço de buffer e um comprimento em bytes. Se a função for chamada com CX = 0, o arquivo será truncado ou estendido para a posição atual do ponteiro do arquivo.
INT 21H (0x21)
Função 41H (0x41 ou 65) --> Excluir arquivo
Chamada com: AH = 41H
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função exclui um arquivo do disco e diretório padrão ou especificado. A função exclui um arquivo substituindo o primeiro caractere do seu nome de arquivo no diretório raiz pelo caractere E5H (0xE5) e tornando os clusters do arquivo disponíveis para os novos dados na tabela de alocação de arquivos. Até então, os dados reais armazenados nesses clusters não são substituídos.
INT 21H (0x21)
Função 42H (0x42 ou 66) --> Definir ponteiro de arquivo
Chamada com: AH = 42H
AL = código do método
Deslocamento absoluto 00H do início do arquivo
01H assinado offset do arquivo atual
ponteiro
02H assinado deslocado do final do arquivo
BX = alça
CX = metade mais significativa do deslocamento
DX = metade menos significativa do deslocamento
Retorna: se a função for bem-sucedida
Bandeira de transporte = limpar
DX = metade mais significativa do arquivo resultante
ponteiro
AX = metade menos significativa do arquivo resultante
ponteiro
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função define a localização do ponteiro do arquivo em relação ao início do arquivo, ao fim do arquivo ou à posição atual do arquivo.
INT 21H (0x21)
Função 43H (0x43 ou 67) --> Obter ou definir atributos de arquivo
Chamada com: AH = 43H
AL = 00H para obter atributos
01H para definir atributos
CX = atributo de arquivo, se AL=01H. Os bits podem ser combinados
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
CX = atributo de arquivo
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função obtém ou altera os atributos do arquivo (somente leitura, oculto, sistema ou arquivo) ou diretório. Para o significado de bits para diferentes atributos, consulte a tabela de significado de bits fornecida anteriormente.
INT 21H (0x21)
Função 44H (0x44 ou 68) --> Controle de entrada/saída (I/O Ctrl)
Esta função fornece um caminho direto de comunicação entre um programa aplicativo e um driver de dispositivo. Ela permite que um programa obtenha informações dependentes de hardware e solicite operações que não são suportadas por outras chamadas de função do MS-DOS.
As subfunções de controle de entrada e saída foram fornecidas na tabela a seguir:
Subfunção |
Nome da operação |
00H |
Obter informações do dispositivo |
01H |
Definir informações do dispositivo |
02H |
Receber dados de controle do driver do dispositivo de caractere |
03H |
Enviar dados de controle para o driver do dispositivo de caractere |
04H |
Receber dados de controle do driver do dispositivo de bloco |
05H |
Enviar dados de controle para bloquear o driver do dispositivo |
06H |
Verificar status de entrada |
07H |
Verificar status de saída |
08H |
Verifique se o dispositivo de bloqueio é removível |
09H |
Verifique se o dispositivo de bloco é remoto |
0AH (10) |
Verifique se a alça é remota |
0BH (11) |
Alterar contagem de tentativas de compartilhamento |
0CH (12)
|
Controle de E/S genérico para dispositivos de caracteres
Valor |
Descrição |
CL = 45H |
Definir contagem de iterações |
CL = 4AH |
Selecione a página de código |
CL = 4CH |
Iniciar preparação da página de código |
CL = 4DH |
Preparação da página de código final |
CL = 5FH |
Definir informações de exibição |
CL = 65H |
Obter contagem de iterações |
CL = 6AH |
Consultar página de código selecionada |
CL = 6BH |
Lista de preparação de consulta |
CL = 7FH |
Obter informações de exibição |
|
0DH (13)
|
Controle de E/S genérico para dispositivos de bloco
Valor |
Descrição |
CL = 40H |
Definir parâmetros do dispositivo |
CL = 41H |
Escrever trilha |
CL = 42H |
Formatar e verificar faixa |
CL = 47H |
Definir sinalizador de acesso |
CL = 60H |
Obter parâmetros do dispositivo |
CL = 61H |
Ler faixa |
CL = 62H |
Verificar trilha |
CL = 67H |
Obter acesso à bandeira |
|
0EH (14) |
Obter mapa de unidade lógica |
0FH (15) |
Definir mapa de unidade lógica |
INT 21H (0x21)
Função 44H (0x44 ou 68), subfunção 00H (0x00) I/O Ctrl --> obter informações do dispositivo
Chamada com: AH = 44H
AL = 00H
BX = alça
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
DX = palavra de informação do dispositivo
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção retorna uma palavra de informação do dispositivo para o arquivo ou dispositivo associado ao identificador especificado.
INT 21H (0x21)
Função 44H (0x44 ou 68), subfunção 01H (0x01) Ctrl E/S --> definir informações do dispositivo
Chamada com: AH = 44H
AL = 01H
BX = alça
DX = palavra de informação do dispositivo
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção da função 44H da INT 21H, define certos sinalizadores para um handle associado a um dispositivo de caractere. Esta subfunção não pode ser usada para um handle que esteja associado a um arquivo.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 02H (0x02) Ctrl de E/S --> ler dados de controle driver de dispositivo de caractere
Chamada com: AH = 44H
AL = 02H
BX = alça
CX = número de bytes a serem lidos
DS: DX = segmento: deslocamento do buffer
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = bytes lidos
E o buffer contém dados de controle do driver
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Ele lê dados de controle de um driver de dispositivo de caractere. O comprimento e o conteúdo dos dados são especificados para cada driver de dispositivo e não seguem nenhum formato padrão. Esta função não resulta necessariamente em nenhuma entrada do dispositivo físico.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 03H (0x03) Ctrl de E/S --> escreve dados de controle driver de dispositivo de caractere
Chamada com: AH = 44H
AL = 03H
BX = alça
CX = número de bytes a serem escritos
DS: DX = segmento: deslocamento de dados
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = bytes transferidos
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção transfere dados de controle de um aplicativo para um driver de dispositivo de caractere. O comprimento e o conteúdo dos dados são específicos para cada driver de dispositivo e não seguem nenhum formato padrão. Esta função não resulta necessariamente em nenhuma saída para o dispositivo físico.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 04H (0x04) Ctrl E/S --> Ler bloco de dados de controle-driver de dispositivo
Chamada com: AH = 44H
AL = 04H
BL = código do dispositivo (0= padrão, 1=A, 2=B, etc.)
CX = número de bytes a serem lidos
DS: DX = segmento: deslocamento do buffer
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = bytes transferidos
E o buffer contém dados de controle do driver do dispositivo
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção transfere dados de controle de um driver de dispositivo de bloco diretamente para o buffer de um programa de aplicativo. O comprimento e o conteúdo dos dados são específicos para cada driver de dispositivo e não seguem nenhum formato padrão. Esta função não resulta necessariamente em entrada do dispositivo físico.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 05H (0x05) Ctrl de E/S --> escreve driver de dispositivo de bloco de dados de controle
Chamada com: AH = 44H
AL = 05H
BL = código do dispositivo (0= padrão, 1=A, 2=B, etc.)
CX = número de bytes a serem escritos
DS: DX = segmento: deslocamento de dados
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = bytes transferidos
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção transfere dados de controle de um programa de aplicação diretamente para um driver de dispositivo de bloco. O comprimento e o conteúdo dos dados de controle são específicos para cada driver de dispositivo e não seguem nenhum formato padrão. Esta função não resulta necessariamente em nenhuma saída para o dispositivo físico.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 06H (0x06) Ctrl E/S --> verificar status de entrada
Chamada com: AH = 44H
AL = 06H
BX = alça
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
E para um dispositivo:
AL = 00H, se o dispositivo não estiver pronto
FFH, se o dispositivo estiver pronto
Para um arquivo:
AL = 00H, se o ponteiro do arquivo estiver no EOF
FFH, se o ponteiro do arquivo não estiver no EOF
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Ele retorna um código que indica se o dispositivo ou os arquivos associados a um identificador estão prontos para entrada.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 07H (0x07) Ctrl E/S --> verificar status de saída
Chamada com: AH = 44H
AL = 07H
BX = alça
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
E para um dispositivo:
AL = 00H, se o dispositivo não estiver pronto
FFH, se o dispositivo estiver pronto
Para um arquivo:
AL = FFH
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Ele retorna um código que indica se o dispositivo associado a um identificador está pronto para saída.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 08H (0x08) Ctrl E/S --> verificar se o dispositivo de bloco é removível
Chamada com: AH = 44H
AL = 08H
BL = número da unidade (0 = padrão, 1=A, 2=B, etc.)
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AL = 00H, se o meio for removível
01H, se o meio não for removível
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção verifica se o dispositivo de bloco especificado contém uma mídia de armazenamento removível, como um disquete. Se um arquivo não for encontrado como esperado em uma unidade específica, um programa pode usar esta subfunção para determinar se o usuário deve ser solicitado a inserir outro disco.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 09H (0x09) Ctrl E/S --> verificar se o dispositivo de bloco é remoto
Chamada com: AH = 44H
AL = 09H
BL = número da unidade (0 = padrão, 1=A, 2=B, etc.)
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
DX = palavra de atributo do dispositivo
bit 12 = 0, se a unidade for local
= 1, se a unidade for remota
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção verifica se o dispositivo de bloco especificado é local (conectado ao computador que executa o programa) ou remoto (redirecionado para um servidor de rede).
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0AH (0x0A ou 10) Ctrl E/S --> verificar se o identificador é remoto
Chamada com: AH = 44H
AL = 0AH
BX = alça
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
DX = palavra de atributo para arquivo ou dispositivo
bit 15 = 0 se local
1 se remoto
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Ele verifica se o identificador especificado se refere a um arquivo ou dispositivo local (localizado no PC que está executando o programa) ou remoto (localizado em um servidor de rede).
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0BH (0x0B ou 11) Ctrl E/S --> altera contagem de tentativas de compartilhamento
Chamada com: AH = 44H
AL = 0BH
CX = atrasos por nova tentativa (padrão = 1)
DX = número de tentativas (padrão = 3)
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção define o número de vezes que o MS-DOS tenta novamente uma operação de disco após uma falha causada por uma violação de compartilhamento de arquivo antes de retornar um erro ao processo solicitante. Esta subfunção não está disponível a menos que o módulo de compartilhamento de arquivo seja carregado.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0CH (0x0C ou 12) Ctrl E/S controle de E/S genérico para dispositivos de caracteres
Chamada com: AH = 44H
AL = 0CH
BX = alça
CH = código da categoria (principal):
00H = desconhecido
01H = COM1, COM2, COM3, OU COM4
03H = CON (teclado e display)
05H = LPT1, LPT2, OU LPT3
CL = código de função (menor):
45H = Definir contagem de iterações
4AH = Selecionar página de código
4CH = Iniciar preparação da página de código
4DH = Preparação da página de código final
5FH = Definir informações de exibição
65H = Obter contagem de iterações
6AH = Consultar página de código selecionada
6BH = Lista de preparação de consulta
7FH = Obter informações de exibição
DS: DX = segmento: deslocamento do bloco de parâmetros
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
E se for chamado com CL = 65H, 6AH, 6BH ou 7FH
DS: DX = segmento: deslocamento do bloco de parâmetros
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Ele fornece um mecanismo de uso geral para comunicação entre programas de aplicativos e drivers de dispositivos de caracteres.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0DH (0x0D ou 13) Ctrl E/S --> controle de E/S genérico para dispositivos de bloco
Chamada com: AH = 44H
AL = 0DH
BL = código de unidade (0 = padrão, 1 = A, 2 = B, etc.)
CH = código da categoria (principal):
08H = unidade de disco
CL = código de função (menor):
40H = Definir parâmetros de acionamento
41H = Gravar trilha
42H = Formatar e verificar trilha
47H = Definir sinalizador de acesso
60H = Obter parâmetros do dispositivo
61H = Ler trilha
62H = Verificar trilha
67H = Obter sinalizador de acesso
DS: DX = segmento: deslocamento do bloco de parâmetros
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
E se for chamado com CL = 60H ou 61H
DS: DX = segmento: deslocamento do bloco de parâmetros
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção fornece um mecanismo de propósito geral para comunicação entre programas de aplicação e drivers de dispositivos de bloco. Permite que um programa inspecione ou altere parâmetros de dispositivo para uma unidade lógica e leia, grave, formate e verifique trilhas de disco de forma independente de hardware.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0EH (0x0E ou 14) Ctrl E/S -->> obter mapa de unidade lógica
Chamada com: AH = 44H
AL = 0EH
BL = código de unidade (0 = padrão, 1=A, 2=B, etc.)
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AL = código de mapeamento
00H, se apenas um código de unidade lógica
atribuído ao dispositivo de bloco
Código de unidade lógica 01H-1AH (1=A,
2=B, etc.) mapeado para o dispositivo de bloco
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Ele retorna o código da unidade lógica que foi usado mais recentemente para acessar a unidade de bloco especificada.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0FH (0x0F ou 15) Ctrl E/S --> definir mapa de unidade lógica
Chamada com: AH = 44H
AL = 0FH
BL = código de unidade (0 = padrão, 1=A, 2=B, etc.)
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AL = código de mapeamento
00H, se apenas um código de unidade lógica
atribuído ao dispositivo de bloco
01H-1AH, código de unidade lógica (1=A,
2=B, etc.) mapeado para o
dispositivo de bloco
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção define o próximo código de unidade lógica que será usado para referenciar um dispositivo de bloco.
INT 21H (0x21)
Função 45H (0x45 ou 69) --> Duplicar identificador
Chamada com: AH = 45H
BX = identificador a ser duplicado
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = novo identificador
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função retorna um novo identificador que se refere ao mesmo dispositivo ou arquivo na mesma posição para o identificador fornecido para um dispositivo ou arquivo aberto no momento.
INT 21H (0x21)
Função 46H (0x46 ou 70) --> Alça de redirecionamento
Chamada com: AH = 46H
BX = identificador para arquivo ou dispositivo
CX = identificador a ser redirecionado
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Se houver dois handles fornecidos, esta função faz o segundo handle se referir ao mesmo dispositivo ou arquivo no mesmo local que o primeiro handle. O segundo handle é então dito redirecionado.
INT 21H (0x21)
Função 47H (0x47 ou 71) --> Obter diretório atual
Chamada com: AH = 47H
DL = código de unidade (0 = padrão, 1 = A,
2=B, etc.)
DS: SI = segmento: deslocamento do buffer de 64 bytes
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
E o buffer é preenchido com o caminho completo da raiz do diretório atual.
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função obtém uma string ASCIIZ que descreve o caminho da raiz até o diretório atual e o nome desse diretório.
INT 21H (0x21)
Função 48H (0x48 ou 72) --> Alocar bloco de memória
Chamada com: AH = 48H
BX = número de parágrafos de memória
necessário
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Ax = endereço do segmento base alocado
bloquear
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
BX = tamanho do maior bloco disponível
(parágrafos)
Comentários:
Ele aloca um bloco de memória e retorna um ponteiro para o início da área alocada.
INT 21H (0x21)
Função 49H (0x49 ou 73) --> Liberar bloco de memória
Chamada com: AH = 49H
ES = segmento do bloco a ser liberado
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função é usada para liberar um bloco de memória e torná-lo disponível para uso por outros programas. A função falhará ou poderá causar erros de sistema imprevisíveis se o programa liberar um bloco de memória que não lhe pertence ou se o endereço de segmento passado no registrador ES não for um endereço base válido para um bloco de memória existente.
INT 21H (0x21)
Função 4AH (0x4A ou 74) --> Redimensionar bloco de memória
Ligue com: AH = 4AH
BX = tamanho de bloco desejado em parágrafos
ES = segmento do bloco a ser modificado
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
BX = tamanho máximo de bloco disponível
(parágrafos)
Comentários:
Esta função reduz ou expande dinamicamente um bloco de memória, de acordo com as necessidades de um programa aplicativo.
INT 21H (0x21)
Função 4BH (0x4B ou 75) --> Executar programa (EXEC)
Chamada com: AH = 4BH
AL = subfunção
00H = Carregar e executar programa
03H = Sobreposição de carga
ES: BX = segmento: deslocamento do bloco de parâmetros
DS: DX = segmento: deslocamento do programa ASCIIZ
nome do caminho
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Os registros são preservados da maneira usual.
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função permite que um programa aplicativo execute outro programa, retomando o controle quando ele é concluído. Também pode ser usada para carregar sobreposições, embora esse uso seja incomum.
INT 21H (0x21)
Função 4CH (0x4C ou 76) --> Terminar processo com código de retorno
Chamada com: AH = 4CH
AL = código de retorno
Retorna: Nada
Comentários:
Esta função encerra o processo atual, passando um código de retorno para o processo pai. Este é um dos vários métodos que um programa pode usar para executar uma saída final.
INT 21H (0x21)
Função 4DH (0x4D ou 77) --> Obter código de retorno
Chamada com: AH = 4DH
Retorna: AH = tipo de saída
00H, se término normal por INT 20H,
Função INT 21H 00H ou Funções INT 21H 4CH
01H se término pela entrada do usuário de Ctrl-C
02H se término pelo manipulador de erro crítico
03H se término por Função INT21H 31H ou
INT 27H |
AL = código de retorno passado pelo processo filho
(0 se a criança for encerrada pelo INT 20H,
INT 21H Função 00H, ou INT 27H)
Comentários:
Esta função é usada por um processo pai, após a execução bem-sucedida de uma chamada EXEC (INT 21H Função 4BH), para obter o código de retorno e o tipo de término de um processo filho.
INT 21H (0x21)
Função 4EH (0x4E ou 78) --> Localizar o primeiro arquivo
Chamada com: AH = 4EH
CX = atributo de pesquisa (os bits podem ser combinados)
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida e o arquivo correspondente for encontrado
Bandeira de transporte = limpar
E os resultados da pesquisa retornaram na área de transferência de disco atual da seguinte forma:
Mudanças) |
Descrição |
00H-14H |
Reservado (0) |
15H |
Atributo do arquivo ou diretório correspondente |
16H-17H |
Bits de tempo de arquivo
00H-04H = incrementos de 2 segundos (0-29)
bits 05H-0AH = minutos (0-59)
bits 0BH-0FH = horas (0-23) |
18H-19H
|
Bits de data do arquivo
00H-04H = dia (1-31)
bits 05H-08H = mês (1-12)
bits 09H-0FH = ano (relativo a 1980) |
1AH-1DH |
Tamanho do arquivo |
1EH-2AH |
Nome do arquivo ASCIIZ e extensão |
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função pesquisa o diretório padrão ou especificado na unidade padrão ou especificada para o primeiro arquivo correspondente para uma especificação de arquivo dada na forma de uma string ASCIIZ. Para significância de bits de atributos, consulte a tabela de significância de bits fornecida anteriormente.
INT 21H (0x21)
Função 4FH (0x4F ou 79) --> Localizar próximo arquivo
Chamada com: AH = 4FH
Retorna: Se a função for bem-sucedida e o arquivo correspondente for encontrado
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Se houver uma chamada bem-sucedida anterior para a função INT 21H 4EH, esta função encontrará o próximo arquivo no diretório padrão ou especificado na unidade padrão ou especificada que corresponda à especificação do arquivo original.
INT 21H (0x21)
Função 50H (0x50 ou 80) --> Reservado
INT 21H (0x21)
Função 51H (0x51 ou 81) --> Reservado
INT 21H (0x21)
Função 52H (0x52 ou 82) --> Reservado
INT 21H (0x21)
Função 53H (0x53 ou 83) --> Reservado
INT 21H (0x21)
Função 54H (0x54 ou 84) --> Obter sinalizador de verificação
Chamada com: AH = 54H
Retorna: AL = valor do sinalizador de verificação atual
00H se verificar desligado
01H se verificar em
Comentários:
Esta função obtém o valor atual do sinalizador de verificação do sistema (leitura após gravação).
INT 21H (0x21)
Função 55H (0x55 ou 85) --> Reservado
INT 21H (0x21)
Função 56H (0x56 ou 86) --> Renomear arquivo
Chamada com: AH = 56H
DS: DX = segmento: deslocamento do ASCIIZ atual
nome do caminho
ES: DI = segmento: deslocamento do novo ASCIIZ
nome do caminho
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função Renomeia um arquivo e/ou move sua entrada de diretório para um diferente no mesmo disco. Nas versões 3.0 e posteriores do MS-DOS, esta função também pode ser usada para renomear diretórios
Se algum elemento do caminho não existir ou um arquivo com o novo caminho já existir ou a especificação do caminho atual contiver uma unidade de disco diferente do novo caminho ou o arquivo estiver sendo movido para o diretório raiz e o diretório raiz estiver cheio ou o usuário não tiver direitos suficientes, a função para renomear arquivos falhará.
INT 21H (0x21)
Função 57H (0x57 ou 87) --> Obter ou definir data e hora do arquivo
Ligue com: Se estiver obtendo data e hora
AH = 57H
AL = 00H
BX = alça
Se definir data e hora
AH = 57H
AL = 01H
BX = alça
CX = tempo
bits 00H-04H = incrementos de 2 segundos (0-29)
bits 05H-0AH = minutos (0-59)
bits 0BH-0FH = horas (0-23)
DX = data
bits 00H-04H = dia (1-31)
bits 05H-08H = mês (1-12)
bits 09H-0FH = ano (relativo a 1980)
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
e, se chamado com AL = 00H
CX = tempo
DX = data
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função obtém ou modifica o registro de data e hora na entrada do diretório raiz do arquivo.
INT 21H (0x21)
Função 58H (0x58 ou 88) --> Obter ou definir estratégia de alocação
Ligue com: Se estiver recebendo código de estratégia
AH = 58H
AL = 00H
Se definir o código de estratégia
AH = 58H
AL = 01H
BX = código de estratégia desejado
00H = primeiro ajuste
01H = melhor ajuste
02H = último ajuste
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
e, se chamado com AL = 00H
AX = código de estratégia atual
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Obtém ou altera o código que indica a estratégia atual do MS-DOS para alocação de blocos de memória. A estratégia padrão de alocação de memória do MS-DOS é First Fit (código 0).
Na alocação de memória First Fit, o MS-DOS pesquisa os blocos de memória disponíveis do endereço baixo para o endereço alto, atribuindo o primeiro grande o suficiente para satisfazer a solicitação de alocação de bloco.
No caso da estratégia de alocação de melhor ajuste, o MS-DOS pesquisa todos os blocos de memória disponíveis e atribui o menor bloco disponível que atenderá à solicitação, independentemente de sua posição.
Na estratégia de alocação de memória Last fit, o MS-DOS pesquisa os blocos de memória disponíveis de endereços altos para endereços baixos, atribuindo o maior deles, grande o suficiente para satisfazer a solicitação de alocação de bloco.
INT 21H (0x21)
Função 59H (0x59 ou 89) --> Obter informações de erro estendidas
Chamada com: AH = 59H
BX = 00H
Retorna: AX = código de erro estendido
A tabela de códigos de erro é fornecida abaixo:
Código de erro |
Erro |
01H |
número de função inválido |
02H |
arquivo não encontrado |
03H |
caminho não encontrado |
04H |
muitos arquivos abertos |
05H |
Acesso negado |
06H |
identificador inválido |
07H |
blocos de controle de memória destruídos |
08H |
memória insuficiente |
09H |
endereço de bloco de memória inválido |
0AH (10) |
ambiente inválido |
0BH (11) |
formato inválido |
0CH (12) |
código de acesso inválido |
0DH (13) |
dados inválidos |
0EH (14) |
unidade desconhecida |
0FH (15) |
unidade de disco inválida |
10H (16) |
tentou remover o diretório atual |
11H (17) |
não é o mesmo dispositivo |
12H (18) |
sem mais arquivos |
13H (19) |
disco protegido contra gravação |
14H (20) |
unidade desconhecida |
15H (21) |
dirigir não está pronto |
16H (22) |
comando desconhecido |
17H (23) |
erro de dados (CRC) |
18H (24) |
comprimento da estrutura de solicitação incorreta |
19H (25) |
procurar erro |
1AH (26) |
tipo de mídia desconhecido |
1BH (27) |
setor não encontrado |
1CH (28) |
impressora sem papel |
1DH (29) |
falha de gravação |
1EH (30) |
falha de leitura |
1FH (31) |
falha geral |
20H (32) |
violação de compartilhamento |
21H (33) |
violação de bloqueio |
22H (34) |
alteração de disco inválida |
23H (35) |
FCB indisponível |
24H (36) |
buffer de compartilhamento excedido |
25H-31H |
reservado |
32H (50) |
solicitação de rede não suportada |
33H (51) |
máquina remota não escuta |
34H (52) |
nome duplicado na rede |
35H (53) |
nome da rede não encontrado |
36H (54) |
rede ocupada |
37H (55) |
o dispositivo não existe mais na rede |
38H (56) |
limite de comando net BIOS excedido |
39H (57) |
erro no hardware do adaptador de rede |
3 AH (58) |
resposta incorreta da rede |
3BH (59) |
erro de rede inesperado |
3 canais (60) |
adaptador remoto incompatível |
3DH (61) |
fila de impressão cheia |
3EH (62) |
espaço insuficiente para arquivo de impressão |
3FH (63) |
arquivo de impressão cancelado |
40H (64) |
nome da rede excluído |
41H (65) |
acesso à rede negado |
42H (66) |
tipo de dispositivo de rede incorreto |
43H (67) |
nome da rede não encontrado |
44H (68) |
limite de nome de rede excedido |
45H (69) |
limite de sessão do BIOS líquido excedido |
46H (70) |
compartilhamento de arquivos pausado temporariamente |
47H (71) |
solicitação de rede não aceita |
48H (72) |
impressão ou redirecionamento de disco pausado |
49H-4FH |
reservado |
50H (80) |
arquivo já existe |
51H (81) |
reservado |
52H (82) |
não é possível criar diretório |
53H (83) |
falha no INT 24H (erro crítico) |
54H (84) |
muitos redirecionamentos |
55H (85) |
redirecionamento duplicado |
56H (86) |
senha inválida |
57H (87) |
parâmetro inválido |
58H (88) |
falha do dispositivo de rede |
59H (89) |
função não suportada pela rede |
5 AH (90) |
componente de sistema necessário não instalado |
BH = classe de erro
01H |
se estiver sem recursos (como armazenamento ou alças) |
02H |
se não for um erro, mas uma situação temporária (como uma região bloqueada no arquivo) que pode acabar |
03H |
se problema de autorização |
04H |
se erro interno no software do sistema |
05H |
se falha de hardware |
06H |
se a falha do software do sistema não for culpa do processo ativo (como arquivos de configuração ausentes) |
07H |
se erro do programa de aplicação |
08H |
se arquivo ou item não encontrado |
09H |
se o arquivo ou item for de tipo ou formato inválido |
0AH (10) |
se arquivo ou item bloqueado |
0BH (11) |
se houver disco errado na unidade, local ruim no disco ou problema no meio de armazenamento |
0CH (12) |
se o item já existir |
0DH (13) |
erro desconhecido |
BL = recomendar ação
01H |
Tente novamente um número razoável de vezes e, em seguida, peça ao usuário para selecionar abortar ou ignorar |
02H |
tente novamente um número razoável de vezes com atraso entre as tentativas e, em seguida, solicite ao usuário que selecione abortar ou ignorar |
03H |
obter informações corretas do usuário (geralmente causado por nome de arquivo incorreto ou especificação de dispositivo) |
04H |
abortar aplicação com limpeza (ou seja, encerrar o programa da maneira mais ordenada possível: liberando bloqueios, fechando arquivos, etc.) |
05H |
executar saída imediata sem limpeza |
06H |
ignorar erro |
07H |
tente novamente após a intervenção do usuário para remover a causa do erro |
CH = lugar geométrico do erro
01H desconhecido
Dispositivo de bloco 02H (disco ou emulador de disco)
Rede 03H
Dispositivo serial 04H
05H memória
ES: DI = rótulo de volume ASCIIZ do disco para
inserir, se AX = 0022H (alteração de disco inválida)
Comentários:
Esta função obtém informações detalhadas sobre o erro após uma chamada anterior da função INT 21H sem sucesso, incluindo a ação corretiva recomendada.
INT 21H (0x21)
Função 5AH (0x5A ou 90) --> Criar arquivo temporário
Chamada com: AH = 5AH
CX = atributo (os bits podem ser combinados)
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = alça
DS: DX = segmento: deslocamento do ASCIIZ completo
nome do caminho
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função cria um arquivo com um nome exclusivo, no diretório atual ou especificado na unidade de disco padrão ou especificada, e retorna um handle que pode ser usado pelo programa para acesso subsequente ao arquivo. O nome gerado para o arquivo também é retornado em um buffer especificado pelo programa.
Se algum elemento do caminho não existir ou o arquivo estiver sendo criado no diretório raiz e o diretório raiz estiver cheio, a função falhará.
INT 21H (0x21)
Função 5BH (0x5B ou 91) --> Criar novo arquivo
Chamada com: AH = 5BH
CX = atributo (os bits podem ser combinados)
DS: DX = segmento: deslocamento do caminho ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
AX = alça
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função cria um arquivo no diretório designado ou padrão na unidade designada ou padrão e retorna um identificador que pode ser usado pelo programa para acesso subsequente ao arquivo para um determinado caminho ASCIIZ.
Se um arquivo com o mesmo nome e caminho já existir ou qualquer elemento do caminho especificado não existir ou o arquivo estiver sendo criado no diretório raiz e o diretório raiz estiver cheio ou o usuário não tiver direitos de acesso suficientes, a função falhará.
INT 21H (0x21)
Função 5CH (0x5C ou 92) --> Bloquear ou desbloquear região do arquivo
Chamada com: AH = 5CH
AL = 00H se região de bloqueio
01H se desbloquear região
BX = alça
CX = deslocamento da parte alta da região
DX = deslocamento da parte inferior da região
SI = parte alta do comprimento da região
DI = parte inferior do comprimento da região
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função bloqueia ou desbloqueia a região especificada de um arquivo. Esta função não está disponível a menos que o módulo de compartilhamento de arquivos (como SHARE.EXE) seja carregado.
INT 21H (0x21)
Função 5DH (0x5D ou 93) --> Reservado
INT 21H (0x21)
Função 5EH (0x5E ou 94), subfunção 00H (0x00) --> Obter nome da máquina
Chamada com: AH = 5EH
AL = 00H
DS: DX = segmento: deslocamento do buffer a receber
corda
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
CH = 00H se nome não definido
<> 00H se nome definido
CL = número do nome netBIOS (se CH <> 0)
DX: DX = segmento: deslocamento do identificador (se CH <> 0)
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção retorna o endereço de uma string ASCIIZ identificando o computador local. Esta chamada de função só está disponível quando a Microsoft Network está em execução.
INT 21H (0x21)
Função 5EH (0x5E ou 94), subfunção 02H (0x02) --> Definir sequência de configuração da impressora
Chamada com: AH = 5EH
AL = 02H
BX = índice de lista de redirecionamento
CX = comprimento da sequência de configuração
DS: SI = segmento: deslocamento da string de configuração
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção especifica uma string a ser enviada na frente de todos os arquivos direcionados a uma impressora de rede específica, permitindo que usuários em diferentes nós de rede especifiquem modos de operação individualizados na mesma impressora.
INT 21H (0x21)
Função 5EH (0x5E ou 94), subfunção 03H (0x03) --> Obter string de configuração da impressora
Chamada com: AH = 5EH
AL = 03H
BX = índice de lista de redirecionamento
ES: DI = segmento: deslocamento do buffer a receber
sequência de configuração
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
CX = comprimento da string de configuração da impressora
ES: DI = segmento: deslocamento do buffer a receber
sequência de configuração
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função é usada para obter a string de configuração da impressora para uma impressora de rede específica.
INT 21H (0x21)
Função 5FH (0x5F ou 95), subfunção 02H (0x02) --> Obter entrada da lista de redirecionamento
Chamada com: AH = 5FH
AL = 02H
BX = índice de lista de redirecionamento
DS: SI = segmento: deslocamento do buffer de 16 bytes para
receber nome do dispositivo local
ES: DI = segmento: deslocamento do buffer de 128 bytes para
receber nome da rede
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
BH = sinalizador de status do dispositivo
Bit 0 = 0 se o dispositivo for válido
= 1 se não for válido
BL = tipo de dispositivo
03H, se impressora
04H, se dirigir
CX = valor do parâmetro armazenado
DX = destruído
BP = destruído
DS: SI = segmento: deslocamento do ASCIIZ local
nome do dispositivo
ES: DI = segmento: deslocamento da rede ASCIIZ
nome
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção permite a inspeção da lista de redirecionamento do sistema, que associa nomes lógicos locais a arquivos de rede, diretórios ou impressoras. Esta chamada de função só está disponível quando o Microsoft Networks está em execução e o módulo de compartilhamento de arquivos foi carregado.
INT 21H (0x21)
Função 5FH (0x5F ou 95), subfunção 03H (0x03) --> Redirecionar dispositivo
Chamada com: AH = 5FH
AL = 03H
BL = tipo de dispositivo
03H, se impressora
04H, se dirigir
DS: SI = segmento: deslocamento do ASCIIZ local
nome do dispositivo
ES: DI = segmento: deslocamento da rede ASCIIZ
nome, seguido de senha ASCIIZ
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Estabelece redirecionamento pela rede associando um nome de dispositivo local a um nome de rede. Esta chamada de função só está disponível quando o Microsoft Networks está em execução e o módulo de compartilhamento de arquivos (SHARE.EXE) foi carregado.
INT 21H (0x21)
Função 5FH (0x5F ou 95), subfunção 04H (0x04) --> Cancelar redirecionamento do dispositivo
Chamada com: AH = 5FH
AL = 04H
DS: SI = segmento: deslocamento do ASCIIZ local
nome do dispositivo
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta subfunção cancela uma solicitação de redirecionamento anterior removendo a associação de um nome de dispositivo local com um nome de rede. Esta chamada de função só está disponível quando o Microsoft Networks está em execução e o módulo de compartilhamento de arquivos, como SHARE.EXE, foi carregado.
INT 21H (0x21)
Função 60H (0x60 ou 96) --> Reservado
INT 21H (0x21)
Função 61H (0x61 ou 97) --> Reservado
INT 21H (0x21)
Função 62H (0x62 ou 98) --> Obter endereço de prefixo de segmento de programa (PSP)
Chamada com: AH = 62H
Retorna: BX = endereço do segmento do programa
prefixo
Comentários:
Esta função obtém o endereço do segmento (parágrafo) do Prefixo de Segmento de Programa (PSP) para o programa em execução no momento.
INT 21H (0x21)
Função 64H (0x64 ou 100) --> Reservado
INT 21H
Função 65H (0x65 ou 101) --> Obter informações estendidas do país
Chamada com: AH = 65H
AL = subfunção
00H = Obter Geral
Informações sobre internacionalização
02H = Obter ponteiro para maiúsculas
Mesa
04H = Obter ponteiro para nome de arquivo
Tabela de letras maiúsculas
06H = Obter ponteiro para tabela de agrupamento
07H = Obter ponteiro para byte duplo
Conjunto de Caracteres (DBCS) Vetor
BX = página de código de interesse (-1 = ativo
Dispositivo CON)
CX = comprimento do buffer a receber
informação (deve ser >=5)
DX = ID do país (-1 = padrão)
ES: DI = endereço do buffer a receber
Informação
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
E os dados solicitados são colocados no buffer do programa de chamada
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Isto obtém informações sobre o país especificado e/ou página de código. Consulte a tabela de internacionalização fornecida antes para saber sobre bytes de informação.
INT 21H (0x21)
Função 66H (0x66 ou 102) --> Obter ou definir página de código
Chamada com: AH = 66H
AL = subfunção
01H = Obter página de código
02H = Selecionar página de código
BX = página de código a ser selecionada, se AL = 02H
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
E, se chamado com AL = 01H
BX = página de código ativa
DX = página de código padrão
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função obtém ou seleciona a página de código atual.
INT 21H (0x21)
Função 67H (0x67 ou 103) --> Definir contagem de identificadores
Chamada com: AH = 67H
BX = número de alças desejadas
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função define o número máximo de arquivos e dispositivos que podem ser abertos simultaneamente usando identificadores pelo processo atual.
INT 21H (0x21)
Função 68H (0x68 ou 104) --> Commit file
Chamada com: AH = 68H
BX = alça
Retorna: Se a função for bem-sucedida
Bandeira de transporte = limpar
Se a função não for bem-sucedida
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função força todos os dados em buffers internos do MS DOS associados a um handle especificado a serem fisicamente gravados no dispositivo. Se o handle se referir a um arquivo, e o arquivo tiver sido modificado, o carimbo de data e hora e o tamanho do arquivo na entrada do diretório raiz do arquivo serão atualizados.
INT 21H (0x21)
Função 69H (0x69 ou 105) --> Reservado
INT 21H (0x21)
Função 6AH (0x6A ou 106) --> Reservado
INT 21H (0x21)
Função 6BH (0x6B ou 107) --> Reservado
INTERNO 21H (0x21)
Função 6CH (0x6C ou 108) --> Abrir arquivo estendido
Chamada de: AH = 6CH
AL = 00N
BX = modo aberto
Página(s) |
Significado |
0-2 |
Tipo de acesso
000 = Somente leitura
001 = Somente gravação
010 = Leitura/gravação |
3 |
Reservado (0) |
4-6 |
Modo público
000 = Compatibilidade
001 = Negar leitura/escrita (negar tudo)
010 = Negar escrita
011 = Negar leitura
100 = Negar nada |
7 |
Herança
0 = processo filho herda identificador
1 = processo filho não herda identificador |
8-12 |
Reservado (0) |
13 |
Tratamento de erros críticos
0 = Executar INT 24H
1 = Retornar erro ao processo |
14 |
Write-through
0 = as gravações podem ser armazenadas em buffer e adiadas
1 = gravações físicas no momento da solicitação |
15 |
Reservado (0) |
CX = atributo de arquivo (bits podem ser combinados;
se ignorado, se aberto, consulte a tabela de significância de bits .
DX = bandeira aberta
Página(s) |
Significado |
0-3 |
Ação se o arquivo existir
0000 = erro
0001 = abrir arquivo
0010 = substituir arquivo |
4-7 |
Ação se o arquivo não existir
0000 = falha
0001 = criar arquivo |
8-15 |
Reservado (0) |
DS:SI = segmento:deslocamento do caminho ASCIIZ
Retorna: mSe a função for bem-sucedida
Bandeira de transporte = limpar
AXE = cabo
CX = ação tomada
1 = o arquivo existia e era
aberto
2 = arquivo não existe e
foi criado
3 = o arquivo existia e era
substituído
Se a função falhar
Bandeira de transporte = definida
AX = código de erro
Comentários:
Esta função abre, cria ou substitui um arquivo no diretório especificado ou padrão na unidade especificada ou padrão para o caminho ASCIIZ fornecido e retorna um identificador que o programa pode usar para acessar o arquivo posteriormente.
Se algum elemento do caminho não existir, ou o arquivo for criado no diretório raiz e o diretório raiz estiver cheio, ou o arquivo for criado e um arquivo com o mesmo nome e o atributo somente leitura já existir no diretório especificado, ou o usuário não tiver direitos de acesso suficientes, a função falhará.