Como usar CALL interrupção com QB, Basic PDS & VB (concluído)

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 43534
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
As informações neste artigo também estão incluídas no arquivo de Ajuda fornecido com o padrão e Professional Editions do Microsoft Visual Basic para MS-DOS, versão 1.0.

As instruções CALL INTERROMPER e CALL INTERRUPTX documentadas nesta nota do aplicativo são semelhantes às instruções CALL INT86 e CALL INT86X tem suportadas no QuickBasic para MS-DOS, versões 2.0, 2.01 e 3.0. As instruções CALL INT86 e CALL INT86X também fornecer acesso ao ROM BIOS e ao MS-DOS interrupções, mas usam uma interface de matriz em vez de tipos definidos pelo usuário. CHAMAR INT86 e CALL INT86X estão documentadas em páginas 148 149 do manual do "Microsoft QuickBasic Compiler" para QuickBasic para MS-DOS, versões 2.0, 2.01 e 3.0. Embora existam diferenças, algumas das informações na Observação aplicativo será útil para aqueles que usam QuickBasic para MS-DOS, versões 2.0, 2.01 e 3.0.
Mais Informações
CALL interrupção é uma declaração complicada que permite aos programadores tem acesso a informações de MS-DOS e ROM BIOS e controle baixo nível do Basic. Uso efetivo da interface CALL INTERROMPER complexa requer uma compreensão do ambiente de programação básico, a linguagem Basic e funções de MS-DOS e ROM BIOS de nível inferior. Este artigo explica muitos desses recursos necessários, incluindo o seguinte:

  1. Bibliotecas e bibliotecas rápidas
  2. Tipos definidos pelo usuário
  3. INCLUDE arquivos
  4. CALL INTERROMPER entrada e saída
  5. Exemplo de interrupção de chamar
  6. Diferenças entre chamar INTERROMPEM e CALL INTERRUPTX
  7. Referências para documentação sobre interrupções
A instrução CALL INTERROMPER foi projetada para chamar somente interrupções do MS-DOS e não é suportada no modo protegido do MS OS/2. Maioria das funções fornecidas pelo MS-DOS interrupções está disponíveis no modo protegido do MS OS/2, mas é acessadas por meio de chamadas de API (application programming interface). A maioria das interrupções irão funcionar corretamente em modo real dos / 2 (MS-DOS versão 3.x caixa).

Bibliotecas e bibliotecas rápidas

O código de objeto para as rotinas de interrupção está localizado nos arquivos VBDOS.LIB, VBDOS.QLB, QB.LIB, QB.QLB, QBX.LIB e QBX.QLB, que são fornecidos com o Visual Basic para MS-DOS, versão 1.0; e QuickBasic para MS-DOS versões 4.0, 4.0b e o compilador 4,5; e básica para MS-DOS, versões 6.0 e 6.0b.

A diferença entre bibliotecas de LINK (LIB arquivos) e bibliotecas rápidas (QLB arquivos) é que bibliotecas rápidas servem como módulos de código executável para uso dentro do ambiente VBDOS ou QuickBasic e bibliotecas LINK são usadas em tempo de link para produzir programas executáveis.

Para carregar uma biblioteca rápida para uso com o ambiente VBDOS ou QuickBasic, você deve iniciar VBDOS ou QuickBasic com a opção /L (isto é, /L VBDOS VBDOS.QLB ou QB /L QB.QLB ou QBX /L QBX.QLB). Isso permitirá que você faça chamadas para as rotinas nessa biblioteca rápida. Quando você abre o menu Executar e escolha criar EXE arquivo, o programa será vinculado automaticamente com a biblioteca (arquivo LIB) do mesmo nome de sua biblioteca rápido (no caso, VBDOS.LIB, QB.LIB ou QBX.LIB).

Tipos definidos pelo usuário

Para usar a instrução CALL INTERROMPER, você deve primeiro criar um tipo definido pelo usuário-para conter os registros para a interrupção. Os tipos definidos no arquivo de INCLUDE (VBDOS.BI, QB.BI ou QBX.BI) que acompanham o Visual Basic for MS-DOS, versão 1.0, QuickBasic para MS-DOS versões 4.0, 4.0b e 4.50, e Basic PDS para MS-DOS, versões 7.0 e 7.1 são da seguinte maneira:
TYPE RegType     ax    AS INTEGER     bx    AS INTEGER     cx    AS INTEGER     dx    AS INTEGER     bp    AS INTEGER     si    AS INTEGER     di    AS INTEGER     flags AS INTEGEREND TYPE				
TYPE RegTypeX                     ' See Note below.     ax    AS INTEGER     bx    AS INTEGER     cx    AS INTEGER     dx    AS INTEGER     bp    AS INTEGER     si    AS INTEGER     di    AS INTEGER     flags AS INTEGER     ds    AS INTEGER     es    AS INTEGEREND TYPE				
Observação: RegTypeX é usado com a instrução CALL INTERRUPTX, que lhe permite especificar os registradores DS e ES. Para obter mais informações sobre INTERRUPTX CALL, consulte a seção "Diferenças entre CALL INTERROMPER e CALL INTERRUPTX" na página 4 desta anotação de aplicativo.

INCLUDE arquivos

Para simplificar a definição de tipo de interrupções, o INCLUDE arquivo VBDOS.BI, QB.BI ou QBX.BI é fornecido com o Visual Basic para MS-DOS, versão 1.0, com QuickBasic para MS-DOS versões 4.0, 4.0 e 4.5, com o compilador básica para MS-DOS, versões 6.0 e 6.0b e Basic PDS para MS-DOS, versões 7.0 e 7.1. VBDOS.BI QB.BI e QBX.BI têm as definições de tipo (consulte a página 3 desta anotação de aplicativo de exemplo do tipo) e SUB declarações necessárias para interrupções. Para usar esse arquivo, coloque o INCLUDE $ metacommand no início do seu código. A sintaxe dessa instrução é da seguinte maneira:
   ' Use the following include statement for Visual Basic for MS-DOS:   REM $INCLUDE: 'VBDOS.BI'   ' Use the following include statement for QuickBasic for MS-DOS:   REM $INCLUDE: 'QB.BI'   ' Use the following include statement for Basic PDS for MS-DOS:   REM $INCLUDE: 'QBX.BI'				
entre Observe o seguinte:

  1. O INCLUDE $ metacommand é colocado em uma instrução REM (comentário).
  2. Dois-pontos (:) segue $ INCLUDE.
  3. O nome do arquivo VBODS.BI, QB.BI ou QBX.BI está entre aspas simples ('VBDOS.BI' ou 'QB.BI' ou 'QBX.BI').

CHAMAR interrupção entrada e saída

Além do número de interrupção, há dois outros parâmetros para a instrução CALL INTERROMPER: registra a entrada e registra a saída. Antes de usar esses registros, você deve dimensão duas variáveis como o RegType definido anteriormente, da seguinte maneira:
   DIM inregs AS RegType, outregs AS RegType				
para a maioria das interrupções, você precisa passar algumas informações (número da função, parâmetros da função) em um ou mais registradores. Esta atribuição é feita em elementos individuais do inregs de tipo definido pelo usuário, como o seguinte:
   inregs.AX = &H1A00				
Observe que a atribuição acima usa valores hexadecimais--indicados pela "& H"--em vez de valores decimais. A maioria das referências para interrupções usar números hexadecimais em vez de números decimais porque bytes (00) baixas e alta (1A) são mais fáceis distinguir em notação hexadecimal.

Para alguns interrupções, é necessário definir o byte de ordem alta ou baixa-ordem de um registro. Esses bytes são chamados nas especificações técnicas com H e L substituindo X. Por exemplo, os bytes altos e baixos do registro BX são BH e BL, respectivamente. Para atribuir os registros quando determinado altos e baixos bytes, concatene os valores hexadecimais. Por exemplo, se você precisar atribuir CH o valor 2B hex e atribuir CL o hex 3D do valor, você poderia atribuir CX da seguinte maneira:
   inregs.CX = &H2B3D     ' High byte = &H2B    Low byte = &H3D				
se você tem apenas 1 byte (alto ou baixo), outro byte deve ser atribuído 00 (dois zeros). Por exemplo, você definiria AH para o valor 01 hex da seguinte maneira:
   inregs.AX = &H0100     ' High byte = &H01    Low byte = &H00				
Observação: A instrução acima não é equivalente a inregs.AX=&H01. Você deve especificar o byte de ordem inferior ou o valor será armazenado como & H0001.

Depois de ter definido os valores de registradores entrados, você estará pronto para fazer a chamar. A sintaxe CALL INTERROMPER é da seguinte maneira:
   CALL INTERRUPT(IntNum%, inregs, outregs)				
se uma interrupção retorna quaisquer valores, esses valores serão passados novamente na variável outregs. Como com inregs, valores geralmente serão passados nos bytes altos ou baixos de um registro. A rotina BreakWord() na seção "Exemplo CALL INTERROMPER" abaixo interrompe um registro para os valores de 2 bytes.

Com muitos interrupções, você precisará verificar apenas um único bit (ou alguns bits) de qualquer registro. Isso é feito usando operadores AND, OR bit a bit XOR e não. Por exemplo, a instrução a seguir irá verificar se o terceiro bit do AX é definido:
   IF (outregs.AX AND &H4) THEN     ' 4 in hex = 100 in binary     PRINT "3rd Bit is on"   END IF				

Exemplo de interrupção de chamar

O programa a seguir fornece um exemplo da instrução CALL INTERROMPER e fornece dois programas SUB utilitário para processamento de saída:
'__________________________ INTSKEL.BAS _________________________''     Skeleton program for calling MS-DOS or ROM BIOS Interrupts from'     from Visual Basic, QuickBasic, or Basic PDS.''     To try this example in VBDOS.EXE:'     1. From the File menu, choose New project.'     2. Copy the code example to the Code window.'     3. Press F5 to run the program.'''     NOTE: The VBDOS and QuickBasic environments must be started'           with the /L option to load the default Quick library.'           The VBDOS.QLB, QB.QLB, or QBX.QLB Quick libraries provide'           support for CALL INTERRUPT and CALL INTERRUPTX.''     There are also two SUBPROGRAMS, BreakWord() and IntToBin(), that'     you may find useful when CALLing Interrupts.'_________________________________________________________________DEFINT A-ZCONST TRUE = -1CONST FALSE = NOT TRUE      ' FALSE is assigned to 0 here.' Use the following include file for Visual Basic for MS-DOS:REM $INCLUDE: 'VBDOS.BI'        ' Take a look at what is in this file.' Use the following include file for QuickBasic for MS-DOS:REM $INCLUDE: 'QB.BI'           ' Take a look at what is in this file.' Use the following include file for Basic PDS for MS-DOS:REM $INCLUDE: 'QBX.BI'          ' Take a look at what is in this file.DIM inregs AS RegType, outregs AS RegType'---------------------------------------------------------------------' Load Registers with the required input parameters for the call that' you want to make. (See any reference for MS-DOS and/or ROM BIOS'  calls.)'' Example: for Interrupt 10h, with function 0Ah (ROM BIOS Write Char)'          AH = 0Ah. Note: The function number usually goes in AH.'          AL = Character Code (ASCII).'          BH = Video Page Number = 0 normally.'          BL = Color in graphics mode.'          CX = Number of these characters to write to screen.'--------------------------------------------------------------------CLScharacter% = &HFB    ' ASCII character 251 decimal, square root symbol.functnum% = &HA00    ' Remember you want the function in the HIGH Byte                     ' of AX.   ' VERY IMPORTANT! Don't put the function number into the wrong byte   ' of AX, or the program may hang or give unpredictable results!inregs.ax = character% OR &HA00inregs.cx = 2000      ' Fill the screen.CALL interrupt(&H10, inregs, outregs)DEFINT A-Z'_____________________________________________________________________''     BreakWord() takes an integer argument and returns two integers'     representing the high and low bytes of the original.'_____________________________________________________________________'SUB BreakWord (dataword, highbyte, lowbyte)   IF dataword < 0 THEN     highbyte = (dataword + 2 ^ 16) \ 256   ' Check for high BIT set.   ELSE     highbyte = dataword \ 256  ' Integer division to remove low byte.   END IF   lowbyte = dataword AND 255   ' AND operator to remove the top byte.END SUBDEFINT A-Z'_____________________________________________________________________''    The IntToBin() SUBprogram below takes an INTEGER argument'    and produces a binary string representation of the INTEGER.'_____________________________________________________________________'SUB IntToBin (byte%, bin$)bin$ = ""temp% = byte%FOR i = 0 TO 7     ' Loop through bits 0 through 7 (8 total).   IF temp% AND 1 THEN      bin$ = "1" + bin$   ELSE      bin$ = "0" + bin$   END IF   temp% = temp% \ 2  ' Division by 2 shifts right 1 binary digit                      ' (bit).NEXTEND SUB				

Diferenças entre chamar INTERROMPEM e CALL INTERRUPTX

As instruções CALL INTERROMPER e CALL INTERRUPTX são muito semelhantes. Qualquer instrução lhe permite fazer chamadas para MS-DOS e interrupções de ROM BIOS.

A única diferença é que com INTERRUPTX, você pode especificar os registradores DS e ES. (A documentação de interrupções--consulte a seguinte seção de referência--será estado se esses registros são necessários. Para a maioria das interrupções, DS e ES não são necessários.)

Interrupções de referências para documentação no

Os livros a seguir são excelentes recursos para diferentes interrupções disponíveis do MS-DOS e o BIOS ROM. Esteja ciente de que o código em desses catálogos é escrito em linguagem assembly; no entanto, o necessário de entrada e saída é fornecido por registro.

  1. Segunda edição por Ray Duncan, publicado pela Microsoft Press (1988), "Programação avançada do MS-DOS"
  2. "O novo Peter Norton guia do programador para o IBM PC & PS/2" por Peter Norton, publicado pela Microsoft Press (1988)
VBmsdos QuickBas BasicCom 1,00 2,00 2.01 3,00 4.00 4.00b 4.50 6.00 6.00b 7.00 7.10

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 43534 - Última Revisão: 12/04/2015 09:03:23 - Revisão: 2.1

Microsoft Visual Basic for MS-DOS, Microsoft QuickBasic 4.0, Microsoft QuickBASIC 4.0b, Microsoft QuickBasic 4.5 for MS-DOS, Microsoft BASIC Compiler 6.0, Microsoft BASIC Compiler 6.0b, Microsoft BASIC Professional Development System 7.0, Microsoft BASIC Professional Development System 7.1

  • kbnosurvey kbarchive kbmt kbcode KB43534 KbMtpt
Comentários