Capítulo – 6
Introdução a Noções Básicas de Informática
Introdução
Algumas vezes, em alguns casos, quando você está tentando recuperar os dados ou está executando 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 do DOC.
Também pode ser possível para alguns casos particulares que você ache fácil fazer essa tarefa específica com a ajuda do DEBUG e depois com a programação. Tomemos um exemplo. A seguinte codificação de depuração será suficiente para fazer o backup do DBR. Basta digitar as seguintes linhas:
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
Aqui você pode ver que apenas digitando as poucas linhas acima você pode evitar escrever um programa. Vamos ver outro exemplo de codificação que carrega a cópia de backup do DBR no disco
Lembre-se sempre! Não tente isso sem o conhecimento completo. Tenha certeza do que você vai fazer. O uso descuidado das instruções a seguir pode causar uma grande perda de dados, pois o uso indevido da instrução pode fazer com que todas as suas informações do disco fiquem inacessíveis.
DEBUG BKDBR.BIN
W 100 2 0 1
Q
Ao ver a codificação deste exemplo, você pode adivinhar facilmente o quanto isso pode ajudá-lo quando você mais precisar. Também não é possível fazer programação em todas as situações. Porém dentro de um limite de casos simples do problema, utilizar as Instruções de montagem,você precisa apenas copiar o debug.exe/debug.com em seu disco de inicialização e começar a escrever o código.
O funcionamento 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 de tudo, precisamos obter um pouco de conhecimento básico de arquitetura de computador para entender os termos usados nas próximas seções enquanto descrevemos o funcionamento e os exemplos em diferentes etapas. Deixe-nos saber alguns conceitos básicos de arquitetura de computador:
Conceitos Básicos
Processador Central
Esta parte também é conhecida como unidade central de processamento ou CPU, que por sua vez é composta pela unidade de controle e pela unidade aritmética e lógica. Suas funções consistem em ler e escrever o conteúdo das células de memória, encaminhar dados entre células de memória e registradores especiais, decodificar e executar as Instruções de um programa. O processador possui uma série de 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 com o nome de registradores. Um processador pode ter uma ou duas dúzias desses registradores. A unidade aritmética e lógica da CPU realiza as operações relacionadas com cálculos numéricos e simbólicos.
Normalmente estas unidades só têm capacidade para realizar operações muito elementares como, a adição e subtração de dois números inteiros, a multiplicação e divisão de números inteiros, o tratamento dos bits dos registos e a comparação do conteúdo de dois registos. Os computadores pessoais podem ser classificados pelo que é conhecido como tamanho da palavra, ou seja, a quantidade de bits que o processador pode manipular de cada vez.
Memória Central
É um conjunto de células, fabricadas com semicondutores, utilizadas para processos gerais, como execução de programas e armazenamento de informações para as operações. Cada uma dessas células pode conter um valor numérico e tem a propriedade de ser direcionável. Isto é que eles podem distinguir um do outro por meio de um número único ou um endereço para cada célula. O nome genérico dessas memórias é Random Access Memory ou RAM.
A principal desvantagem deste tipo de memória é que os circuitos integrados perdem as informações que armazenavam quando o fluxo de eletricidade é interrompido. Este foi o motivo da criação de memórias cujas informações não se perdem quando o sistema é desligado. Essas memórias recebem o nome de Read Only Memory ou ROM.
Para que o PC processe informações, é necessário que essas informações estejam em células especiais chamadas de registradores. Os registradores são grupos de 8 ou 16 flip-flops.
Um flip-flop é um dispositivo capaz de armazenar dois níveis de tensão, um baixo, normalmente de 0,5 volts, e outro, geralmente de 5 volts. O nível baixo de energia no flip-flop é interpretado como desligado ou 0, e o nível alto 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 de nibbles.
Registros de CPU
A CPU possui 4 registradores internos, cada um de 16 bits. Os primeiros quatro, AX, BX, CX e DX são registradores de uso geral e também podem ser usados como registradores de 8 bits, se utilizados desta forma é necessário referir-se a eles por exemplo como: AH e AL, que são os bytes alto e baixo do registrador AX. Esta nomenclatura também se aplica aos registradores BX, CX e DX.
Os registros conhecidos por seus nomes específicos:
Register |
Specific Name |
AX |
Accumulator |
BX |
Base register |
CX |
Counting register |
DX |
Data register |
DS |
Data segment register |
ES |
Extra segment register |
SS |
Battery segment register |
CS |
Code segment register |
BP |
Base pointers register |
SI |
Source index register |
DI |
Destination index register |
SP |
Battery pointer register |
IP |
Next Instruction pointer register |
F |
Flag register |
No entanto, usaremos esses registradores na programação de interrupções através de C nos próximos capítulos em detalhes, mas aprender o básico da linguagem assembly aqui será um bom ideal e nos ajudará na programação de operações de disco etc.
É possível visualizar os valores dos registradores internos da UCP utilizando o programa Debug. Para começar a trabalhar com o Debug, digite o seguinte prompt em seu computador:
C:/>Depurar <Enter>
Na próxima linha aparecerá um traço, este é o indicador de Depuração, neste momento as Instruções de Depuração podem ser introduzidas usando o seguinte comando:
- r <Enter>
Todos os conteúdos dos registradores internos da CPU são exibidos. Uma alternativa para visualizá-los é usar o botão "r" comando usando como parâmetro o nome do registrador cujo valor se deseja ver. Por exemplo:
-rbx <Enter>
Esta Instrução exibirá apenas o conteúdo do registro BX e o indicador Debug muda 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 de flag, e usá-lo como estrutura de controle em nossos programas como veremos mais adiante. 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:
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
Estrutura do montador
Em linguagem assembly as linhas de código possuem 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:
ADICIONAR ah, bh
Aqui "ADD"é o comando a ser executado; neste caso uma adição, e "ah" assim como "bh" são os parâmetros.
O nome das Instruções em 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 irá realizar. Existem alguns comandos que não requerem parâmetros para o seu funcionamento, 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 <Get in>no prompt do sistema operacional.
Para montar um programa no Debug, o"an" (montar) comando é usado. Quando este comando é usado, o endereço onde você deseja 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 deve ser iniciado. E será o local que usaremos, pois somente o Debug pode criar esse tipo específico de programas.
Mesmo que neste momento não seja necessário dar o "a" comando um parâmetro, é recomendável fazê-lo para evitar problemas uma vez que os Registradores CS:IP são usados, portanto digitamos:
-a0100 <Enter>
Quando isso for feito aparecerá na tela: 0C1B:0100 e o cursor estiver posicionado à direita desses números, observe que os quatro primeiros dígitos, em sistema hexadecimal, podem ser diferentes, mas os quatro últimos deve ser 0100, pois é o endereço que indicamos como início. Agora podemos introduzir as Instruções:
0C1B:0100 mov ax,0002; puts the 0002 value on the ax register
0C1B:0103 mov bx,0004; puts the 0004 value on the bx register
0C1B:0106 add ax,bx; the content of bx is added to the content of ax
0C1B:0108 int 20; provoques the termination of the program.
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 operativo, estas interrupções poupam-nos muitas linhas e são muito úteis para aceder às funções do sistema operativo.
Para executar o programa que escrevemos, o "g" comando é usado e, quando usado, veremos uma mensagem que diz:
"Programa encerrado normalmente". Naturalmente, com uma mensagem como esta, não podemos ter certeza de que o programa fez a adição, mas há uma maneira simples de verificar isso, usando a tecla "r" comando do Debug podemos ver o conteúdo de todos os registradores do processador, basta digitar:
-r <Enter>
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 OF DB
Existe a possibilidade de os registradores conterem valores diferentes, mas AX e BX devem ser iguais, pois são os que acabamos de modificar.
Outra forma de ver os valores, enquanto o programa é executado, é usar 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, para no endereço 108 e mostra o conteúdo dos registradores.
Um acompanhamento do que está acontecendo nos registros pode ser feito usando o botão "t" comando (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 botão "q" (sair) comando.
Vantagens do Montador
O primeiro motivo para trabalhar com o 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 montador. Outra razão é que os programas baseados em assembly são mais rápidos e, em alguns casos, menores, e possuem capacidades maiores do que aqueles criados com outras linguagens.
Deixe-me cumprir minha promessa!!
Na parte anterior deste capítulo estávamos usando algumas instruções como exemplo, para fazer o backup do DBR e carregar o backup do DBR em 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 <Enter>
- R CX <Enter>
CX 0000
: 200 <Digite>
- W <Enter>
Escrevendo 00200 bytes
- P <Enter>
Neste exemplo, vamos começar a estudar desde a primeira linha. O comando DEBUG A:\BKDBR.BIN Inicializa o comando debug com a criação de um arquivo na unidade de disquete A: chamada BKDBR.BIN se 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 das unidades são fornecidos da seguinte forma:
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
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 1 é utilizado 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 escrever no arquivo BKDBR.BIN. Esta Instrução mostrará o valor atual do registrador 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.
Warning!!! Warning!!! Warning!!!
It is strictly recommended that you should know what and how are you doing in the procedure of restoring DBR of any disk. If accidentally you store the illegal or DBR of any other Disk, it is possible in most of the cases that the complete data of the disk may become inaccessible.
when you type the first Instruction of the coding that is:
DEBUG A:\BKDBR.BIN <Enter>
File must be in the given location where you are starting the DEBUG program. Now if you get the error message “File not found” before the DEBUG prompt then immediately stop the process by using the Q (quit) command. Because it means that the BKDBR.BIN file could not be found or opened by the DEBUG program and if you continue this process some junk information will be written on DBR and it will make the complete partition inaccessible. |
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 <Enter>
- Q <Enter>
|
Esta Instrução escreverá 1 setor de informação do arquivo BKDBR.BIN na unidade de disquete (a:) no local de memória 100 para o primeiro setor que é o setor 0 da 2ª unidade que é a unidade(C:).
Armazenar e carregar os programas
Não parece prático digitar um programa inteiro cada vez que for necessário, e para evitar isso é possível armazenar um programa no disco, com a enorme vantagem de já estar montado não será necessário rodar Depure novamente para executá-lo.
As etapas 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.
- Solicite Debug para gravar o programa no disco.
Usando o programa a seguir como exemplo, teremos uma ideia mais clara de como realizar essas etapas. Quando o programa estiver finalmente montado, ficará assim:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
Gravando bytes 000A
Para obter a duração de um programa, o parâmetro "h" O comando é usado, pois 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 "n" comando nos permite nomear o programa. O "rcx"O comando permite alterar o conteúdo do registrador CX para o valor obtido do tamanho do arquivo com "h",neste caso 000a, pois o resultado da subtração do endereço final do endereço inicial.
Por último, o "w" O comando escreve nosso programa no disco, indicando quantos bytes ele escreveu. 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 a tecla "l" (carregar) comando.
Para obter o resultado correto dos passos a seguir, é necessário que o programa acima já esteja criado.
Dentro do Debug escrevemos o seguinte:
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
O último "u" comando é usado para verificar se o programa foi carregado na memória. O que ele faz é desmontar o código e mostrar ele desmontado. Os parâmetros indicam ao 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 obriga ao uso de segmentos de memória para gerenciar a informação, 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 uma de 65536 localidades, e usarmos um endereço em um registrador exclusivo para encontrar cada segmento, e então fazemos cada endereço de um slot específico com dois registradores, sendo possível acessar uma quantidade de 4294967296 bytes de memória.
Para que o montador possa gerenciar os dados, é necessário que cada informação ou Instrução esteja localizada na área que corresponde aos seus respectivos segmentos. O montador acessa essas informações levando em consideração 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 MOV 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 seguem as instruções que serão armazenadas a partir desse endereço.
O montador ajusta o tamanho dos segmentos tomando como base o número de bytes que cada Instrução montada necessita, pois seria um desperdício de memória utilizar os segmentos inteiros. Por exemplo, se um programa precisa apenas de 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, quando estivermos programando com a ajuda de interrupções e outras operações do BIOS, precisaremos do básico.
A introdução detalhada e o estudo completo da linguagem assembly estão além do limite deste livro. Embora o conhecimento básico de montagem seja necessário para prosseguir nos próximos capítulos importantes de programação, se você sentir dificuldade em entender todas as instruções, não precisa se preocupar, mas é recomendável que você obtenha a ideia básica de instruções.
Em qualquer programa é necessário mover os dados na memória e nos registradores da CPU e existem 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, para transmitir dados para dispositivos externos e vice-versa.
Esta movimentação de dados está sujeita a regras e restrições. A seguir estão alguns deles:
- Não é possível mover dados de um local de memória para outro diretamente. É necessário primeiro mover os dados da localização de origem para um registrador e depois do registrador para a localidade de destino.
- Não é possível mover uma constante diretamente para um registrador de segmento; primeiro deve ser movido 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 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:
PUSH AX
PUSH BX
PUSH CX
To return the correct values to each register at the moment of taking them from the stack it is necessary to do it in the following order:
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 é:
SAÍDA 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 registro onde as informações de entrada 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 do MOV, Origem
Os diferentes movimentos de dados permitidos por esta Instrução são mostrados na tabela a seguir:
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
Vejamos um exemplo:
MOV AX,0006
MOV BX,AX
MOV AX,4C00
INT 21
Este programa move o valor de 0006H para o registrador AX, depois 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 de 21h . Faremos uma breve introdução da interrupção 13H e da interrupção 21H depois.
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 agir 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 deseja enviar alguma informação ao BIOS ou o BIOS deseja enviar alguma informação ao sistema do computador, o DOS ou o BIOS geram interrupções. Sempre que uma interrupção é gerada, o computador suspende tudo o que está 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 a seguir:
- Interrupções internas de hardware
- Interrupções de hardware externo
- Interrupções de software
Interrupções de hardware interno
As interrupções internas são geradas por determinados eventos que surgem durante a execução de um programa. Este tipo de interrupções é gerida na sua totalidade pelo hardware e não é possível modificá-las.
Um exemplo claro deste tipo de interrupção é aquela que atualiza o contador do relógio interno do computador, o hardware faz a chamada para esta interrupção várias vezes durante um segundo para manter o tempo atualizado.
Embora não possamos gerenciar diretamente essa interrupção, pois não podemos controlar o tempo de atualização por meio de software, mas é possível usar seus efeitos no computador em nosso benefício.
Por exemplo: para criar um relógio virtual atualizado continuamente, basta escrever um programa que leia o valor real do contador e traduzi-lo em um formato compreensível para o usuário.
Interrupções de hardware externo
As interrupções externas são geradas por dispositivos periféricos, como teclados, impressoras, placas de comunicação, etc. Também são geradas por coprocessadores. Não é possível desativar as interrupções externas.
Essas interrupções não são enviadas diretamente para a CPU, mas são enviadas para um circuito integrado cuja função é lidar exclusivamente com esse tipo de interrupção
Interrupções de software
As interrupções de software podem ser ativadas diretamente pela montadora 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á-los nossos programas ficam mais curtos. É mais fácil entendê-los e geralmente têm um desempenho melhor principalmente devido ao seu tamanho menor. Esse 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 que, como fazem parte do hardware, são muito específicos e podem variar dependendo até mesmo da marca do fabricante do circuito.
A escolha do tipo de interrupção a ser utilizada dependerá exclusivamente das características que você deseja dar ao seu programa.
Since we shall use interrupts for data recovery programming with the help of C language via Interrupt handling with C, we shall discuss only Interrupt 13H, Interrupt 13H Extensions and Interrupt 21H routines specially. It is not so important to discuss all of the other interrupts and their functions because in C language, easier functions are available to perform most of those tasks. However, the knowledge of Interrupt 13H and its Extensions is must, for data recovery programming. |
Vamos fazer uma breve introdução do Interrupt 20H e do Interrupt 21H. O valor escrito entre colchetes (como 0x20) indica, como usar
INT 20H (0x20) --> Encerrar processo
Chamada com: CS = endereço do segmento do prefixo do segmento do programa
Devoluções: nada
Comentários:
Finaliza 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 realizar 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.
Recomenda-se que, se você tiver usado File Control Blocks (FCBs) para gravar qualquer arquivo, feche o arquivo primeiro, caso contrário poderá perder os dados, pois na ação de saída final toda a memória que foi tomada pelo processo é liberado, os buffers de arquivo são liberados e quaisquer identificadores abertos para arquivos ou dispositivos pertencentes ao processo são fechados.
Portanto, se você tiver identificadores abertos para o arquivo, poderá perder os dados.
INT 21H (0x21)
Função 00H (0x00) --> Encerrar processo
Ligar com: AH = 00H
CS = endereço do segmento do prefixo do segmento do programa
Devoluções: 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 obter mais informações, consulte INT 20H
INT 21H (0x21)
Função 01H (0x01) --> Entrada de caracteres com eco
Ligar com: AH = 01H
Retorna: AL = dados de entrada de 8 bits
Comentários:
Essa interrupção lê um caractere do dispositivo de entrada padrão, como o teclado, e o ecoa no dispositivo de saída padrão. Se nenhum personagem estiver pronto, espera até que um esteja disponível.
INT 21H (0x21)
Função 02H (0x02) --> Saída de caracteres
Ligar com: AH = 02H
DL = dados de 8 bits para saída
Devoluções: nada
Comentários:
Ele envia 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 o disco cheio.
Strings também podem ser enviadas para o display executando uma escrita (INT 21H, Function 40H) usando o handle predefinido para a saída padrão (0001H), se a saída não foi redirecionada, ou um handle obteve o dispositivo lógico CON .
INT 21H (0x21)
Função 03H (0x03) --> Entrada auxiliar
Ligar com: AH = 03H
Retorna: AL = dados de entrada de 8 bits
Comentários:
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 o seu programa pode processá-los, os 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
Ligar com: AH = 04H
DL = dados de 8 bits para saída
Devoluções: nada
Comentários:
Esta função de 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 escrita (INT 21H Function 40H) usando o handle predefinido para o dispositivo auxiliar padrão (00034) ou usando um handle obtido abrindo o dispositivo lógico AUX.
INT 21H (0x21)
Função 05H (0x05) --> Saída da impressora
Ligar com: AH = 05H
DL = dados de 8 bits para saída
Devoluções: 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 escrita (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
Call with: AH = 06H
DL = function requested such that,
If output request, 00H-FEH
If input request, 0FFH
Returns: Nothing, If called with DL = 00H-0FEH
If called with DL = FFH and a character is ready
Zero flag = clear
AL = 8-bit input data
If called with DL = FFH and no character is ready
Zero flag = set
Comentários:
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 foi redirecionada, não há como detectar EOF ou disco cheio. Esta função do INT 21H é utilizada por programas que precisam ler e escrever todos os caracteres e códigos de controle possíveis sem qualquer interferência do sistema operacional.
INT 21H (0x21)
Função 07H (0x07) --> Entrada de caracteres não filtrada
sem eco
Call with: AH = 07H
Returns: AL = 8-bit input data
Comentários:
Esta função lê um caractere do dispositivo de entrada padrão sem ecoá-lo para o dispositivo de saída padrão.
INT 21H (0x21)
Função 08H (0x08) --> Entrada de caracteres sem
eco
Call with: AH = 08H
Returns: AL = 8-bit input data
Comentários:
Esta função lê um caractere do dispositivo de entrada padrão sem ecoá-lo para o dispositivo de saída padrão.
INT 21H (0x21)
Função 09H (0x09) --> Sequência de exibição
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
Comentários:
Envia uma string de caracteres para o dispositivo de saída padrão. A saída pode ser redirecionada. Se a saída foi redirecionada, não há como detectar o disco cheio. A string também pode ser enviada ao display executando uma escrita (INT 21H Function 40H) usando o handle predefinido para a saída padrão (0001H), caso não tenha sido redirecionado, ou um handle obtido abrindo o dispositivo lógico CON.
INT 21H (0x21)
Função 0AH (0x0A ou 10) --> Teclado com buffer
entrada
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
Comentários:
Ele lê uma string 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 |
Contents |
0 |
Maximum number of characters to read, set by program |
1 |
Number of characters actually read (excluding carriage return), set by MS-DOS |
2+ |
String read from keyboard or standard input, terminated by a carriage return (0DH) |
INT 21H (0x21)
Função 0BH (0x0B ou 11) --> Verifique o status de entrada
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
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 Subfunção 06H.
INT 21H (0x21)
Função 0CH (0x0C ou 12) --> Liberar buffer de entrada
e, em seguida, entrada
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
Comentários:
Limpa o buffer de entrada padrão e 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 libera o buffer de entrada e retorna o controle para o programa de chamada.
INT 21H (0x21)
Função 0DH (0x0D ou 13) -> Redefinição de disco
Chamar com: AH = 0DH
Devoluções:Nada
Comentários:
Esta função libera 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
Ligar com: AH = 0EH
DL = código da unidade (0 = A, 1 = B, etc.)
Retorna: AL = número de drives lógicos no sistema
Comentários:
Seleciona a unidade especificada como unidade de disco atual ou padrão e retorna o número total de unidades lógicas no sistema.
Os aplicativos devem se limitar às letras de unidade A-Z (0 = A, 1 = B, etc.). Unidades lógicas significa o número total de dispositivos de bloco, como disquetes e unidades de 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
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
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 disponibiliza para operação subsequente de leitura/gravação. 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
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
Comentários:
É usado para fechar um arquivo. Ele fecha um arquivo, libera 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) -> Encontre o primeiro arquivo
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
E 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 de qual tipo de FCB foi inserido para funcionar.
Se a função não for bem-sucedida (nenhum nome de arquivo correspondente encontrado)
AL = FFH
Comentários:
Ele pesquisa o diretório atual na unidade designada por 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
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
Comentários:
Este é o companheiro da função anterior. Se a função INT 21H 11H for bem-sucedida, ela 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 do arquivo ou extensão que está sendo pesquisada continha pelo menos um caractere curinga.
INT 21H (0x21)
Função 13H (0x13 ou 19) -> Excluir arquivo
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
Comentários:
Exclui 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
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
Comentários:
Esta função lê o próximo bloco sequencial de dados de um arquivo, então incrementa o ponteiro do arquivo apropriadamente. O número de bytes de dados a serem lidos é especificado pelo campo de tamanho do registro (deslocamento 0EH) do bloco de controle de arquivos (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 INT 21H Função 1AH. Se o tamanho do registro e a localização do buffer forem tais que um overflow ou wraparound de segmento ocorreria, a função falhará com um código de retorno de 02H.
INT 21H (0x21)
Função 15H (0x15 ou 21) --> Gravação sequencial
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
Comentários:
Esta função escreve o próximo bloco sequencial de dados em um arquivo, então incrementa o ponteiro do arquivo apropriadamente. O número de bytes de dados a serem gravados é especificado pelo campo de tamanho do registro (deslocamento 0EH) do bloco de controle de arquivos (FCB).
INT 21H (0x21)
Função 16H (0x16 ou 22) --> Criar arquivo
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
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 tamanho zero. Também abre o arquivo para operações de leitura/gravação subsequentes. Esta função deve ser usada com cuidado porque um arquivo existente com o nome especificado é truncado para tamanho zero e todos os dados nesse arquivo são irremediavelmente perdidos.
INT 21H (0x21)
Função 17H (0x17 ou 23) --> Renomear arquivo
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
Comentários:
Esta função altera o nome de todos os arquivos correspondentes no diretório atual no 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 iniciando 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
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive 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
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
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 a FCB.
INT 21H (0x21)
Função 1BH (0x1B ou 27) --> Obter unidade padrão
dados
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
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:
Media Descriptor ID |
Medium |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
INT 21H (0x21)
Função 1CH (0x1C ou 28) --> Obter dados da unidade
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
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 arquivos. 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
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
Comentários:
Esta função lê um registro selecionado de um arquivo na memória. O registro é lido na memória no endereço da área de transferência do disco atual, especificado pela chamada mais recente para INT 21H Função 1AH.
INT 21H (0x21)
Função 22H (0x22 ou 34) --> Gravação aleatória
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
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
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
Comentários:
Esta função procura um arquivo correspondente no diretório atual; se 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 FCB (deslocamento 0EH) antes de chamar esta função.
INT 21H (0x21)
Função 24H (0x24 ou 36) --> Definir registro relativo
número
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
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
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
Comentários:
Esta função inicializa um vetor de interrupção da CPU para apontar para uma rotina de tratamento de interrupção. Deve ser usado preferencialmente à 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 programa
Prefixo do segmento (PSP)
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
Comentários:
Esta função copia o prefixo de segmento de programa (PSP) do programa atualmente em execução 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
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
Comentários:
Esta função lê um ou mais registros sequenciais de um arquivo na memória, começando em um local de arquivo designado. Se o tamanho e a localização do buffer forem tais que um overflow ou wraparound de segmento ocorreria, a função falhará com um código de retorno de 02H e se um registro parcial for lido no final do arquivo, o restante do registro será preenchido com zeros .
INT 21H (0x21)
Função 28H (0x28 ou 40) --> Gravação de bloco aleatório
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
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 a localização do buffer forem tais que um overflow ou wraparound de segmento ocorreria, a função falhará com um código de retorno 02H.
INT 21H (0x21)
Função 29H (0x29 ou 41) --> Analisar nome do arquivo
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
Comentários:
Esta função analisa uma string 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 de terminação .
INT 21H (0x21)
Função 2AH (0x2A ou 42) --> Obter dia e data
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, 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
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
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) --> Consiga tempo
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 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 tempo
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
Comentários:
Esta função inicializa o relógio em 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
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
Devoluções: Nada
Comentários:
Esta função desativa ou ativa 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 é DESATIVADA 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
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
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 do arquivo FCB.
INT 21H (0x21)
Função 30H (0x30 ou 48) --> Obter MS-DOS
número da versão
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
Comentários:
Retorna o número da versão do sistema operacional MS-DOS host.
INT 21H (0x21)
Função 31H (0x31 ou 49) --> Terminar e ficar
Residente (TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
Comentários:
Esta função termina a execução do programa atualmente em execução passando um código de retorno para o processo pai, mas reserva parte ou toda a memória do programa para que seja sobreposta pelo próximo programa transiente a ser carregado. Esta função deve ser usada preferencialmente a INT 27H porque 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) --> Obtenha ou defina o sinalizador de interrupção, obtenha a unidade de inicialização
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (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 de Ctrl-C durante as 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
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
Comentários:
Esta função obtém o endereço da rotina de tratamento de interrupção atual para a interrupção de máquina especificada.
INT 21H (0x21)
Função 36H (0x36 ou 54) --> Obter alocação de unidade
Em formação
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
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 programação de solução de problemas de disco a partir da qual a capacidade da unidade e o espaço livre restante e muitas outras coisas importantes podem ser calculadas.
INT 21H (0x21)
Função 37H (0x37 ou 55) --> Reservado
INT 21H (0x21)
Função 38H (0x38 ou 56) --> Obter ou definir país
em formação
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
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
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função cria um diretório usando a unidade e o caminho especificados.
ASCIIZ is known as the sequence of ASCII characters terminated be, Null or Zero, Byte. |
INT 21H (0x21)
Função 3AH (0x3A ou 58) --> Excluir diretório
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função remove um diretório usando a unidade e o caminho especificados. Se algum 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 excluir o diretório falhará.
INT 21H (0x21)
Função 3BH (0x3B ou 59) --> Definir atual
diretório
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
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
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
O significado dos bits é dado na tabela a seguir:
Bit(s) |
Significance (if set) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Se um nome de 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 é retornado um identificador que pode ser usado pelo programa para acesso subsequente ao arquivo.
Se algum elemento do nome 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 do arquivo falhará .
INT 21H (0x21)
Função 3DH (0x3D ou 61) --> Abrir arquivo
Call with: AH = 3DH
AL = access mode
O significado dos bits do modo de acesso é dado na tabela a seguir:
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Se um nome de 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. É retornado um identificador que pode ser usado pelo programa para acesso subsequente ao arquivo.
INT 21H (0x21)
Função 3EH (0x3E ou 62) --> Fechar arquivo
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
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 do diretório do arquivo.
INT 21H (0x21)
Função 3FH (0x3F ou 63) --> Ler arquivo ou dispositivo
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função transfere dados na posição atual do ponteiro de arquivo do arquivo para o buffer e, em seguida, 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) --> Gravar arquivo ou dispositivo
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Essa função transfere dados do buffer para o arquivo e, em seguida, atualiza a posição do ponteiro do arquivo para determinado identificador de arquivo válido de uma operação anterior de abertura ou criação, 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
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
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 de seu nome de arquivo no diretório raiz pelo caractere E5H (0xE5) e disponibilizando os clusters do arquivo 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
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função define a localização do ponteiro do arquivo em relação ao início do arquivo, final do arquivo ou posição atual do arquivo.
INT 21H (0x21)
Função 43H (0x43 ou 67) --> Obter ou definir arquivo
atributos
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
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 significados de bits fornecida anteriormente.
INT 21H (0x21)
Função 44H (0x44 ou 68) --> Entrada/Saída
Controle (E/S Ctrl)
Esta função fornece um caminho direto de comunicação entre um programa aplicativo e um driver de dispositivo. Ele 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:
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
INT 21H (0x21)
Função 44H (0x44 ou 68), subfunção 00H (0x00)
Ctrl de E/S --> obter informações do dispositivo
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
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 de E/S --> definir informações do dispositivo
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção da função 44H de INT 21H, define certos sinalizadores para um identificador associado a um dispositivo de caractere. Esta subfunção não pode ser usada para um identificador associado a um arquivo.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 02H (0x02)
Ctrl de E/S --> ler dispositivo de caractere de dados de controle
condutor
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
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 qualquer entrada do dispositivo físico.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 03H (0x03)
Ctrl de E/S --> escrever dados de controle dispositivo de caracteres
condutor
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
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 qualquer saída para o dispositivo físico.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 04H (0x04)
Ctrl de E/S --> Leia o driver do dispositivo de bloco de dados de controle
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção transfere dados de controle de um driver de dispositivo de bloco diretamente para o buffer de um programa 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 na entrada do dispositivo físico.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 05H (0x05)
Ctrl de E/S --> driver de dispositivo de bloco de dados de controle de gravação
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção transfere dados de controle de um programa aplicativo 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 de E/S --> verifique o status da entrada
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Retorna um código indicando se o dispositivo ou os arquivos associados a um handle estão prontos para entrada.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 07H (0x07)
Ctrl de E/S --> verifique o status de saída
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
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 de E/S --> verifique se o dispositivo de bloco é removível
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
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 essa 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 de E/S --> verifique se o dispositivo de bloco é remoto
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
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) E/S Ctrl --> verifique se o punho é remoto
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
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) E/S Ctrl --> alterar contagem de tentativas de compartilhamento
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção define o número de vezes que o MS-DOS repete 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 arquivos esteja carregado.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0CH (0x0C ou 12) I/O Ctrl controle de I/O genérico para
dispositivos de personagem
Call with: AH = 44H
AL = 0CH
BX = handle
CH = código da categoria (principal):
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL = código da função (menor):
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
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) I/O Ctrl --> controle de E/S genérico para bloco
dispositivos
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção fornece um mecanismo de uso geral para comunicação entre programas aplicativos e drivers de dispositivo de bloco. Permite que um programa inspecione ou altere os parâmetros do dispositivo para uma unidade lógica e leia, grave, formate e verifique faixas de disco de maneira independente de hardware.
INT 21H (0x21)
Função 44H (0x44 ou 68), Subfunção 0EH (0x0E ou 14) E/S Ctrl -->> obter mapa de unidade lógica
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
Comentários:
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) E/S Ctrl --> definir mapa de unidade lógica
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção define o próximo código de unidade lógica que será usado para fazer referência a um dispositivo de bloco.
INT 21H (0x21)
Função 45H (0x45 ou 69) --> Punho duplicado
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função retorna um novo identificador que se refere ao mesmo dispositivo ou arquivo na mesma posição para determinado identificador para um dispositivo ou arquivo atualmente aberto.
INT 21H (0x21)
Função 46H (0x46 ou 70) --> Alça de redirecionamento
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Se houver dois identificadores fornecidos, esta função faz com que o segundo identificador se refira ao mesmo dispositivo ou arquivo no mesmo local do primeiro identificador. O segundo identificador é então redirecionado.
INT 21H (0x21)
Função 47H (0x47 ou 71) --> Atualize-se
diretório
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função obtém uma string ASCIIZ que descreve o caminho da raiz para o diretório atual e o nome desse diretório.
INT 21H (0x21)
Função 48H (0x48 ou 72) --> Alocar memória
bloquear
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
Comentários:
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 memória
bloquear
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função é usada para liberar um bloco de memória e o disponibiliza 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 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 memória
bloquear
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
Comentários:
Esta função reduz ou estende 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)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função permite que um programa aplicativo execute outro programa, recuperando o controle quando ele terminar. Também pode ser usado para carregar sobreposições, embora esse uso seja incomum.
INT 21H (0x21)
Função 4CH (0x4C ou 76) --> Encerrar processo
com código de retorno
Call with: AH = 4CH
AL = return code
Returns: Nothing
Comentários:
Esta função finaliza 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 realizar uma saída final.
INT 21H (0x21)
Função 4DH (0x4D ou 77) --> Obtenha o código de retorno
Ligar com: AH = 4DH
Retorna: AH = tipo de saída
00H, if normal termination by INT 20H, INT 21H
Function 00H, or INT 21H Functions 4CH
01H if termination by user’s entry of Ctrl-C
02H if termination by critical-error handler
03H if termination by INT21H Function 31H or
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or 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 Function 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) --> Encontre o primeiro arquivo
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
E os resultados da pesquisa retornaram na área de transferência de disco atual da seguinte maneira:
Byte(s) |
Description |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
Se a função não for bem-sucedida
Carry flag = set
AX = error code
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 determinada especificação de arquivo na forma de uma string ASCIIZ. Para significado de bits de atributos, consulte a tabela de significado de bits fornecida anteriormente.
INT 21H (0x21)
Função 4FH (0x4F ou 79) --> Localizar próximo arquivo
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Comentários:
Se houver uma chamada anterior bem-sucedida para a função INT 21H 4EH, esta função encontra o próximo arquivo no diretório padrão ou especificado na unidade padrão ou especificada que corresponde à 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
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
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
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
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 nome do caminho não existir ou um arquivo com o novo nome do caminho já existir ou a especificação do nome do caminho atual contiver uma unidade de disco diferente do novo nome do caminho ou o arquivo estiver sendo movido para o diretório raiz e o arquivo raiz diretório está cheio ou o usuário tem direitos insuficientes, a função para renomear arquivos falha.
INT 21H (0x21)
Função 57H (0x57 ou 87) --> Obter ou definir a data e hora do arquivo
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função obtém ou modifica o carimbo de data e hora na entrada do diretório raiz do arquivo.
INT 21H (0x21)
Função 58H (0x58 ou 88) --> Obtenha ou defina a estratégia de alocação
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
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 de alocação de memória padrão do MS-DOS é First Fit (código 0).
Na alocação de memória de primeiro ajuste, o MS-DOS pesquisa os blocos de memória disponíveis do endereço baixo ao 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 satisfará a 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 a endereços baixos, atribuindo o maior o suficiente para atender à solicitação de alocação de bloco.
INT 21H (0x21)
Função 59H (0x59 ou 89) --> Obter erro estendido
Em formação
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
A tabela de códigos de erro foi fornecida abaixo:
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH = classe de erro
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL = recomendar ação
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
Comentários:
Esta função obtém informações detalhadas do erro após uma chamada de função INT 21H anterior sem êxito, incluindo a ação corretiva recomendada.
INT 21H (0x21)
Função 5AH (0x5A ou 90) --> Criar temporário
Arquivo
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
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 identificador que pode ser usado pelo programa 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 nome 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
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
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 nome de 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 tiver direitos de acesso insuficientes, o função falha.
INT 21H (0x21)
Função 5CH (0x5C ou 92) --> Bloquear ou desbloquear a região do arquivo
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
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) esteja 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
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção retorna o endereço de uma string ASCIIZ que identifica 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 string de configuração da impressora
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta subfunção especifica uma string a ser enviada na frente de todos os arquivos direcionados a uma determinada impressora de rede, 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
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
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
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
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. Essa 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
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Estabelece o 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 o redirecionamento do dispositivo
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
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 segmento do programa
Endereço de prefixo (PSP)
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
Comentários:
Esta função obtém o endereço do segmento (parágrafo) do Program Segment Prefix (PSP) para o programa atualmente em execução.
INT 21H (0x21)
Função 64H (0x64 ou 100) --> Reservado
INT 21H
Função 65H (0x65 ou 101) --> Estenda-se
Informação sobre o País
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Obtém informações sobre o país e/ou página de código especificada. Consulte a tabela de internacionalização fornecida antes para saber sobre os bytes de informação.
INT 21H (0x21)
Função 66H (0x66 ou 102) --> Obter ou definir código
página
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
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
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função define o número máximo de arquivos e dispositivos que podem ser abertos simultaneamente usando handles pelo processo atual.
INT 21H (0x21)
Função 68H (0x68 ou 104) --> Confirmar arquivo
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Essa função força todos os dados em buffers internos do MS DOS associados a um identificador especificado a serem fisicamente gravados no dispositivo. Se o identificador 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
INT 21H (0x21)
Função 6CH (0x6C ou 108) --> Arquivo aberto estendido
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX = atributo de arquivo (os bits podem ser combinados;
se ignorado se abertoreferir Bits Tabela de significância.
DX = bandeira aberta
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
Comentários:
Esta função abre, cria ou substitui um arquivo no diretório designado ou padrão na unidade de disco designada ou padrão para um determinado nome de caminho ASCIIZ e retorna um identificador que pode ser usado pelo programa para acesso subsequente ao arquivo.
Se algum elemento do nome do caminho não existir ou o arquivo estiver sendo criado no diretório raiz e o diretório raiz estiver cheio ou o arquivo estiver sendo criado e um arquivo com o mesmo nome e o atributo somente leitura já existir no diretório especificado ou o usuário tem direitos de acesso insuficientes, a função falha.
Página modificada em: 10/01/2022