Os intdos e o intdosx das funções executam a interrupção 0x21 do DOS para invocar uma função especificada do DOS. O valor de inregs->h.ah especifica a função do DOS a ser invocada. O intdosx da função copía também os segregs - >ds e segregs - >es que os valores nos registos correspondentes antes de invocar o DOS funcionam e restauram então o DS.
Esta característica das funções permite os programas que usam ponteiros distantes ou um modelo grande da memória dos dados especifica que segmento deve ser usado para a execução da função. Com função do intdosx você pode invocar uma função do DOS que faça exame de um valor do DS diferente do segmento de dados do defeito e/ou faça exame de um argumento no ES.
Ambas as funções retornam o valor do MACHADO após a conclusão da ligação de controle do DOS e se a bandeira carregar estiver ajustada (outregs - > x.cflag! = 0), indica que um erro ocorreu. Depois que a interrupção 0x21 retorna as funções copíam os valores atuais do registo aos outregs, status da bandeira carregar ao campo de x.cflag nos outregs e o valor das 8086 bandeiras regista ao campo de x.
flags nos outregs. Os inregs e os outregs podem apontar à mesma estrutura. Deixar-nos ver os exemplos destas funções. O exemplo do uso da função dos intdos foi dado abaixo. Este programa obtem a informação selecionada sobre (1.44Mb, disco flexível da polegada de 3 ½) a movimentação de disco flexível. Este programa fornece a informação do alocamento de um disco flexível.
/* A informação do alocamento da movimentação começar para o uso do disco */
#include <dos.h> /* for intdos() and union REGS */
#include <stdio.h> /* for printf() */
union REGS inregs, outregs;
void main()
{
inregs.h.ah = 0x36; /* get disk free space
function number */
inregs.h.dl = 0x01; /* drive A: */
intdos(&inregs, &outregs);
printf("%d sectors/cluster,\n%d clusters,\n%d bytes/sector,
\n%d total clusters",
outregs.x.ax,outregs.x.bx,
outregs.x.cx, outregs.x.dx);
getch();
}
And output of the program will be like this:
1 setor/conjunto,
1933 conjuntos,
512 bytes/setor,
2843 conjuntos totais |
|