Home
        Tutorial Assembly
         Contents
1.         Os registradores  segundo seus respectivos nomes     AX Registrador Acumulador       BX Registrador Base   CX Registrador Contador   DX Registrador de Dados   DS Registrador de Segmento de Dados   ES Registrador de Segmento Extra   SS Registrador de Segmento de Pilha   CS Registrador de Segmento de C  digo  BP Registrador Apontador da Base   SI Registrador de   ndice Fonte  DI Registrador de   ndice Destino   SP Registrador Apontador de Pilha   IP Registrador Apontador da Pr  xima Instru    o  F Registrador de Flag                               2 3 3 Programa Debug        Para a cria    o de um programa em assembler existem 2 op    es  usar o TASM   Turbo  Assembler da Borland  ou o DEBUGGER  Nesta primeira se    o vamos usar o debug  uma  vez que podemos encontr   lo em qualquer PC com o MS DOS                             Debug pode apenas criar arquivos com a extens  o  COM  e por causa das  caracter  sticas deste tipo de programa  eles n  o podem exceder os 64 Kb  e tamb  m  devem iniciar no endere  o de mem  ria 0100H dentro do segmento espec  fico  O  importante observar isso  pois deste modo os programas  COM n  o s  o reloc  veis        Os principais comandos do programa debug s  o                    A Montar instru    es simb  licas em c  digo de m  quina   D Mostrar o conte  do de uma   rea da mem  ria   E Entrar dados na mem  ria  iniciando num endere  o espec  fico  G Rodar um programa execut  vel na mem  ria   N Dar nome a um programa   P Proceder  ou exec
2.         Vemos o valor 0002 no registrador AX  Teclamos  t  para executar a segunda  instru    o                          SE   Ax 0002 BX 0004 CX 0000 Dx 0000 SP FFEE BP 0000 S1I 0000 DI 0000  DS 0D62 ES 0D62 SS 0D62 CS 0D62 IP 0106 NV UP EI PL NZ NA PO NC  0D62 0106 01D8 ADD AX  BX       Teclando  t  novamente para ver o resultado da instru    o add      E       Ax 0006 BX 0004 CX 0000 DX 0000 SP FFEE BP 0000 SI 0000 DI 0000  DS 0D62 ES 0D62 SS 0D62 CS 0D62 IP 0108 NV UP EI PL NZ NA PE NC  0D62 0108 90 NOP                               A possibilidade dos registradores conterem valores diferentes existe  mas AX e BX  devem conter os mesmos valores acima descritos     Para sair do Debug usamos o comando  q   quit      2 3 6 Armazenando e carregando os programas     N  o seria pr  tico ter que digitar o programa cada vez que inici  ssemos o Debug  Ao  inv  s disso  podemos armazen   lo no disco  S   que o mais   interessante nisso    que um simples comando de salvar cria um arquivo com a  extens  o  COM  ou seja  execut  vel   sem precisarmos efetuar os processos de  montagem e liga    o  como veremos posteriormente com o TASM              Eis os passos para salvar um programa que j   esteja na mem  ria       Obter o tamnho do programa subtraindo o endere  o final do  endere  o inicial  naturalmente que no sistema hexadecimal   Dar um nome ao programa    Colocar o tamanho do programa no registrador CX      Mandar o debug gravar o programa em disco        Usando como exemplo o s
3.      stack    code  mov AH  1h  Int 21h  mov DL AL  sub DL  30h  cmp DL  9h  jle digit1  sub DL  7h   digitl   mov CL  4h  shl DL CL  int 21h  sub AL 30h  cmp AL  9h  jle digit2  sub AL  7h   digit2   add DL AL  mov AH  4Ch  Int 21h  End          Este programa 1  Segundo exemplo     nome do progra    model small         stack    code   PRINT AJ  MOV DL   A    MOV CX 10   PRINT LOOP   CALL WRITE  INC DL  LOOP PRINT  MOV AH  4Ch  INT 21h   PRINT AJ       WRITE CHAR      Fun    o 1 do DOS    1   o caracter e returna o c  digo ASCII ao registrador AL   move o c  digo ASCII para o registrador DL     subtrai de 30h para converter a um d  gito de 0 a 9     compara se o d  gito est   entre 0 9    se verdadeiro obt  m o primeiro n  mero  4 bits     se falso  subtrai de 7h para converter a uma letra A F        prepara para multiplicar por 16    multiplica para converter dentro dos 4 bits mais altos   obt  m o pr  ximo caracter    repete a opera    o de convers  o     compara o valor 9h com o conte  do do registrador AL   se verdadeiro  obt  m o segundo d  gito    se falso  subtrai de 7h        adiciona o segundo d  gito    fun    o 4Ch do DOS  exit     interrup    o 21h    finaliza o programa       dois caracteres e os imprime na tela    ma  two asm    PROC   move o character A para o registrador DL   move o valor decimal 10 para o registrador CX   este valor    usado para fazer la  o com 10 intera    es    _CHAR  Imprime o caracter em DL     Incrementa o valor do registrador DL  _LOOP
4.     O 3DH  Uso   Abre um arquivo e retorna um handle   Registradores de chamada   AH   3DH    AL   modo de acesso  DS DX   Nome do arquivo  no formato ASCII     Registradores de retorno        CF   0 AX   n  mero do handle se n  o h   erros  de outra forma CF   1 e AX   c  digo  de erro    01H se a fun    o n  o    v  lida  02H se o arquivo n  o foi encontrado  03H se o caminho  n  o foi   encontrado  04H se n  o h   handles dispon  veis  05H acesso negado  e OCH se o c  digo  de acesso n  o    v  lido        O handle retornado    de 16 bits        O c  digo de acesso    especificado da seguinte maneira     BITS  T o  DS Ma o 1                0  0 0 Apenas leitura   0O 0 1 Apenas escrita   gt  O O Leitura Escrita  x E     RESERVADO             FUN    O 3EH       Uso   Fecha um arquivo  handle    Registradores de chamada     AH   3EH  BX   N  mero do handle associado          Registradores de retorno     CF   0 se n  o h   erros  ou CF ser   1 e AX conter   o c  digo de erro  06H se o handle     inv  lido        Esta fun    o atualiza o arquivo e libera o handle que estava usando   FUN    O 3FH  Uso     Ler uma quantidade espec  fica de bytes de um arquivo aberto e armazen   los num  buffer espec  fico     5 1 4 2  Interrup    o 10h       Prop  sito  Chamar uma diversidade de fun    es do BIOS  Sintaxe     Int 10H           Ra   0     ta interrup    o tem v  rias fun    es  todas para entrada e sa  da de v  deo     Para acessar cada uma delas    necess  rio colocar o n  mero d
5.     es permitem usar a pilha para armazenar ou recuperar dados     POP  POPF  PUSH    PUSHF    INSTRU    O POP  Prop  sito  Recuperar uma parte de informa    o da pilha   Sintaxe     POP destino       Esta instru    o transfere o   ltimo valor armazenado na pilha para o operador de  destino  incrementa de 2 o registrador SP   Este incremento    duplo pelo fato de que a pilha do mais alto endere  o de mem  ria                para o mais baixo  e a pilha trabalha apenas com palavras  2 bytes  logo deve ser 2  o incremento de SP  na realidade 2 est   sendo subtra  do do tamanho real da pilha        INSTRU    O POPF       Prop  sito  Extrair os flags armazenados na pilha   Sintaxe     POPF       Este comando transfere os bits da palavra armazenada na parte mais alta da pilha  para registrador de flag        O modo da transfer  ncia    como se segue     BIT FLAG       CF  PE  AF  ZF  SF  TF  IF  DF  OF    How o tO e NOG    HH    Os locais dos bits s  o os mesmos para o uso da instru    o PUSHF     Uma vez feita a transfer  ncia o registrador SP    incrementado de 2  conforme vimos  anteriormente     INSTRU    O PUSH  Prop  sito  Coloca uma palavra na pilha     Sintaxe     PUSH fonte    A instru    o PUSH decrementa de dois o valor de SP e ent  o transfere o  conte  do do operador fonte para o novo endere  o desultante no registrador rec  m  modificado     O decremento no endere  o    duplo pelo fato de que quando os valores s  o  adicionados    pilha  que cresce do maior para o me
6.    0203   0205   0207   0209   020B   020D   020F    297  297   29   297  Z297  Z297  Z297  297  297    S       Este       Este    D       E A A E A A A    D   D   D     D     U U U UUU    I T A A    S o N  d T AS r S A E g E o e S E e S r E N NA s    0102  104  106  direita    SO o       O0000000           Oo0000  N  N    programa im    D  cimo exemplo    SD O O O  9 O E NO    oo  Q             Oo000000000000000       HRmMmoOWoJowHhHE    H  KI A A A a a a a  po ppa ap df ER dp dr    MOV  MOV    S        ZHP24oOR    O  E rs    HH PG a  J   w     Z  J    HR     go        Z  3                   O ZO  dot  lt SoOS    QU       vq  EE   lt  wW       Z    Eddie  How                      HUGO OUNHYU  A a E  TOW    J     0              U  Q             DO O ND OD o    DL  3A  0125   DL  07  21   20          AH 01  21  L AL  L 30  L 09  111  15 07  1 04  CE       L 30  L 09  11F   6 07  L AL       NO ros      DODOD OO    e      P  e o valor de BL   P  e o valor 04 em     Desloca os 4 bi     Adiciona 30 a DL       US     Compara Dl com 3A     Salta ao   Adiciona 07 a DL    Chama in   P  e o valor de    Transpor   Adiciona 30 a DL      Compara   Salta ao        Adiciona 07 a DL      Chama in       endere  o    Dl com 3A  endere  o 0125     em DL    CL    mais altos do n  mero ao nibble    0113      Finaliza o programa      Fun    o 1     Chama interrup    o   P  e o valor de AL    Subtrai 30 de DI    Compara DL com 09   Salta ao endere  o    Subtrai 07 de DI   P  e o valor 04 em      In
7.    AH   09H  DS DX   Endere  o de in  cio da cadeia de caracteres           Registradores de retorno     Nenhum        Esta fun    o mostra os caracteres  um por um  a partir do endere  o indicado nos  registradores DS DX at   encontrar um caracter    que    interpretado como fim da  cadeia     O recomendado usar a fun    o 40H ao inv  s desta     FUN    O 40H   Uso    Escrever num dispositivo ou num arquivo   Registradores de chamada    AH   40H   BX   N  mero do handle    CX   Quantidade de bytes a gravar  DS DX   urea ond st   o dado          Registradores de retorno     CF   0 se n  o houve erro       AX   N  mero de bytes escrito    CF   1 se houv rro       AX   C  digo de erro    Para usar esta fun    o para mostrar a informa    o na tela  fa  a o registrador BX ser  igual a 1  que    o valor default para o v  deo no DOS        FUN    O 01H    Uso    Ler um caracter do teclado e mostr   lo   Registradores de chamada   AH   01H   Registradores de retorno     AL   Caracter lido       O muito f  cil ler um caracter do teclado com esta fun    o  o c  digo   hexadecimal do caracter lido    armazenado no registrador AL  Nos caso de teclas  especiais  como as de fun    o F1  F2  al  m de outras  o registrador AL conter   o  valor 1  sendo necess  rio chamar a fun    o novamente para obter o c  digo daquele  caracter     FUN    O OAH  Uso   Ler caracteres do teclado e armazen   los num buffer     Registradores de chamada        AH   OAH  DS DX   Endere  o inicial da   rea de ar
8.    O primeiro modo de manusear arquivos tem sido usado desde o sistema    operacional CPM  muitos arquivos    T    vel    predecessor do DOS     logo permite certas compatibilidades com  lhos do CPM bem como com a vers  o 1 0 do DOS  al  m deste m  todo    permitir nos ter um n  mero ilimitado de arquivos abertos ao mesmo tempo  Se voc      quiser criar um    vol       Lume para o disco  a   nica forma    atrav  s deste m  todo     Depois de considerarmos as vantagens de FCB  o uso do m  todo de Canais de       Comunica    o    m    Para uma melhor facilidade   de Arquivo como FCI     5 2 2  M  todo FC        0100 100 DO TAT   NNNNNNN  NNNNNNN  So WwiswNH       5 2 2 1  INTRODU    O    H   dois tipos de FCB         Introdu    o     Abertura de arquivo    Criar um novo arquivo   Escrita segfencial   Leitura segfencial    Leitura e escrita rand   mica   Fechar um arquivo          uito simples e permite nos um melhor ma    r  O             nuseio de erros        daqui por diante nos referiremos aos Blocos de Controle    Bs e aos Canais de Comunica    o como handles     normal  cujo comprimento    37 bytes  e o extendido  com 44    bytes  Neste tutorial iremos assumir o primeiro  ou seja   estaremos fazendo refer  ncia ao tipo normal  37 bytes            quando falarmos em FCB     O FCB    composto de informa    es dadas pelo programador e por informa    es que ele  toma diretamente do sistema operacional  Quando estes tipos de arquivos s  o usados   s      poss  vel se trabalhar
9.    es da mesma  a primeira  l   um caractere do teclado  fun    o 1  e a segundo escreve um   caractere na tela  O programa l   caracteres do teclado at   encontrar um   ENTER                 Quinto exemplo                    a100   297D 0100 MOV AH  02   Fun    o 2  escreve um caractere na tela   297D 0102 MOV Cx 0008  P  e o valor 0008 no registrador CX   297D 0105 MOV DL  00  P  e o valor 00 no registrador DL   297D 0107 RCL BL 1  Rotaciona o byte em BL um bit para a esquerda  297D 0109 ADC DL 30  Converte o registrador de flag para 1  297D 010C INT 21   Chama interrup    o do DOS       297D 010E LOOP 0105  Salta se CX  gt  0 para o endere  o 0105  297D 0110 INT 20  Finaliza o programa       Este programa mostra na tela um n  mero bin  rio atrav  s de um ciclo  condicional  LOOP  usando a rota    o do byte                       Sexto exemplo   a100  297D 0100 MOV AH  02   Fun    o 2  escreve um caractere na tela   297D 0102 MOV DL  BL  P  e o valor de BL em DL  297D 0104 ADD DL  30  Adiciona o valor 30 a DL  297D 0107 CMP DL 3A   Compara o valor 3A com o conte  do de DL sem  afet   lo    seu valor apenas modifica o estado do flag de  carry  297D 010A JL 010F  salta ao endere  o 010f  se for menor  297D 010C ADD DL  07  Adiciona o valor 07 a DL  297D 010F INT 21   Chama interrup    o do DOS  297D 0111 INT 20  Finaliza o programa             Este programa imprime um valor zero em d  gitos hexadecimais     S  timo exemplo                                   a100   297D 0100 MOV
10.    o mascar  vel    aquela cujas fun    es s  o desativadas quando IF 0     INSTRU    O CMC  Prop  sito  Complementar o flag de carry   Sintaxe     CMC       Esta instru    o complementa o estado do flag CF  Se CF   0 a instru    o o  iguala a 1  Se CF   1  a instru    o o iguala a O        Poder  amos dizer qu la apenas inverte o valor do flag     INSTRU    O STC  Prop  sito  Ativar o flag de carry   Sintaxe     STC       Esta instru    o ajusta para 1 o flag CF     INSTRU    O STD  Prop  sito  Ativar o flag de endere  o   Sintaxe     STD       Esta instru    o ajusta para 1 o flag DF     INSTRU    O STI    Prop  sito  Ativar o flag de insterrup    o     Sintaxe     STI    i    Esta instru    o ativa o flag IF  e habilita interrup    es externas mascar  veis  que  s   funcionam quando IF   1         DA A RR RR                            CAP  TULO 5  INTERRUP    ES E GER  NCIA DE ARQUIVOS    Conte  do       1  Interrup    es    Gil  5 2 Gerenciamento de arquivos       Conte  do   5 1 1 Interrup    es de hardware interno  5 1 2 Interrup    es de hardware externo  5 1 3  Interrup    es de software   5 1 4  Interrup    es mais comuns          5 1 1  Interrup    es de hardware interno    Interrup    es internas s  o geradas por certos eventos que ocorrem durante a execu    o  de um programa        Este tipo de interrup    es s  o gerenciadas  na sua totalidade  pelo hardware e n  o     poss  vel modific   las           Um exemplo claro deste tipo de interrup    es    a que atuali
11.   297D 021F MOV AH 02  Fun    o 2  escreve um caractere na tela   297D 022 MOV DL AL  P  e o valor AL em DL   297D 0223 INT 21   Chama interrup    o do DOS   297D 0225 SUB AL 37  Subtrai 37 de AL   297D 0227 POP DX  Extrai o valor de DX da pilha   297D 0228 RET  Retorna o controle ao programa principal          Este programa se mant  m lendo caracteres at   receber um que possa ser  convertido para um n  mero hexadecimal        7 2 Exemplos de Programas com TASM    Nesta se    o forneceremos a voc   v  rios exemplos de programas a serem  montados fazendo uso do TASM da Borland        Procedimento   Para mont   los  siga os seguintes passos   Primeiro passo    Montar o programa  Por exemplo     C N gt tasm one asm  Turbo Assembler Version 2 0 Copyright  c  1988  1990 Borland International          Assembling file  one asm  Error messages  None  Warning messages  None  Passes  1  Remaining memory  471k   C    gt     Isto criar   um programa objeto com o mesmo nome do fonte  neste caso   one obj    Segundo passo    Criar o programa execut  vel  Por exemplo     C   gt tlink one obj  Turbo Link Version 3 0 Copyright  c  1987  1990 Borland International       C N gt        Isto cria o programa execut  vel com o mesmo nome do objeto com extens  o       diferente  on    Terceiro passo       Rodar o programa execut  vel  Basta digitar o nome do programa criado        Exemplos de Programas Assembly    Primeiro exemplo     nome do programa  one asm    r     model small                  
12.   La  o para imprimir 10 caracteres   Fun    o 4Ch  para sair ao DOS    Interrup    o 21h  ENDP  Finaliza o procedimento       PROC    WRITE                   MOV AH 2h   Fun    o 2h  imprime caracter   INT 21h   Imprime o caracter qu st   em DL   RET  Retorna o controle ao procedimento que chamou      CHAR ENDP   Finaliza o procedimento   END PRINT AJ  Finaliza o programa                   Este programa mostra os caracteres ABCDEFGHIJ na tela        Terceiro exemplo     nome do programa  three asm    model small                                             STACK   code  TEST WRITE HEX PROC  MOV DL 3Fh  Move o valor 3Fh para o registrador DL  CALL WRITE HEX  Chama a sub rotina  MOV AH  4CH   Fun    o 4Ch  INT 21h  Retorna o controle ao DOS  TEST WRITE HEX ENDP  Finaliza o procedimento  PUBLIC WRITE HEX                                                                                                                                            Este procedimento converte para hexadecimal o byte E   armazenado no registrador DL e mostra o d  gito E   Use WRITE HEX DIGIT    WRITE HEX PROC  PUSH CX  coloca na pilha o valor do registrador CX  PUSH DX  coloca na pilha o valor do registrador DX  MOV DH  DL  move o valor do registrador DL para o registrador DH  MOV CX 4  move o valor 4 para o registrador CX  SHR DL CL  CALL WRITE HEX DIGIT  mostra na tela o primeiro n  mero hexadecimal  MOV DL  DH  move o valor do registrador DH para o registrador DL  AND DL  0Fh  CALL WRITE HEX DIGIT  mos
13.   RET  Retorna o controle ao procedimento que chamou  WRITE CHAR ENDP   END TEST WRITE HEX  Finaliza o programa                         Quarto exemplo     nome do programa  four asm    model small                                          stack    code  TEST_WRITE_DECIMAL PROC  MOV DX  12345  Move o valor decimal 12345 para o registrador DX  CALL WRITE DECIMAL  Chama o procedimento  MOV AH  4CH   Fun    o 4Ch  INT 21h   Interrup    o 21h  TEST WRITE DECIMAL ENDP Finaliza o procedimento  PUBLIC WRITE DECIMAL                                                  Este procedimento escreve um n  mero de 16 bit como um n  mero 7     sem sinal em nota    o decimal     Use  WRITE HEX DIGIT    WRITE ECIMAL PROC             USH AX  P  e na pilha    D   P valor do registrador AX  PUSH CX  P  e na pilha   P   P    valor do registrador CX  USH DX  P  e na pilha valor do registrador DX  USH SI   P  e na pilha valor do registrador SI  MOV AX DX  move o valor do registrador DX para AX  MOV S1I 10  move o valor 10 para o registrador SI  XOR CX CX  zera o registrador CX          oooo          NON ZERO   XOR DX  DX  zera o registrador CX  DIV SI  diviz  o entre SI  PUSH DX  P  e na pilha o valor do registrador DX  INC CX   incrementa CX    OR AX AX  n  o zero  JNE NON ZERO salta para NON ZERO  WRITE DIGIT LOOP                 POP DX  Retorna o valor em modo reverso                                                       CALL WRITE HEX DIGIT  Chama o procedimento   LOOP WRITE DIGIT LOOP   loop  END DEC
14.   feita como se segue     NomeMacro MACRO  parfmetrol  parjfmetro2        Do mesmo modo que temos a funcionalidade dos parfmetros     poss  vel tamb  m a  cria    o de uma macro que n  o os possua        A diretiva de t  rmino da macro     ENDM  Um exemplo de uma macro para colocar o cursor numa determinada posi    o da tela     Pos MACRO Linha  Coluna    PUSH  PUSH  PUSH  MOV    MOV    MOV 1    INT  POP    POP      AX  BX  DX  H  02H    L  Coluna  H  O       A   MOV DH  Linha  D  B       POP AX    ENDM       Para u  instru    Pos 8     sar uma macro basta cham   la pelo seu nome         o na linguagem assembly     6     Biblioteca de Macros    tal como se fosse qualquer    Uma das facilidades oferecidas pelo uso de macros    a cria    o de    biblio  origin    A cria       tecas  que s  o grupo de macros     rias de arquivos diferentes         o destas bibliotecas    muito simples     podendo ser inclu  das num programa    Criamos um arquivo com todas as    macros que ser  o necess  rias e o salvamos como um arquivo texto     Para i    de mem       ncluir uma biblioteca num programa   Include NomedoArquivo na parte inicial do programa  antes da declara    o do modelo      ria     basta colocar a seguinte instru    o    Supondo que o arquivo de macros tenha sido salvo com o nome de MACROS TXT  a  instru    o Include seria utilizada do seguinte modo       In      cio do programa  Include MACROS  TXT     MODEL SMALL    DATA   Os dados v  o aqui    CODE  Inicio            O c  d
15.  1 3 Por que aprender Assembly     A primeira raz  o para se trabalhar com o assembler    a oportunidade de  conhecer melhor o funcionamento do seu PC  o que permite o desenvolvimento de  programas de forma mais consistente        A segunda raz  o    que voc   pode ter um controle total sobre o PC ao fazer uso do  assembler        Uma outra raz  o    que programas assembly s  o mais r  pidos  menores e mais poderosos  do que os criados com outras linguagens     Ultimamente  o assembler  montador  permite uma otimiza    o ideal nos  programas  seja no seu tamanho ou execuss  o     CAP  TULO 2  CONCEITOS B  SICOS             Conte  do     2 1 Descri    o b  sica de um sistema computacional   2 2 Conceitos b  sicos da Linguagem Assembly  2 3 Usando o programa debug       Esta sess  o tem o prop  sito de fazer um breve coment  rio a respeito dos  principais componentes de um sistema computacional  o que ir   permitir ao usu  rio  uma melhor compreens  o dos conceitos propostos no decorrer do tutorial     2 1 DESCRI    O DE UM SISTEMA COMPUTACIONAL             Conte  do      1 Processador Central   2 Mem  ria Principal   3 Unidades de Entrada e Sa  da    4  Unidades de Mem  ria Auxiliar    NNNDN  HHHHA       Sistema Computacional     Chamamos de Sistema Computacional a completa configura    o de um computador   incluindo os perif  ricos e o sistema operacional     2 1 1 Processador Central     O tamb  m conhecido por CPU ou Unidade Central de Processamento  que por sua vez     com
16.  5 Criando um programa assembly simples  2 3 6 Armazenando e carregando os programas    2 3 1 Processo de cria    o de programas     Para a cria    o de programas s  o necess  rios os seguintes passos     x    Desenvolvimento do algoritmo  est  gio em que o problema a ser  solucionado    estabelecido a melhor solu    o    proposta  cria    o  de diagramas esquem  ticos relativos    melhor solu    o proposta   Codifica    o do algoritmo  o que consiste em escrever o programa  em alguma linguagem de programa    o  linguagem assembly neste caso  espec  fico  tomando como base a solu    o proposta no passo  anterior    A transforma    o para a linguagem de m  quina  ou seja  a cria    o  do programa objeto  escrito como uma segf  ncia de zeros e uns que  podem ser interpretados pelo processador    O   ltimo est  gio    a elimina    o de erros detectados no programa  na fase de teste  A corre    o normalmente requer a repeti    o de  todos os passos  com observa    o atenta                       2 3 2  Registradores da CPU     Para o prop  sito did  tico  vamos focar registradores de 16 bits  A CPU   possui 4 registradores internos  cada um de 16 bits  S  o eles AX  BX  CX e DX  S  o  registradores de uso geral tamb  m podem ser usados como   registradores de 8 bits  Para tanto devemos referenci   los como  por   exemplo  AH e AL  que s  o  respectivamente  o byte high e o low do   registrador AX  Esta nomenclatura tamb  m se aplica para os registradores BX  CX e    DX            
17.  AH  02   Fun    o 2  escreve um caractere na tela   297D 0102 MOV DL  BL  P  e o valor de BL em DL   297D 0104 AND DL  OF  Transporta fazendo AND dos n  meros bit a bit  297D 0107 ADD DL  30  Adiciona 30 a D1   297D 010A CMP DL 3A   Compara Dl com 3A   297D 010D JL 0112  Salta ao endere  o 0112  se menor  297D 010F ADD DL  07  Adiciona 07 a DL   297D 0112 INT Zi    Chama interrup    o do DOS   297D 0114 INT 20  Finaliza o programa   Este programa    usado para imprimir dois d  gitos hexadecimais              Oitavo exemplo                                            a100   297D 0100 MOV AH  02  Fun    o 2  escreve um caractere na tela   297D 0102 MOV DL  BL  P  e o valor de BL em DL   297D 0104 MOV CL  04  P  e o valor 04 em CL   29 D 0106 SHR DL  CL  Desloca os 4 bits mais altos do n  mero ao nibble  mais    direita   297D 0108 ADD DL  30  Adiciona 30 a DL   297D 010B CMP DL  3A  Compara Dl com 3A   297D 010E JL 0113  Salta ao endere  o 0113  se menor  297D 0110 ADD DL  07  Adiciona 07 a DL   297D 0113 INT 21   Chama interrup    o do DOS   297D 0115 INT 20  Finaliza o programa   Este programa imprime o primeiro de dois d  gitos hexadecimais           Nono exemplo     a100  297D 0100 MOV AH  02  Fun    o 2  escreve um caractere na tela     297  297  297  mai  297  297  297  297  297  297  297  297    297   297  29   29   297        a100  D     293  297  297  297  297  297  297  297  297  297  297  297  297  297  297  297        a100  D   D     297  297     a200    0200   0201
18.  International       C    gt     Quinto passo       Executar o programa     C   gt exam2  enter   x    C N gt        Este programa imprime o caracter   na tela     Clique aqui para obter mais programas    3 4 Tipos de instru    es     3 4 1 Movimento de dados   2 0pera    es l  gicas e aritm  ticas  3 4 3 Saltos  la  os e procedimentos    Ww  A          3 4 1 MOVIMENTO DE DADOS                Em qualquer programa h   necessidade de se mover dados na mem  ria e em  registradores da CPU  h   v  rios modos de se faz   lo  pode se copiar os dados da  mem  ria para algum registrador  de registrador para registrador  de um registrador  para a pilha  da pilha para um registrador  transmitir dados para um dispositivo  xterno vice versa               Ra   0     te movimento de dados    sujeito a regras e restri    es  entre elas      N  o    poss  vel mover dados de um local da mem  ria para outro diretamente      necess  rio primeiro mover o dado do local de origem para um registrador e ent  o do  registrador para o local de destino            N  o    poss  vel mover uma constante diretamente para um registrador de  segmento  primeiro deve se mover para um registrador        O poss  vel mover blocos de dados atrav  s de instru    es movs  que copia uma cadeia  de bytes ou palavras  movsb copia n bytes de um local para outro  e movsw copia n  palavras  A   ltima das duas instru    es toma os valores dos endere  os definidos por  DS SI como o grupo de dados a mover e ES DI como a nova 
19.  SI e DI com os endere  os das vari  veis VARI e  VAR2 respectivamente  ent  o ap  s a execu    o de MOVS o conte  do de VAR1    copiado  para VAR2           As instru    es MOVSB e MOVSW s  o usadas do mesmo modo que MOVS  a primeira move um  byte e a segunda move uma palavra     Instru    es de carga     S  o instru    es espec  ficas para registradores  usadas para carregar bytes ou  cadeias de bytes num registrador     ODS  LODSB   LODSW   LAHF   LDS   EA   ES                      INSTRU    ES LODS  LODSB   LODSW              Prop  sito  Carregar cadeias de um byte ou uma palavra para o acumulador   Sintaxe     LODS          Esta instru    o toma a cadeia encontrada no endere  o especificado por SI  a carrega  para o registrador AL  ou AX  e adiciona ou subtrai  dependendo do estado de DF   para SI se    uma transfer  ncia de bytes ou de palavras        MOV SI  OFFSET VAR1  LODS    Na primeira linha vemos a carga do endere  o de VAR1 em SI na segunda    tomado o  conte  do daquele local para o regiustrador AL           Os comandos LODSB e LODSW s  o usados do mesmo modo  o primeiro carrega um byte e o  segundo uma palavra  usa todo o registrador AX         INSTRU    O LAHF  Prop  sito  Transferir o conte  do dos flags para o registrador AH   Sintaxe     LAHF       Esta instru    o      til para verificar o estado dos flags durante a execu    o do nosso  programa        Os flags s  o deixados na seguinte ordem dentro do registrador        SE CZE 22 AB 2 2 BP SCE    O  22  
20.  arquivos e o programador pode concentrar se em outros aspectos da programa    o sem  preocupar se com detalhes que podem ser manuseados pelo sistema operacional           A facilidade dos handles consiste em que para operarmos sobre um arquivo    apenas  necess  rio definirmos o nome do mesmo e o n  mero de handle a usar  todo o resto da  informa    o    manuseada internamente pelo DOS     Quando usamos este m  todo para trabalhar com arquivos  n  o h   distin    o  ntre acesso segfencial ou rand   mico  o arquivo    simplesmente tomado como uma  rede de bytes           5 2 3 2  FUNE  ES PARA USAR HANDLES       As fun    es usadas para o manuseio de arquivos atrav  s de handles s  o  descritas na p  gina sobre  Interrup    es  na se    o dedicada    interrup    o 21h     DA A RR       CAP  TULO 6  MACROS E PROCEDIMENTOS                Conte  do    6 1 Procedimentos  6 2 Macros    6 1 Procedimentos   6 1 1 Defini    o de procedimento  6 1 2 Sintaxe de um procedimento  6 1 1 Defini    o de um procedimento       Um procedimento    uma cole    o de instru    es para as quais    poss  vel   direcionar o curso de nosso programa  e uma vez que a execu    o destas   instru    es do procedimento tenha acabado  o controle retorna para linha que segue     que chamou o procedimento        Procedimentos nos ajudam a criar programas leg  veis f  ceis de modificar     Quando se invoca um procedimento  o endere  o da pr  xima instru    o do  programa    mantido na pilha  de onde    recupera
21.  atual e  registro de um FCB aberto e coloca a informa    o na DTA  prea de  Transfer  ncia do Disco        FUN    O 22H    Uso        Escrita rand   mica num arquivo FCB   Registradores de chamada     AH   22H  DS DX   Ponteiro para um FCB aberto           Registradores de retorno           AL   00H se n  o h   erro  de outra forma conter   o c  digo de erro   1 se o disco est   cheio ou o arquivo    apenas de leitura e 2 se h   um erro na  especifica    o FCB              Escreve o registro especificado pelos campos do bloco atual e registro de um FCB  aberto  Esta informa    o    do conte  do da DTA        FUN    O 3CH    Uso        Criar um arquivo se n  o existe ou deix   lo com compirmento 0 se existe   Registradores de chamada   AH   3CH    CH Atributo do arquivo  DS DX   Nome do arquivo  no formato ASCII     Registradores de retorno     CF   0 e AX informa o n  mero do handle se n  o h   erro  Se caso houver erro   CF ser   1 e AX conter   o c  digo de erro  3 caminho n  o encontrado  4 n  o h   handles  dispon  veis 5 acesso negado           Esta fun    o substitui a fun    o 16H  O nome do arquivo    especificado numa cadeia  ASCII de bytes terminados pelo caracter 0     O arquivo criado conter   os atributos definidos no registrador CX  do  seguinte modo     Valor Atributos  00H Normal  02H Hidden  04H System  06H Hidden e System    O arquivo    criado com permiss  o de leitura e escrita  N  o    poss  vel a  cria    o de diret  rios atrav  s desta fun    o     FUN
22.  compara efetuando uma subtra    o entre o byte ou palavra   endere  ado por DI  dentro do segmento extra de dados  e o byte ou palavra  endere  ado por SI dentro do segmento de dados  afetando o registrador de flags  mas  sem devolver o resultado da subtra    o              A instru    o automaticamente incrementa ou decrementa os registradores de   ndice SI  e DI  dependendo do valor do flag DF  de modo a indicar os   pr  ximos dois elementos a serem comparados  O valor de incremento ou   decremento    uma de uma ou duas unidades  dependendo da natureza da   opera    o     Diante desta instru    o  pode se usar um prefixo para repeti    o  de modo a comparar    dois blocos de mem  ria entre si  repetindo a instru    o de  compara    o at   que ambos se tornem iguais ou desiguais     4 3 5  Instru    es de flag        E   0     tas instru    es afetam diretamente o conte  do dos flags       C  LD  I  CMC  STC  STD  STI       Gr       INSTRU    O CLC  Prop  sito  Limpar o flag de carry   Sintaxe     CLC          Esta instru    o desliga o bit correspondente ao flag de carry  Em outras  palavras  ela o ajusta para zero     INSTRU    O CLD  Prop  sito  Limpar o flag de endere  o   Sintaxe     CLD       Esta instru    o desliga o bit correspondente ao flag de endere  o     INSTRU    O CLI  Prop  sito  Limpar o flag de interrup    o   Sintaxe   CLI    Esta instru    o desliga o flag de interrup    es  desabilitando  deste modo   interrup    es mascar  veis           Uma interrup 
23.  na  mem  ria  O qu le faz    desmontar o c  digo e mostr   lo em assembly  Os parfmetros  indicam ao Debug os endere  os inicial e final a serem desmontados              O Debug sempre carrega os programas na mem  ria no endere  o 100h  conforme j    comentamos     DA A RR RR    CAP  TULO 3  PROGRAMA    O ASSEMBLY             Conte  do       Construindo programas em Assembly     Processo Assembly      Pequenos programas em Assembly   Tipos de instru    es    OU w  E GN HH    3 1 Construindo programas em Assembly     3 1 1 Software necess  rio  3 1 2 Programa    o Assembly             3 1 1 SOFTWARE NECESS  RIO             Para que possamos criar um programa  precisamos de algumas ferramentas     Primeiro de um editor para criar o programa fonte  Segundo de um montador  um  programa que ir   transformar nosso fonte num programa objeto  E  terceiro  de um  linker  ligador  que ir   gerar o programa execut  vel a partir do programa objeto        O editor pode ser qualquer um que dispusermos  O montador ser   o TASM macro  assembler da Borland  e o linker ser   o TLINK  tamb  m da Borland              N  s devemos criar os programas fonte com a extens  o  ASM para que o TASM reconhe  a  e o transforme no programa objeto  um  formato intermedi  rio  do programa  assim  chamado porque ainda n  o    um programa execut  vel e t  o pouco um programa fonte  O  linker gera a partir de um programa  OBJ  ou da combina    o de v  rios deles  um  programa execut  vel  cuja extens  o    nor
24.  no diret  rio corrente  pois FCI     sistema de organiza    o de arquivos atrav  s de dire                FCB    composto pelos seguintes campos                             Bs n  o fornecem suporte ao    t  rios do DOS           POSI    O COMPRIMENTO SIGNIFICADO  00H 1 Byte Drive  01H 8 Bytes Nome do arquivo  09H 3 Bytes Extens  o  OCH 2 Bytes N  mero do bloco  OEH 2 Bytes Tamanho do registro  10H 4 Bytes Tamanho do arquivo  14H 2 Bytes Data de cria    o  16H 2 Bytes Hora de cria    o  18H 8 Bytes Reservado  20H 1 Bytes Registro corrente  21H 4 Bytes Registro rand   mico  Para selecionar o drive de trabalho  assuma  drive A   1  drive B   2  etc   Se for usado 0  o drive qu st   sendo usado no momento ser   tomado como op    o   O nome do arquivo deve ser justificado    esquerda    necess  rio preencher com    espa  os os bytes remanescentes  a extens  o    colocada do mesmo modo        O bloco corrente e o registro corrente dizem ao computador que registro ser    acessado nas opera    es de leitura e escrita  Um bloco    um grupo de 128 registros   O primeiro bloco de arquivo    o bloco 0  O primeiro registro    o registro 0  logo o    ltimo registro do primeiro bloco deve ser o 127  uma vez que a numera    o     iniciada com 0 e o bloco pode conter 128 registradores no total        5 2 2 2 ABERTURA DE ARQUIVO                Para abrir um arquivo FCB    usada a fun    o OFH da interrup    o 21h   A unidade  o nome e a extens  o do arquivo devem ser inicializadas antes da  a
25.  passo    iniciar o Debug  o que j   vimos como fazer anteriormente        Para montar um programa no Debug     usado o comando  a   assemble   quando usamos   este comando  podemos especificar um endere  o inicial para o nosso programa como o  parfmetro  mas    opcional  No caso de omiss  o  o endere  o inicial    o especificado  pelos registradores CS IP  geralmente 0100h  o local em que programas com extens  o     COM devem iniciar  E ser   este o local que usaremos  uma vez que o Debug s   pode  criar este tipo de programa           Embora neste momento n  o seja necess  rio darmos um parfmetro ao comando  a   isso     recomend  vel para evitar problemas  logo     a 100T Tenter    mov ax  0002  enter   mov bx  0004  enter   add ax bx  enter   nop  enter   enter        O que o programa faz  Move o valor 0002 para o registrador ax  move o valor 0004  para o registrador bx  adiciona o conte  do dos registradores ax e bx  guardando o  resultado em ax e finalmente a instru    o nop  nenhuma opera    o  finaliza o  programa     No programa debug  a tela se parecer   com        C    gt debug    a 100   D62 0100 mov ax  0002  D62 0103 mov bx  0004  D62 0106 add ax hbx  D62 0108 nop  D62 0109    Oo 000 0     2        ntramos com o comando  t  para executar passo a passo as instru    es                             Ax 0002 BX 0000 CX 0000 DxXx 0000 SP FFEE BP 0000 S1I 0000 DI 0000  DS 0D62 ES 0D62 SS 0D62 CS 0D62 IP 0103 NV UP EI PL NZ NA PO NC  0D62 0103 BB0400 MOV BX  0004        
26.  pilha o valor inicial do registrador AX  RET  Retorna o controle ao procedimento que chamou  CHAR ENDP       Ea     WRITE                               END TEST WRITE DECIMAL  finaliza o programa                Este programa mostra na tela os n  meros 12345  Quinto exemplo     nome do programa  five asm    model small     stack     code    PRINT_ASCII PROC  MOV DL  00h  move o valor 00h para o registrador DL    MOV CX 255    PRINT LOOP    CALL WRITE   INC DL   LOOP PRINT  MOV AH  4Ch  INT 21h   _ ASCII    T          PRINT    WRITI        Ra    Qd HS Q    HAR  OV AH 2h  T 21h    m    AR    Hz       WRITI       ESI             END PRINT       _ CHAR       LOOP    ENDP       PROC    ENDP       JABCIT     move o valor decimal 255 para o registrador CX   usado para fazer um la  o com 255 intera    es      Chama o procedimento que imprime     Incrementa o valor do registrador DL   Loop para imprimir 10 caracteres     Fun    o 4Ch     Interrup    o 21h    Finaliza o procedimento      Fun    o 2h para imprimir um caracter    Imprime o caracter qu st   em DL   Retorna o controle ao procediemento que chamou   Finaliza o procedimento              Finaliza o programa    Este programa mostra na tela o valor dos 256 caracteres do c  digo ASCII     
27.  pot  ncia e   para a  multiplica    o     2 2 1 4 Convertendo n  meros decimais para bin  rio       H   v  rios m  todos para se converter n  meros decimais para bin  rio  apenas um ser    analizado aqui  Naturalmente a convers  o com uma calculadora cient  fica    muito  mais f  cil  mas nem sempre podemos contar com isso  logo o mais conveniente     ao  menos  sabermos uma f  rmula para faz   la        O m  todo resume se na aplica    o de divis  es sucessivas por 2  mantendo o resto como  o d  gito bin  rio e o resultado como o pr  ximo n  mero a ser  dividido        Tomemos como exemplo o n  mero decimal 43              43 2 21 o resto    1  21 2 10 o resto    1  10 2 5 o resto    0   5 2 2 o resto    1  2 2 1 o resto    0  1 2 0 o resto    1              Para construir o equivalente bin  rio de 43  vamos pegar os restos obtidos de baixo  para cima  assim temos 101011     2 2 1 5 Sistema hexadecimal  Na base hexadecimal temos 16 d  gitos  que v  o de 0 a 9 e da letra A at   a F  estas    letras representam os n  meros de 10 a 15  Portanto contamos   0 1 2 3 4 5 6 7 8 9 A B C D E  e F                 A convers  o entre n  meros bin  rios e hexadecimais    f  cil  A primeira coisa a fazer     dividir o n  mero bin  rio em grupos de 4 bits  come  ando da direita para a  esquerda  Se no grupo mais    direita sobrarem d  gitos  completamos com zeros        Tomando como exemplo o n  mero bin  rio 101011  vamos dividi lo em grupos de 4 bits   10 1011   Preenchendo o   ltimo gru
28. AS DE EQUIVAL  NCIA                   Cada uma das partes numa linha de c  digo assembly    conhecida como token  por  exemplo        MOV AX  Var    Aqui temos tr  s tokens  a instru    o MOV  o operador AX e o operador VAR  O que o  montador faz para gerar o c  digo OBJ    ler cada um dos tokens e procurar a  equival  ncia em c  digo de m  quina em tabelas correspondentes  seja de palavras  reservadas  tabela de c  digos de opera    o  tabela de s  mbolos  tabela de literais   onde o significado dos mnem   nicos e os endere  os dos s  mbolos que usamos ser  o  encontrados                    A maioria dos montadores s  o de duas passagens  Em s  ntese na primeira   passagem temos a defini    o dos s  mbolos  ou seja  s  o associados endere  os a todas  as instru    es do programa  Seguindo este processo  o assembler l   MOV procura o  na tabela de c  digos de opera    o para encontrar seu equivalente na linguagem de  m  quina  Da mesma forma ele l   AX ncontra o na tabela correspondente como sendo  um registrador  O processo para Var    um pouco diferenciado  o montador verifica  que ela n  o    uma palavra reservada  ent  o procura na tabela de s  mbolos  l    encontrando a ele designa o endere  o correspondente  mas se n  o encontrou ele a  insere na tabela para que ela possa receber um endere  o na segunda passagem  Ainda  na primeira passagem    executado parte do processamento das diretivas     importante  notar que as diretivas n  o criam c  digo objeto  Na passagem doi
29. Faz a nega    o do operador de destino bit a bit   Sintaxe   NOT destino    O resultado    armazenado no mesmo operador de destino     INSTRU    O OR  Prop  sito  Realiza um OU l  gico   Sintaxe     OR destino  fonte       A instru    o OR  faz uma disjun    o l  gica bit a bit dos dois operadores     Fonte Destino   Destino    INSTRU    O TEST       Prop  sito  Compara logicamente os operadores   Sintaxe     TEST destino  fonte          Realiza uma conjun    o  bit a bit  dos operadores  mas difere da instru    o AND  uma  vez que n  o coloca o resultado no operador de destino  Tem efeito sobre o  registrador de flag     INSTRU    O XOR  Prop  sito  Realiza um OU exclusivo   Sintaxe     XOR destino  fonte       Esta instru    o realizxa uma disjun    o exclusiva de dois operadores bit a bit     Fonte Destino   Destino    4 2 2  Instru    es aritm  ticas     S  o usadas para realizar opera    es aritm  ticas nos operadores     H  lt U       nnHZHOPS          os  w    INSTRU    O ADC       Prop  sito  Efetuar a soma entre dois operandos com carry   Sintaxe     ADC destino  fonte       Esta instru    o efetua a soma entre dois operandos  mais o valor do flag CF   xistente antes da opera    o  Apenas o operando destino e os flags s  o afetados        O resultado    armazenado no operador de destino     INSTRU    O ADD  Prop  sito  Adi    o de dois operadores   Sintaxe     ADD destino  fonte       Esta instru    o adiciona dois operadores e armazena o resultado no operador destin
30. IMAL    POP SI  retira da pilha o valor do registrador SI   POP DX  retira da pilha o valor do registrador DX   POP CX  retira da pilha o valor do registrador CX   POP AX  retira da pilha o valor do registrador AX   RET  Retorna o controle ao procedimento que chamou  WRITE DECIMAL ENDP   Finaliza o procedimento   PUBLIC WRITE HEX DIGIT                                                                                               Este procedimento converte os 4 bits mais baixos do registrador DL     num n  mero hexadecimal e os imprime    Use  WRITE CHAR    WRITE HEX DIGIT PROC   PUSH DX  P  e na pilha o valor do registrador DX   CMP DL 10   Compara o valor 10 com o valor do registrador DL   JAE HEX LETTER  se n  o  salta para HEX LETER   ADD DL  O   se     converte em d  gito num  rico   JMP Short WRITE DIGIT  escreve o caracter  HEX LETTER   ADD DL   A  10   Converte um caracter para um n  mero hexadecimal  WRITE DIGIT    CALL WRITE CHAR  mostra o caracter na tela   POP DX  Retorna o valor inicial para o registrador DL   RET  Retorna o controle ao procedimento que chamou  WRITE HEX DIGIT ENDP                            PUBLIC WRITE CHAR    m   0   cq  D  5  BR  O  Q  D  o   H   3  D  a  ct  O  H   3      BR  H   3  D      3  Q  w  B  w  Q  pira  D  BR  IB   w  ct  D  HH  w  G  u   o3   m  o   O  c  3  w  Hh  c  e  Q  DM  O  ap   O  v          CHAR PROC   PUSH AX  P  e na pilha o valor do registrador AX   MOV AH 2h  Fun    o 2h   INT 21h   Interrup    o 21h   POP AX  Retira da
31. TJ          T UTOR  TALL DE LINGUAGEM ASSEMBLY             Conte  do       Introdu    o     Conceitos B  sicos      Programa    o Assembly     Instru    es Assembly     Interrup    es e ger  ncia de arquivos    Macros e procedimentos      Exemplos de programas       JOS UMa WMNH       DA A    CAP  TULO 1  INTRODU    O  Conte  do    1 0 que h   de novo neste material    1  1 2 Apresenta    o  1 3 Por que aprender Assembly        1 1 0 que h   de novo neste material     Uma sess  o completa sobre como usar o programa debug    Mais exemplos de programas    Um motor de pesquisa  para qualquer t  pico ou item relacionado    esta  nova vers  o    Consider  vel reorganiza    o e revis  o do material Assembly    Em cada sess  o  h   um link para o Dicion  rio On line de Computa    o de  Dennis Howe           1 2 Apresenta    o        Este tutorial destina se   quelas pessoas que nunca tiveram contato com a Linguagem  Assembly     O tutorial est   completamente focado em computadores com processadores 80x86 da  fam  lia Intel  e considerando que a base da linguagem    o funcionamento dos  recursos internos do processador  os exemplos descritos n  o s  o compat  veis com  qualquer outra arquitetura    As informa    es est  o dispostas em unidades ordenadas para permitir f  cil acesso a  cada t  pico  bem como uma melhor navega    o pelo tutorial        Na sess  o introdut  ria s  o mencionados alguns conceitos elementares sobre  computadores e a Linguagem Assembly em si                
32. a fun    o  correspondente no registrador AH        Veremos apenas as fun    es mais comuns da interrup    o 10H     Fun    o 02H  seleciona a posi    o do cursor   Fun    o 09H  exibe um caracter e o atributo na posi    o do cursor  Fun    o OAH  exibe um caracter na posi    o do cursor   Fun    o 0EH  modo alfanum  rico de exibi    o de caracteres        ral       Fun    o 02h  Uso   Move o cursor na tela do computador usando o modo texto     Registradores de chamada     AH   02H   BH   P  gina de v  deo onde o cursor est   posicionado   DH   linha   DL   coluna       Registradores de retorno        Nenhum   A posi    o do cursor    definida pelas suas coordenadas  iniciando se na    posi    o 0 0 at   a posi    o 79 24  Logo os valores poss  veis para os  registradores DH e DL s  o  de 0 a 24 para linhas e de O a 79 para colunas     Fun    o 09h  Uso     Mostra um determinado caracter v  rias vezes na tela do computador com um atributo  definido  iniciando pela posi    o atual do cursor     Registradores de chamada        AH   09H   AL   Caracter a exibir   BH   P  gina de v  deo  onde o caracter ser   mostrado  BL   Atributo do caracter       CX   N  mero de repeti    es        Registradores de retorno     Nenhum       Esta fun    o mostra um caracter na tela v  rias vezes  de acordo com o n  mero  especificado no registrador CX  mas sem mudar a posi    o do cursor na tela     Fun    o 0Ah  Uso     Exibe um caracter na posi    o atual do cursor        Registradores de cha
33. adores  Mas agora  se a mem  ria do PC    dividida em  grupos de segmentos  cada um com 65536 locais  e podemos usar um endere  o ou  registrador exclusivo para encontrar cada segmento  e ainda   fazemos cada endere  o de um espec  fico slot com dois registradores  nos    poss  vel  acessar a quantidade de 4294967296 bytes de mem  ria  que       atualmente  a maior mem  ria que podemos instalar num PC              Desta forma  para que o montador seja capaz de gerenciar os dados  se faz  necess  rio que cada informa    o ou instru    o se encontre na   rea  correspondente ao seu segmento  O endere  o do segmento    fornecido ao  montador pelos registradores DS  ES  SS e CS  Lembrando um programa no  Debug  observe                    1CB0 0102 MOV AX BX             O primeiro n  mero 1CB0  corresponde ao segmento de mem  ria que est   sendo usado  o  segundo    uma refer  ncia ao endere  o dentro do segmento     um deslocamento dentro  do segmento offset        O modo usado para indicar ao montador com quais segmentos vamos trabalhar    fazendo  uso das diretivas  CODE   DATA e  STACK        O montador ajusta o tamanho dos segmentos tomando como base o n  mero de   bytes que cada instru    o assembly precisa  j   que seria um desperd  cio de mem  ria  usar segmentos inteiros  Por exemplo  se um programa precisa de apenas 10Kb para  armazenar dados  o segmento de dados seria apenas de 10Kb e n  o de 64Kb  como  poderia acontecer se feito manualmente                 3 2 2  TABEL
34. adores de chamada     AH   01H  DX Porta       Registradores de retorno     AH   Status da impressora    suportam 4     A porta definida no registrador DX pode ser  LPT1I 0  LPT2 1  assim por    diante   O estado da impressora    codificado bit a bit como segue     BIT 1 0 SIGNIFICADO          O 1 Estado de time out  i    1 Erro de entrada e sa  da  1 Impressora selecionada  1 Fim de papel  1  1       Reconhecimento de comunica    o  A impressora est   pronta para o uso       JOS MB wUN    Os bits 1 e 2 bits n  o s  o relevantes  Fun    o 02h   Uso    Obter o status da impressora   Registradores de chamada     AH   01H  DX Porta    Registradores de retorno  AH   Status da impressora    A porta definida no registrador DX pode ser  LPT1 0  LPT2 1   diante     O estado da impressora    codificado bit a bit como segue     BIT 1 0 SIGNIFICADO       Estado de time out       Erro de entrada e sa  da   Impressora selecionada   Fim de papel   1 Reconhecimento de comunica    o   1 A impressora est   pronta para o uso             JOS UM WUNHO    Os bits 1 e 2 bits n  o s  o relevantes       5 2  Gerenciamento de Arquivos  Conte  do   5 2 1 Modos de trabalhar com arquivos  5 2 2  M  todo FCB   5 2 3 M  todos de canais de comunica    o       5 2 1 Modos de trabalhar com arquivos     assim por       H   dois modos de trabalhar com arquivos  O primeiro    atrav  s de FCB    blocos de controle de arquivo   o segundo    atrav  s de canais de    comunica    o  tamb  m conhecidos como handles  
35. alto condicional    Sintaxe    JA s  mbolo   Ap  s uma compara    o este comando salta se n  o    igual     Isto quer dizer que o salto s      feito se o flag CF ou o flag ZF est  o  desativados  ou seja  se um dos dois for zero     a         JNB           INSTRU    O JA    Prop  sito  Salto condicional   Sintaxe     JAE s  mbolo       A instru    o salta se est   up  se est   equal ou se est   not down        O salto    feito se CF est   desativado     INSTRU    O JB  JNAE              Prop  sito  Salto condicional   Sintaxe     JB s  mbolo       A instru    o salta se est   down  se est   not up ou se est   equal     O salto    feito se CF est   ativado                 INSTRU    O JBE  JNA   Prop  sito  Salto condicional   Sintaxe     JBE s  mbolo             A instru    o salta se est   down  se est   equal ou se est   not up        O salto    feito se CF ou ZF est  o ativados  ou seja  se um deles for 1        INSTRU    O JE  JZ   Prop  sito  Salto condicional     Sintaxe        JE s  mbolo    A instru    o salta se est   equal ou se est   zero           O salto    feito se ZF est   ativado     INSTRU    O JNE  JNZ        Prop  sito  Salto condicional     Sintaxe     JNE s  mbolo       A instru    o salta se est   not equal ou se est   zero     O salto    feito se ZF est   desativado           INSTRU    O JG  JNLI     Ra   lt      Prop  sito  Salto condicional  e o sinal    tomado     Sintaxe   JG s  mbolo  A instru    o salta se est   larger     O salto ocorre se ZF   0 
36. astando digitar o novo  valor e pressionar  Enter   Se voc   simplesmente pressionar  Enter  o valor antigo  se mant  m              2 3 4 Estrutura Assembly     Nas linhas do c  digo em Linguagem Assembly h   duas partes  a primeira    o nome da  instru    o a ser executada  a segunda  os parfmetros do comando  Por exemplo     add ah bh    Aqui  add     o comando a ser executado  neste caso uma adi    o  e  ah  bem como  bh   s  o os parfmetros     Por exemplo   mov al  25    No exemplo acima  estamos usando a instru    o mov  que significa mover o  valor 25 para o registrador al        O nome das instru    es nesta linguagem    constitu  do de 2  3 ou 4 letras  Estas  instru    es s  o chamadas mnem   nicos ou c  digos de opera    o  representando a fun    o  que o processador executar        s vezes instru    es aparecem assim     add al   170        Os colchetes no segundo parjfmetro indica nos que vamos trabalhar com o   conte  do da c  lula de mem  ria de n  mero 170  ou seja  com o valor contido no  endere  o 170 da mem  ria e n  o com o valor 170  isto    conhecido como  endere  amento  direto      2 3 5 Criando um programa simples em assembly        N  o nos responsabilizaremos pela m   execu    o ou poss  veis danos causados por  quaisquer exemplos que de agora em diante aparecer  o  uma vez que os mesmos  apesar  de testados  s  o de car  ter did  tico  Vamos  ent  o  criar um programa para ilustrar  o que vimos at   agora  Adicionaremos dois valores     O primeiro
37. basta substituir a palavra Near para  FAR        A chamada deste procedimento    feito de modo id  ntico    Call Soma   Macros oferecem uma grande flexibilidade na programa    o  comparadas aos  procedimentos    6 2 Macros     Defini    o de uma Macro      Sintaxe de uma Macro    Bibliotecas de Macros    SS o  N N MN  CN HH       6 2 1 Defini    o de uma Macro    Uma macro    um grupo de instru    es repetitivas em um programa que s  o  codificadas apenas uma vez e  assim  poupam espa  o  podendo ser utilizadas tantas  vezes quantas forem necess  rio     A principal diferen  a entre uma macro e um procedimento    que numa macro    poss  vel  a passagem de parfmetros e num procedimento n  o  No momento em que a macro     executada  cada parfmetro    substitu  do pelo nome ou valor especificado na hora da  chamada        Podemos dizer  desta forma  que um procedimento    uma extens  o de um  determinado programa  enquanto que uma macro    um m  dulo que especifica  fun    es que podem ser utilizadas por diferentes programas           Uma outra diferen  a entre uma macro e um procedimento    o modo de chamada de cada  um  Para chamar um procedimento  se faz necess  rio a diretiva CALL  por outro lado   para chamada de macros    feita com se fosse uma instru    o normal da linguagem  assembly        6 2 2  Sintaxe de uma Macro   As partes que comp  em uma macro s  o as seguintes   Declara    o da macro   C  digo da macro   Diretiva de t  rmino da macro   A declara    o da macro  
38. bertura        O registrador DX deve apontar para o bloco  Se o valor FFH    retornado no  registrador AH quando da chamada da interrup    o  ent  o o arquivo n  o foi  encontrado  Se tudo der certo  o valor 0    retornado     Se o arquivo    aberto  ent  o o DOS inicializa o bloco corrente em 0  o  tamanho do registro para 128 bytes  O tamanho do arquivo e a sua data s  o  preenchidos com as informa    es encontradas no diret  rio    5 2 2 3 CRIAR UM NOVO ARQUIVO   Para a cria    o de arquivos    usada a fun    o 16H da interrup    o 21h    O registrador DX deve apontar para uma estrutura de controle cujo os    requisitos s  o de que pelo menos a unidade l  gica  o nome e a extens  o do arquivo  sejam definidas        Caso ocorra problema  o valor FFH deve retornar em AL  de outra forma este  registrador conter   o valor 0        5 2 2 4  ESCRITA SEQSENCIA                   Antes de conseguirmos realizar escrita para o disco     necess  rio definir a   rea de  transfer  ncia de dados usando  para tanto  a fun    o 1AH da interrup    o 21h        A fun    o 1AH n  o retorna qualquer estado do disco nem da opera    o  Mas a fun    o  15H  que usaremos para escrever para o disco  faz isso no registrador AL  Se este  for igual a zero  ent  o n  o h   erro e os campos de registro corrente e de bloco s  o  atualizados                 5 2 2 5 LEITURA SEQSENCIAL       Antes de tudo  devemos definir a   rea de transfer  ncia de arquivo ou DTA   Para a leitura segfencial usaremos a fu
39. correspondent    d    rro retornar                1 erro no fim do arquivo  2 erro na estrutura FCB 3 erro de leitura parcial     O que esta fun    o faz    ler o pr  ximo bloco de informa    es do endere  o dado por    DS DX  e atualizar este registro     FUN    O 15H    Uso        Escrita sequencial e arquivo FCB   Registradores de chamada     AH   15H  DS DX   Ponteiro para um FCB ja aberto           Registradores de retorno     AL   00H se n  o h   erros  de outra forma conter   o c  digo de erro  1 disco cheio  ou arquivo somente de leitura  2 erro na forma    o ou na especifica    o do FCB           A fun    o 15H atualiza o FCB ap  s a escrita do registro para o presente  bloco     FUN    O 16H    Uso        Criar um arquivo FCB  Registradores de chamada        AH   16H  DS DX   Ponteiro para um FCB j   aberto        Registradores de retorno     AL   00H se n  o h   erros  de outra forma conter   o valor OFFH        O baseada na informa    o advinda de um FCB para criar um arquivo num disco     FUN    O 21H    Uso        Ler de modo rand   mico um arquivo FCB   Registradores de chamada     AH   21H  DS DX   Ponteiro para FCB aberto           Registradores de retorno     A   00H se n  o h   erro  de outra forma AH conter   o c  digo de erro   1 se    o fim do arquivo  2 se h   um erro de especifica    o no FCB e 3 se um registro  foi lido parcialmente ou o ponteiro de arquivo est   no fim do mesmo           Esta fun    o l   o registro especificado pelos campos do bloco
40. do quando do retorno do  procedimento        6 1 2 Sintaxe de um procedimento    H   dois tipos de procedimentos  os intrasegments  que se localizam no mesmo  segmento da instru    o que o chama  e os inter segments  que podem se localizar em  diferentes segmentos de mem  ria        Quando os procedimentos intrasegments s  o usados  o valor de IP    armazenado na  pilha e quando os procedimentos inter segments s  o usados o valor de CS IP     armazenado  Lembre se que o registrador CS indica qual o segmento de c  digo           A diretiva que chama um procedimento    como segue    CALL NomedoProcedimento   As partes que comp  em um procedimento s  o as seguintes   Declara    o do procedimento   C  digo do procedimento    Diretiva de retorno  T  rmino do procedimento       Por exemplo  se quisermos uma rotina que soma dois bytes armazenados em AH AL   o resultado da soma em BX                    Soma Proc Near   Declara    o do Procedimento   Mov BX  0   Conte  do do Procedimento      Mov BL  AH   Mov AH  00   Add BX  AX   Ret   Diretiva de retorno   Soma EndP   Fim do Procedimento   Na declara    o  a primeira palavra  Soma  corresponde ao nome do    procedimento  Proc declara o e a palavra Near indica que o procedimento    do tipo  intrasegment  ou seja  no mesmo segmento  A diretiva Ret carrega IP com o endere  o  armazenado na pilha para retornar ao programa que chamou  Finalmente  Soma EndP  indica o fim do procedimento        Para declarar um procedimento inter segment  
41. e um ao outro     Segundo exemplo    a100    0C1B 0100 jmp 125  Salta para o endere  o 125h  0C1B 0102  Enter                                        e 102  Hello  How are you    0d Oa  S      al25   0C1B 0125 MOV DX 0102  Copia a string para registrador DX  0C1B 0128 MOV Cx 000F  Quantas vezes a string ser   mostrada  0OC1B 012B MOV AH 09  Copia o valor 09 para registrador AH  0C1B 012D INT 21  Mostra a string   0C1B 012F DEC CX   Subtrai 1 de CX   0C1B 0130 JCXZ 0134  Se CX    igual a 0 salta para o endere  o 0134  0C1B 0132 JMP 012D  Salta ao endere  o 012D   0C1B 0134 INT 20  Finaliza o programa   Este programa mostra 15 vezes na tela a string de caracteres           Terceiro exemplo        a100   297D 0100 MOV AH 01   Fun    o para mudar o cursor  297D 0102 MOV Cx 0007  Formata o cursor   297D 0105 INT 10   Chama interrup    o do BIOS  297D 0107 INT 20  Finaliza o programa          Este programa muda o formato do cursor     Quarto exemplo                          a100   297D 0100 MOV AH 01   Fun    o 1  l   caractere do teclado   297D 0102 INT Zi   Chama interrup    o do DOS   297D 0104 CMP AL  OD   Compara se o caractere lido    um ENTER  297D 0106 JNZ 0100   Se n  o     l   um outro caractere  297D 0108 MOV AH  02   Fun    o 2  escreve um caractere na tela   29 D 010A MOV DL  AL  Character to write on AL   297D 010C INT 21   Chama interrup    o do DOS   297D 010E INT 20  Finaliza o programa                      Este programa usa a interrup    o 21h do DOS  Usa duas fun 
42. eguinte programa  vamos clarear a id  ia de como  realizar os passos acima descritos    0C1B 0100 mov ax  0002   0C1B 0103 mov bx  0004   0C1B 0106 add ax  bx   0C1B 0108 int 20   OC1B 010A    Para obter o tamanho de um programa  o comando  h     usado  j   que ele nos mostra a  adi    o e subtra    o de dois n  meros em hexadecimal  Para obter o tamanho do programa  em quest  o  damos como parfmetro o valor do endere  o final do nosso programa  10A    e o endere  o inicial  100   O primeiro resultado mostra nos a soma dos endere  os  o  segundo  a subtra    o         h 10a 100  020a 000a    O comando  n  permite nos nomear o programa    n test com    O comando  rcx  permite nos mudar o conte  do do registrador CX para o valor obtido  como tamanho do arquivo com o comando  h   neste caso 000a      rcx  cx 0000   000a    Finalmente  o comando  w  grava nosso programa no disco  indicando quantos bytes  gravou      wW  Writing 000A bytes    Para j   salvar um arquivo quando carreg   lo  2 passos s  o necess  rios     Dar o nome do arquivo a ser carregado   Carreg   lo usando o comando  1   load      Para obter o resultado correto destes passos     necess  rio que o programa acima j    esteja criado     Dentro do Debug  escrevemos o seguinte         n test com   1   u 100 109   0C3D 0100 B80200 MOV AX 0002  0C3D 0103 BB0400 MOV BxX 0004  0C3D 0106 01D8 ADD AX  BX  0C3D 0108 CD20 INT 20                      O   ltimo comando  u     usado para verificar que o programa foi carregado
43. ente da fun    o esteja no registrador AH no  momento da chamada da interrup    o     Fun    es para mostrar informa    es no v  deo   02H Exibe um caracter    09H Exibe uma cadeia de caracteres  40H Escreve num dispositivo arquivo       Fun    es para ler informa    es do teclado     01H Entrada do teclado  OAH Entrada do teclado usando buffer  3FH Leitura de um dispositivo arquivo             Fun    es para trabalhar com arquivos     Nesta se    o s  o apenas especificadas as tarefas de cada fun    o  para uma refer  ncia  acerca dos conceitos usados  veja Introdu    o ao gerenciamento de arquivos        M  todo FCB    OFH Abertura de arquivo  14H Leitura segfencial  15H Escrita segfencial  16H Cria    o de arquivo  21H Leitura rand   mica  22H Escrita rand   mica          Handles    3CH Cria    o de arquivo   3DH Abertura de arquivo   3EH Fechamento de arquivo   3FH Leitura de arquivo dispositivo   40H Escrita de arquivo dispositivo   42H Move ponteiro de leitura escrita num arquivo                   FUN    O 02H   Uso    Mostra um caracter na tela   Registradores de chamada     AH   02H  DL   Valor de caracter a ser mostrado     Registradores de retorno     Nenhum        Esta fun    o mostra o caracter cujo c  digo hexadecimal corresponde ao valor    armazenado no registrador DL  e n  o modifica nenhum registrador     O uso da fun    o 40H    recomendado ao inv  s desta fun    o     FUN    O 09H   Uso    Mostra uma cadeia de caracteres na tela   Registradores de chamada  
44. g  Normalmente os flags do registrador que podem ser manuseados  diretamente pelo programador s  o os da dire    o de dados DF  usado para definir as  opera    es sobre cadeias  Uma outro que pode tamb  m ser manuseado    o flag IF  atrav  s das instru    es sti e cli  para ativar e desativar as interrup    es                 3 4 3 SALTOS  LOOPS E PROCEDIMENTOS                Saltos incondicionais na escrita de programas em linguagem assembly s  o   dados pela instru    o jmp  um salto    usado para modificar a segf  ncia da execu    o  das instru    es de um programa  enviando o controle ao endere  o indicado  ou seja  o  registrador contador de programa recebe este novo endere  o        Um loop  tamb  m conhecido como intera    o     a repeti    o de um processo um certo  n  mero de vezes at   atingir a condi    o de parada        DA A A RR       CAP  TULO 4  INSTRU    ES ASSEMBLY                Conte  do     Hs      1  Instru    es de opera    o de dados   2  Instru    es l  gicas e aritm  ticas   3  Instru    es de controle de processos    A A    4 1  Instru    es de opera    o de dados          Conte  do    4 1 1  Instru    es de transfer  ncia   4 1 2  Instru    es de carga   4 1 3  Instru    es de pilha   4 1 1  Instru    es de transfer  ncia    S  o usadas para mover o conte  do dos operadores  Cada instru    o pode ser usada com  diferentes modos de endere  amento     MOV  MOVS  MOVSB   MOVSW        INSTRU    O MOV    Prop  sito  Transfer  ncia de dados entre c  lula
45. igo do programa come  a aqui      STACK    A pilha    declarada  End Inicio    Fim do programa       DA A RR    Conte      EX    CAP  TULO 7           EX          EMPLOS DE     x  E       do     emplos de Programas com Debug          NJ N  N he      Ex       emplos de Programas com TASM       PROGRAMAS       7 1 Exemplos de Programas com Debug    Nesta se    o forneceremos alguns programas feitos no debug do DOS   Voc   pode executar cada programa assembly usando o comando  g   go      cada programa faz     Procedimento    Primeiro passo    Carregar o programa exemplo    Por exemplo     C    gt debug     n one com         u 100 109  0D80 0100  0D80 0103    B80600  BB0400          0D80 0106 01D8  0D80 0108 CD20    Nota      n one com       MOV  MOV  ADD  INT    AX  0006       AX   20    BX  0004  BX       Dar nome ao programa a ser carregado    a    Carreg   lo     u 100 109    Desmontar o c  digo do endere  o inicial    Segundo passo    Digite o comando g    Por exemplo      g    Program terminated normally       Primeiro exemplo     a0100   297D 0100  297D 0103  297D 0106    MOV  MOV  ADD    Exemplos de programas no Debug    AX  0006  BX  0004  AX  BX          ao final especificado        P  e o val   P  e o val   Adiciona    Lor 0006 no registrador AX  Lor 0004 no registrador BX  BX ao conte  do de AX             para ver o que    297D 0108 INT 20  Finaliza o Programa    A   nica coisa que este programa faz    salvar dois valores em dois  registradores e adicionar o valor d
46. localiza    o dos dados              Para mover dados h   tamb  m estruturas chamadas pilhas  onde o dado     introduzido com a instru    o push e    extra  do com a instru    o pop    Numa pilha o primeiro dado a entrar    o   ltimo a sair  por exemplo   PUSH AX    PUSH BX  PUSH CX       Para retornar os valores da pilha referentes    cada registrador    necess  rio  seguir se a ordem     POP CX  POP BX  POP AX       Para a comunica    o com dispositivos externos o comando de sa  da    usado para o  envio de informa    es a uma porta e o comando de entrada    usado para receber  informa    o de uma porta    A sintaxe do comando de sa  da     OUT DX  AX    Onde DX cont  m o valor da porta que ser   usada para a comunica    o e AX  cont  m a informa    o que ser   enviada     A sintaxe do comando de entrada   IN AX  DX    Onde AX    o registrador onde a informa    o ser   armazenada e DX cont  m o  endere  o da porta de onde chegar   a informa    o        T    3 4 2  0PERA     ES L  GICAS E ARITMOTICAS                   As instru    es de opera    es l  gicas s  o  and  not  or e xor  Elas trabalham a n  vel  de bits em seus operadores           Para verificar o resultado das opera    es usamos as instru    es cmp e test     As instru    es usadas para opera    es alg  bricas s  o  para adi    o add  para subtra    o  sub  para multiplica    o mul e para divis  o div        Quase todas as instru    es de compara    o s  o baseadas na informa    o contida no  registrador de fla
47. lor num  rico e    capaz de ser  endere  ada  isto     pode ser identificada de forma singular em rela    o   s outras  c  lulas pelo uso de um n  mero ou endere  o        O nome gen  rico destas mem  rias    Random Access Memory ou RAM  A principal  desvantagem deste tipo de mem  ria    o fato de que seus circuitos integrados perdem  a informa    o que armazenavam quando a energia el  trica for interrompida  ou seja   ela    vol  til  Este foi o motivo que levou    cria    o de um outro tipo de mem  ria  cuja informa    o n  o    perdida quando o sistema    desligado  Estas mem  rias  receberam o nome de Read Only Memory ou ROM           2 1 3  Unidades de Entrada e Sa  da        Para que o computador possa ser   til para n  s se faz necess  rio que o  processador se comunique com o exterior atrav  s de interfaces que permitem a  entrada e a sa  da de informa    o entr 1l a mem  ria  Atrav  s do uso destas  comunica    es    poss  vel introduzir informa    o a ser processada e mais tarde  visualizar os dados processados           Algumas das mais comuns unidades de entrada s  o o teclado e o mouse  As mais comuns  unidades de sa  da s  o a tela do monitor e a impressora     2 1 4 Unidades de Mem  ria Auxiliar     Considerando o alto custo da mem  ria principal e tamb  m o tamanho das  aplica    es atualmente  vemos que ela    muito limitada  Logo  surgiu a  necessidade da cria    o de dispositivos de armazenamento pr  ticos e  econ  micos           Estes e outros inconvenien
48. mada           AH   0AH   AL   Caracter a exibir   BH   P  gina de v  deo onde o caracter ser   exibido  BL   Cor do caracter  apenas em modo gr  fico     CX   N  mero de repeti    es       Registradores de retorno        Nenhum     A principal diferen  a entr sta fun    o e a anterior    permitir mudan  a nos  atributos  bem como mudar a posi    o do cursor            El  am    Fun    o 01  Uso     Exibir um caracter na tela do computador atualizando a posi    o do cursor        Registradores de chamada           AH   0EH   AL   Caracter a exibir   BH   P  gina de v  deo onde o caracter ser   exibido  BL   Cor a usar  apenas em modo gr  fico        Registradores de retorno        Nenhum    5 1 4 3  Interrup    o 16H    Veremos duas fun    es da interrup    o 16H  A exemplo das demais interrup    es  usa se  o registrador AH para cham   las     Fun    es da interrup    o 16h    Fun    o 00H  l   um caracter do teclado   Fun    o 01H  l   o estado atual do teclado        Fun    o 00H Uso     Ler um caracter do teclado   Registradores de chamada   AH   00H   Registradores de retorno     AH    C  digo da tecla pressionada    AL    Valor ASCII do caracter    Quando se usa esta interrup    o  os programas executam at   que uma tecla seja  pressionada  Se    um valor ASCII     armazenado no registrador AH  Caso contr  rio  o  c  digo    armazenado no registrador AL e AH 0        Este valor de AL pode ser utilizado quando queremos detectar teclas que n  o st  o  diretamente represen
49. malmente  EXE  embora possa ser  COM  dependendo da forma como for montado e ligado                                3 1 2  PROGRAMA    O ASSEMBLY    Para construirmos os programas com o TASM  devemos estruturar o fonte de forma    diferenciada ao que faz  amos com o programa debug        O importante incluir as seguintes diretivas assembly          MODEL SMALL  Define o melo de mem  ria a usar em nosso programa            CODE         STACK       END  Finaliza um programa assembly    Vamos programar    Primeiro passo       Define as instru    es do programa  relacionado ao segmento de c  digo    Reserva espa  o de mem  ria para as instru    es de programa na pilha    Use qualquer editor para criar o programa fonte  Entre com as seguintes    linhas   Primeiro exemplo      use   para fazer coment  rios em programas assembly    MODEL SMALL  modelo de mem  ria         STACK  espa  o de mem  ria para instru    es do programa na pilha      CODE  as linhas seguintes s  o instru    es do programa  mov ah 0lh  move o valor Olh para o registrador ah  mov cx 07h  move o valor 07h para o registrador cx                     int 10h   interrup    o 10h  mov ah 4ch  move o valor 4ch para o registrador ah  int 21h   interrup    o 21h   END   finaliza o c  digo do programa       Este programa assembly muda o tamanho do cursor   Segundo passo    Salvar o arquivo com o seguinte nome  examl asm  N  o esquecer de salv   lo no formato ASCII        Terceiro passo    Usar o programa TASM para construi
50. mazenamento  BYTE 0   Quantidade de bytes na   rea             BYTE 1   Quantidade de bytes lidos  do BYTE 2 at   BYTE 0   2   caracteres lidos                   Registradores de retorno        Nenhum     Os caracteres s  o lidos e armazenados num espa  o de mem  ria que foi   definido  A estrutura deste espa  o indica que o primeiro byte representar   a  quantidade m  xima de caracteres que pode ser lida  O segundo  a quantidade de  caracteres lidos e  no terceiro byte  o inicio onde eles s  o armazenados        Quando se atinge a quantidade m  xima permitida  ouve se o som do speaker e qualquer       caracter adicional    ignorado  Para finalizar a entrada  basta digitar  ENTER               FUN    O 3FH   Uso    Ler informa    o de um dispositivo ou de um arquivo   Registradores de chamada    AH   3FH    BX N  mero do handle  CX   N  mero de bytes a ler          DS DX   urea para receber o dado    Registradores de retorno           CF   0 se n  o h   erro AX   n  mero de bytes lidos    CF   1 se h   erro AX conter   o c  digo de erro   FUN    O 0FH   Uso        Abrir um arquivo FCB   Registradores de chamada     AH   0FH  DS DX   Ponteiro para um FCB       Registradores de retorno     AL   00H se n  o h   problemas  de outra forma retorna 0OFFH  FUN    O 14H  Uso        Leitura sequencial num arquivo FCB   Registradores de chamada     AH   14H  DS DX   Ponteiro para um FCB j   aberto           Registradores de retorno     AL   0 se n  o h   erros  de outra forma o c  digo 
51. n    o 14H da interrup    o 21h     O registro a ser lido    definido pelos campos registro e bloco   corrente  O registrador AL retorna o estado da opera    o  Se AL cont  m o valor 1 ou  3  significa que foi atingido o fim do arquivo  Um valor 2  por sua vez  significa  que o FCB est   estruturado erroneamente              Caso n  o ocorra erro  AL conter   o valor 0 e os campos de registro e bloco corrente  s  o atualizados        5 2 2 6 LEITURA E ESCRITA RAND  MICA        Ra             A fun    o 21H e a fun    o 22H da insterrup    o 21h s  o usadas    realiza    o   respectivamente  da escrita e leitura rand   mica     O n  mero de registro rand   mico e o bloco corrente s  o usados para calcular a  posi    o relativa do registro a ser lido ou escrito        O registrador AL retorna a mesma informa    o do que par a escrita e leitura  sequencial  A informa    o a ser lida ser   retornada na   rea de transfer  ncia do  disco  bem como a informa    o a ser escrita retorna na DTA           5 2 2 7 FECHAR UM ARQUIVO   Para fechar um arquivo usamos a fun    o 10H da interrup    o 21h    Se ap  s invocar esta fun    o  o regisatrador AL conter o valor FFH  significa que o  arquivo foi mudado de posi    o  o disco foi mudado ou h   erro de acesso a disco   5 2 3 Canais de comunica    o       1 Trabalhando com handles   3 2 Fun    es para usar handles       5 2 3 1 TRABALHANDO COM HANDLES       O uso de handles para gerenciar arquivos traz grandes facilidades na cria    o de 
52. nce                 Este tipo de interrup    es podem ser separadas em duas categorias   Interrup    es do Sistema Operacional DOS e interrup    es do BIOS           A diferen  a entre ambas    que as interrup    es do sistema operacional s  o mais  f  ceis de usar  mas tamb  m s  o mais lentas  uma vez que acessam os servi  os do  BIOS  Por outro lado  interrup    es do BIOS s  o muito mais r  pidas  mas possuem a  desvantagem de serem parte do hardware  o que significa serem espec  ficas  arquitetura do computador em quest  o                 A escolha sobre qual o tipo de interrup    o usar ir   depender somente das  caracter  sticas que voc   deseja dar ao seu programa  velocidade  use BIOS    portabilidade  use DOS         5 1 4  Interrup    es mais comuns    Conte  do    5 1 4 1 Int 21H  Interrup    o do DOS   M  ltiplas chamadas    fun    es DOS     5 1 4 2 Int 10H  Interrup    o do BIOS   Entrada e Sa  da de V  deo     Ra  pa    5 1 4 3 Int 16H  Interrup    o do BIOS   Entrada e Sa  da do Teclado     Em   a                                   5 1 4 4 Int 17H  Interrup    o do BIOS   Entrada e Sa  da da Impressora     CE  D    5 1 4 1 Interrup    o 21H  Prop  sito  Chamar uma diversidade de fun    es DOS   Sintaxe     Int 21H       Nota  Quando trabalhamos com o programa TASM    necess  rio especificar que o valor  que estamos usando est   em hexadecimal           Esta interrup    o tem muitas fun    es  para acessar cada uma delas     necess  rio que o n  mero correspond
53. nor endere  o  logo quando  subra  mos de 2 o registrador SP o que fazemos    incrementar o tamanho da pilha em  dois bytes  que    a   nica quantidade de informa    o que a pilha pode manusear em  cada entrada e sa  da        INSTRU    O PUSHF  Prop  sito  Colocar os valores dos flags na pilha   Sintaxe     PUSHF       Este comando decrementa de 2 o valor do registrador SP e ent  o o conte  do do  registrador de flag    transferido para a pilha  no endere  o indicado por SP     Os flags s  o armazenados na mem  ria da mesma forma que o comando POPF     4 2  Instru    es l  gicas e aritm  ticas  Conte  do    4 2 1  Instru    es l  gicas   4 2 2  Instru    es aritm  ticas   4 2 1  Instru    es l  gicas    S  o usadas para realizar opera    es l  gicas nos operadores     HZ  QU        ea ro     xHO 2Z2Z  5  O   uv H   H    INSTRU    O AND   Prop  sito  Realiza a conjun    o de operadores bit a bit   Sintaxe    AND destino  fonte    Com esta instru    o a opera    o l  gica  y  para ambos os operadores    usada como na    tabela     Fonte Destino   Destino    O resultado desta opera    o    armazenado no operador de destino        INSTRU    O NEG  Prop  sito  Gera o complemento de 2   Sintaxe     NEG destino       Esta instru    o gera o complemento de 2 do operador destino e o armazena no mesmo  operador  Por exemplo  if AX armazena o valor 1234H  ent  o        NEG AX          Isto far   com o que o valor EDCCH fque armazenado no registrador AX     INSTRU    O NOT  Prop  sito  
54. o     INSTRU    O DIV  Prop  sito  Divis  o sem sinal   Sintaxe   DIV fonte    O divisor pode ser um byte ou uma palavra e    o operador que    dado na  instru    o     Se o divisor    de 8 bits  o registrador AX de 16 bits    tomado como  dividendo e se o divisor    de 16 bits  o par de registradores DX AX ser   tomado  como dividendo  tomando a palavra alta de DX e a baixa de AX     Se o divisor for um byte  ent  o o quociente ser   armazenado no registrador AL e o  resto em AH  Se for uma palavra  ent  o o quociente    armazenado em AX o resto em  DX        INSTRU    O IDIV  Prop  sito  Divis  o com sinal   Sintaxe    IDIV fonte    Consiste basicamente como a instru    o DIV  diferencia se apenas por realizar a  opera    o com sinal     Para os resultados s  o usados os mesmos registradores da instru    o DIV     INSTRU    O MUL  Prop  sito  Multiplica    o com sinal     Sintaxe     MUL fonte       Esta instru    o realiza uma multiplica    o n  o sinalizada entre o conte  do do  acumulador AL ou AX pelo operando fonte  devolvendo o resultado no acumulador AX  caso a opera    o tenha envolvido AL com um operando de 8 bits  ou em DX e AX caso a  opera    o tenha envolvido AX e um operando de 16 bits     INSTRU    O IMUL       Prop  sito  Multiplic    o de dois n  meros inteiros com sinal   Sintaxe     IMUL fonte       Esta instru    o faz o mesmo que a anterior  difere apenas pela inclus  o do sinal        Os resultados s  o mantidos nos mesmos registradores usados pela ins
55. op     ta instru    o decrementa CX de 1  Se CX    diferente de zero ZF    igual a 1   ent  o a execu    o do programa    transferida para o s  mbolo indicado como operador           INSTRU    O LOOPN        Ea    Prop  sito  Gerar um la  o no programa  considerando o estado de ZF   Sintaxe     OOPNE s  mbolo             Esta instru    o decrementa CX de 1 e transfere a execu    o do programa apenas se ZF     diferente de 0     4 3 3  Instru    es contadoras        Estas instru    es s  o usadas para decrementar ou incrementar o conte  do de  contadores     DEC       DEC INSTRUCTION       Prop  sito  Decrementar o operador     Sintaxe     KJ       EC destino       Esta instru    o subtrai 1 do operador destino e armazena o novo valor no  mesmo operador     INSTRU    O INC  Prop  sito  Incrementar o operador   Sintaxe     INC destino       Esta instru    o adiciona 1 ao operador destino mant  m o resultado no mesmo  operador        4 3 4  Instru    es de compara    o           Estas instru    es s  o usadas para comparar os operadores  las afetam o conte  do  dos flags     CMP  CMPS  CMPSB   CMPSW        INSTRU    O CMP  Prop  sito  Comparar os operadores   Sintaxe     CMP destino  fonte       Esta instru    o subtrai o operador fonte do destino  mas n  o armazena o  resultado da opera    o  apenas afeta o estado dos flags     INSTRU    O CMPS  CMPSB   CMPSNW        Prop  sito  Comparar cadeias de um byte ou uma palavra     Sintaxe     CMP destino  fonte       Esta instru    o
56. ou se OF    INSTRU    O JGE  JNL        Prop  sito  Salto condicional  e o  Sintaxe     JGE s  mbolo       se est   not larger ou se est   equal     Eo Ei    sinal       tomado     s st   less than ou se est   equal        A instru    o salta se est   larger     O salto    feito se SF   OF           INSTRU    O JL  JNGI     Ra   lt      Prop  sito  Salto condicional  e o  Sintaxe     JL s  mbolo    sinal    A instru    o salta se est   less than  se    equal           de OF        O salto    feito se SF    diferent    INSTRU    O JLE  JUNG        Prop  sito  Salto condicional  e o    Sintaxe     sinal       tomado     est   not larger than ou se est         tomado     JLE s  mbolo       A instru    o salta se est   less than  se est   equal ou se est   not larger     O salto    feito se ZF   1 ou se SF    diferente de OF           INSTRU    O JC  Prop  sito  Salto condicional  e os flags s  o tomados   Sintaxe   JC s  mbolo    A instru    o salta se h   carry        O salto    feito se CF   1     INSTRU    O JNC  Prop  sito  Salto condicional  e o estado dos flags    tomado   Sintaxe   JNC s  mbolo  A instru    o salta se n  o h   carry     O salto    feito se CF   0        INSTRU    O JNO  Prop  sito  Salto condicional  e o estado dos flags    tomado   Sintaxe   JNO s  mbolo    A instru    o salta se n  o h   overflow       O salto    feito se OF   0        INSTRU    O JNP  JPO   Prop  sito  Salto condicional  e o estado dos flags    tomado   Sintaxe   JNP s  mbolo    A inst
57. po com zeros  o um mais    esquerda     0010 1011    A seguir  tomamos cada grupo como um n  mero independente e consideramos o seu valor  decimal     0010 2 1011 11       Entretanto  observa se que n  o podemos representar este n  mero como 211  isto seria  um erro  uma vez que os n  meros em hexa maiores que 9 menores que 16 s  o             representados pelas letras A B     F  Logo  obtemos como resultado        2Bh  onde o  h  representa a base hexadecimal     Para a convers  o de um n  mero hexadecimal em bin  rio    apenas necess  rio inverter  os passos  tomamos o primeiro d  gito hexadecimal e o convertemos para bin  rio  a  seguir o segundo  e assim por diante              2 2 2  M  todos de representa    o de dados num computador    2 1 C  digo ASCII     2 2  M  todo BCD    2 3 Representa    o de ponto flutuante       ND MN MN  NNN    2 2 2 1 C  digo ASCII       ASCII significa American Standard Code for Information Interchange  Este c  digo  cont  m as letras do alfabeto  d  gitos decimais de 0 a 9 e alguns s  mbolos  adicionais como um n  mero bin  rio de 7 bits  tendo o oitavo bit em 0  ou seja   desligado     Deste modo  cada letra  d  gito ou caracter especial ocupa 1 byte na mem  ria do  computador     Podemos observar que este m  todo de representa    o de dados    muito   ineficiente no aspecto num  rico  uma vez que no formato bin  rio 1 byte n  o     suficiente para representar n  meros de 0 a 255  com o ASCII podemos representar  apenas um d  gito     De
58. posta pela unidade de controle e unidade de l  gica e aritm  tica    Sua fun    o consiste na leitura e escrita do conte  do das c  lulas de mem  ria   regular o tr  fego de dados entre as c  lulas de mem  ria e registradores especiais  e  decodificar e executar as instru    es de um programa        O processador tem uma s  rie de c  lulas de mem  ria usadas com frequ  ncia e  dessa  forma  s  o partes da CPU  Estas c  lulas s  o conhecidas com o nome de registradores   Um processador de um PC possui cerca de 14 registradores    Como os PCs tem sofrido evolu    o veremos que podemos manipular registradores de 16  ou 32 bits           A unidade de l  gica e aritm  tica da CPU realiza as opera    es relacionadas ao  c  lculo simb  lico e num  rico  Tipicamente estas unidades apenas s  o capazes de  realizar opera    es elementares  tais como  adi    o e subtra    o de dois n  meros             inteiros  multiplica    o e divis  o de n  mero inteiro  manuseio de bits de  registradores e compara    o do conte  do de dois registradores        Computadores pessoais podem ser classificados pelo que    conhecido como  tamanho da palavra  isto     a quantidade de bits que o processador    capaz de  manusear de uma s   vez     2 1 2 Mem  ria Principal     O um grupo de c  lulas  agora sendo fabricada com semi condutores  usada para  processamentos gerais  tais como a execu    o de programas e o armazenamento de  informa    es para opera    es     Cada uma das c  lulas pode conter um va
59. r o programa objeto        Exemplo     C   gt tasm examl asm  Turbo Assembler Version 2 0 Copyright  c  1988  1990 Borland          Assembling file  examl asm  Error messages  None  Warning messages  None    Passes  L    International    Remaining memory  471k       O TASM s   pode criar programas no formato  OBJ  que ainda n  o pode ser  executado       Quarto passo    Usar o programa TLINK para criar o programa execut  vel        Exemplo           C   gt tlink exam1 obj  Turbo Link Version 3 0 Copyright  c  1987  1990 Borland International       C    gt        Onde examl obj    o nome do programa intermedi  rio   OBJ  O comando acima gera  diretamente o arquivo com o nome do programa intermedi  rio e a extens  o  EXE  O  opcional a coloca    o da extens  o  obj no comando                 Quinto passo       Executar o programa execut  vel criado     C   gt exam1  enter        Lembre se  este programa assembly muda o tamanho do cursor no DOS     3 2 Processo Assembly     3 2 1 Segmentos  3 2 2 Tabela de equival  ncia       3 2 1 SEGMENTOS             A arquitetura dos processadores x86 for  a nos a usar segmentos de mem  ria para  gerenciar a informa    o  o tamanho destes segmentos    de 64Kb        A raz  o de ser destes 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  assim n  o seria poss  vel acessar mais do que 65536 locais da mem  ria  usando apenas um destes registr
60. ru    o salta se n  o h   paridade ou se a paridade      mpar     O salto    feito se PF   0        INSTRU    OO JNS  Prop  sito  Salto condicional  e o estado dos flags    tomado   Sintaxe   JNP s  mbolo  A instru    o salta se o sinal est   desativado     O salto    feito se SF   0        INSTRU    O JO  Prop  sito  Salto condicional  e o estado dos flags    tomado   Sintaxe   JO s  mbolo    A instru    o salta se h   overflow        O salto    feito se OF   1     INSTRU    O JP  JPI       Em         Prop  sito  Salto condicional  e o estado dos flags    tomado   Sintaxe   JP s  mbolo    A instru    o salta se h   paridade ou se a paridade    par        O salto    feito se PF   1        INSTRU    O JS  Prop  sito  Salto condicional  e o estado dos flags    tomado   Sintaxe   JS s  mbolo  A instru    o salta se o sinal est   ativado     O salto    feito se SF  1        4 3 2  Instru    es para la  os  LOOP        Estas instru    es transferem a execu    o do processo  condicional ou  incondicionalmente  para um destino  repetindo a a    o at   o contador ser zero        LOOP  OOPE  OOPNE                   INSTRU    O LOOP  Prop  sito  Gerar um la  o no programa   Sintaxe   LOOP s  mbolo    A instru    o LOOP decrementa CX de 1 e transfere a execu    o do programa para o  s  mbolo que    dado como operador  caso CX ainda n  o seja 1        FI    INSTRU    O LOOP   Prop  sito  Gerar um la  o no programa  considerando o estado de ZF   Sintaxe     OOPE s  mbolo             tr   
61. s de mem  ria  registradores e o  acumulador     Sintaxe   MOV Destino  Fonte    Destino    o lugar para onde o dado ser   movido e Fonte    o lugar onde o dado est                         Os diferentes movimentos de dados permitidos para esta instru    o s  o    Destino  mem  ria  Fonte  acumulador    Destino  acumulador  Fonte  mem  ria    Destino  registrador de segmento  Fonte  mem  ria registrador   Destino  mem  ria regitrador  Fonte  registrador de segmento   Destino  registrador  Fonte  registrador    Destino  registrador  Fonte  mem  ria    Destino  mem  ria  Fonte  registrador    Destino  registrador  Fonte  dado imediato    Destino  mem  ria  Fonte  dado imediato   Exemplo        MOV AX 0006h  MOV BX  AX  MOV AX  4C00h  INT 21h             Este pequeno programa move o valor 0006h para o registrador AX  ent  o ele move o  conte  do de AX  0006h  para o registrador BX  e finalmente move o valor 4C00h para  o registrador AX para terminar a execu    o com a op    o 4C da interrup    o 21h        INSTRU    ES MOVS  MOVSB   MOVSW           Prop  sito  Mover byte ou cadeias de palavra da fonte  endere  ada por SI  para o  destino endere  ado por DI     Sintaxe     MOVS       Este comando n  o necessita de parfmetros uma vez que toma como endere  o  fonte o conte  do do registrador SI e como destino o conte  do de DI  A  seguinte sequ  ncia de instru    es ilustra isso        T VARI  T VAR2    MOV SI  OFESI  MOV DI  OFFSI  MOVS          Primeiro inicializamos os valores de
62. s s  o montadas as  instru    es  traduzindo os c  digos de opera    o e procurando os endere  os    gerado o c  digo objeto                       H   s  mbolos que o montador n  o consegue encontrar  uma vez que podem ser  declara    es externas  Neste caso o linker entra em a    o para criar a estrutura  necess  ria a fim de ligar as diversas poss  veis partes de c  digo  dizendo ao loader  que o segmento o token em quest  o s  o definidos quando o programa    carregado  antes de ser executado                 3 3 Mais programas   Outro exemplo    Primeiro passo       Use qualquer editor crie o seguint      exemplo2     model small     stack     code   mov ah 2h move o valor 2h para o registrador ah  mov dl 2ah  move o valor 2ah para o registrador dl        o valor ASCII do caractere             int 21h   interrup    o 21h   mov ah 4ch  fun    o 4ch  sai para o sistema operacional  int 21h   interrup    o 21h  end  finaliza o programa    Segundo passo    Salvar o arquivo com o nome  exam2 asm  N  o esquecer de salvar em formato ASCII     Terceiro passo  Usar o programa TASM para construir o programa objeto     C   gt tasm exam2 asm  Turbo Assembler Version 2 0 Copyright  c  1988  1990 Borland International       Assembling file  exam2 asm  Error messages  None  Warning messages  None  Passes  1  Remaining memory  471k       Quarto passo  Usar o programa TLINK para criar o programa execut  vel     C   gt tlink exam2 obj  Turbo Link Version 3 0 Copyright  c  1987  1990 Borland
63. sere zeros       Li       Li    se menor    terrup    o do DOS  BL em DL  ta fazendo AND dos n  meros bit a bit    se menor    terrup    o do DOS    prime o segundo de dois d  gitos hexadecimais     do DOS  em DL    0111  se menor    CL    direita      Chama interrup    o do DOS   Subtrai 30 de Al    Compara AL com 09     Salt        Subtrai 07 de Al   Adiciona AL a D   Finaliza o programa    Li    Li          programa pode ler dois d  gitos hexadecimais     0100  0103                   D  cimo primeiro exemplo    0200  20    H  08    L  30  203  L  46  203  L  39  021B    DPODPOPNP            Chama um procedimento   Finaliza o programa    ta ao endere  o 011f  se menor     P  e o valor de DX na pilha    Fun    o 8      Chama interrup    o do DOS      Compara AL com 30      Sal      Compara AL com 46      Sal         Compara AL com 39      Sal       lta ao endere  o 02083        lta ao endere  o 021B     se diferent    se diferent     1   caractere do teclado     ou igual    ou igual    Lta se CF    ativado ao endere  o 0203    ES                                              297D 0211 MOV AH 02  Fun    o 2  escreve um caractere na tela   297D 0213 MOV DL AL  P  e o valor de AL em DL   297D 0215 INT 21   Chama interrup    o do DOS   297D 0217 SUB AL 30  Subtrai 30 de AL   297D 0219 POP DX  Extrai o valor de DX da pilha   297D 021A RET  Retorna o controle ao programa principal  297D 021B CMP AL  41  Compara AL com 41   29 D 021D JB 0203  Salta se CF    ativado ao endere  o 0203
64. significa que haver   um valor indefinido naqueles bits     INSTRU    O LDS       Prop  sito  Carregar o registrador de segmento de dados    Sintaxe    LDS destino  fonte   O operador fonte deve ser uma double word na mem  ria  A palavra associada com o  maior endere  o    transferida para DS  em outras palavras isto    tomado como o    ndere  o de segmento  A palavra associada com o menor endere  o    o endere  o d  deslocamento e    depositada no registrador indicado como destino           INSTRU    O LEA       Prop  sito  Carregar o endere  o do operador fonte   Sintaxe     LEA destino  fonte       O operador fonte deve estar localizado na mem  ria  e seu deslocamento     colocado no registrador de   ndice ou ponteiro especificado no destino     Para ilustrar uma das facilidades que temos com este comando  vejamos     MOV SI OFESET VAR1       O equivalente a     LEA SI VARI       O muito prov  vel que para o programador    muito mais f  cil criar programas grandes  usando este   ltimo formato        INSTRU    O LES       Prop  sito  Carregar o registrador de segmento extra    Sintaxe        LES destino  fonte    O operador fonte deve ser uma palavra dupla na mem  ria  O conte  do da   palavra com endere  o maior    interpretado como o endere  o do segmento e    colocado  em ES  A palavra com endere  o menor    o endere  o do deslocamento e    colocada no  registrador especificado no parj  metro de destino           Instru    es de manipula    o da pilha        Estas instru
65. tadas pelo seu valor ASCII  tais como   ALT   CONTROL         Fun    o Olh   Uso    Ler o estado do teclado   Registradores de chamada    AH   01H   Registradores de retorno    Se o registrador de flag    zero  significa que h   informa    o no buffer de eclado na    mem  ria  Caso contr  rio  o buffer est   vazio  Portanto o valor do registrador AH  ser   o valor da tecla armazenada no buffer     5 1 4 4  Interrup    o 17H  Prop  sito  Manusear a entrada e sa  da da impressora   Sintaxe     Int 17H       Esta interrup    o    usada para enviar caracteres  setar ou ler o estado de uma  impressora     Fun    es da interrup    o 17h  Fun    o 00H  imprime um valor ASCII  Fun    o 01H  seta a impressora    Fun    o 02H  l   estado da impressora    Fun    o 00H    Uso   Imprimir um caracter numa impressora   Registradores de chamada    AH   00H    AL Caracter a imprimir  DX Porta de conex  o    Registradores de retorno        AH   Estado da impressora  Os valores da porta a colocar no registrador DX s  o   LPT1   0  LPT2   1  LPT3   2  O estado da impressora    codificado bit a bit como segue     BIT 1 0 SIGNIFICADO       Estado de time out    Erro de entrada e sa  da   Impressora selecionada   Fim de papel   1 Reconhecimento de comunica    o   1 A impressora est   pronta para o uso             JOS UM wWUNHO    Os bits 1 e 2 bits n  o s  o relevantes       A maioria dos BIOS suportam 3 portas paralelas  havendo alguns que  Fun    o Olh   Uso    Setar uma porta paralela    Registr
66. tes deram lugar   s unidades de mem  ria auxiliar   perif  ricos  As mais comuns s  o as fitas e os discos magn  ticos     A informa    o ali armazenada ser   dividida em arquivos  Um arquivo    feito de um  n  mero vari  vel de registros  geralmente de tamanho fixo  podendo conter informa    o  ou programas        2 2 CONCEITOS B  SICOS             Conte  do     2 2 1 Informa    es nos computadores    2 2 2  M  todos de representa    o de dados    2 2 1  Informa    o no computador      Unidades de informa    o    Sistemas num  ricos    Convertendo n  meros bin  rios para decimais   Convertendo n  meros decimais para bin  rios    Sistema hexadecimal          N MN NAN MN  NNNNDN  fes es des ds  sw NH    2 2 1 1  Unidades de informa    o    Para o PC processar a informa    o     necess  rio qu la esteja em c  lulas especiais   chamadas registradores        Os registradores s  o grupos de 8 ou 16 flip flops     Um flip flop    um dispositivo capaz de armazenar 2 n  veis de voltagem  um baixo   geralmente 0 5 volts  e outro comumente 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 1   Estes estados s  o geralmente conhecidos como bits  que s  o a menor unidade de  informa    o num computador              Um grupo de 16 bits    conhecido como palavra  uma palavra pode ser dividida em  grupos de 8 bits chamados bytes  e grupos de 4 bits chamados nibbles     2 2 1 2  Sistemas num  ricos    O sistema num  rico q
67. tra na tela o segundo n  mero hexadecimal  POP DX  retira da pilha o valor do registrador DX  POP CX  retira da pilha o valor do registrador CX  RET  Retorna o controle ao procedimento que chamou  WRITE HEX  ENDP       Use    ne                   PUBLIC WRITE HEX DIGIT                 Este procediento converte os 4 bits mais baixos do registrador DL   para um n  mero hexadecimal e o mostrana tela do computador    WRITE CHAR          EX DIGIT PROC       USH DX  coloca na pilha o valor de DX                         EX LETTER  se n  o  salta para HEX LETER  TOM  se sim  converte para n  mero  hort WRITE DIGIT  escreve o caracter                   WRITE  MP  AE  P  HEX L          H  w       Tig Gr G O  QU  QU  UUZO                DD DL  A  10   Converte um caracter para hexadecimal    L 10   Compara se o n  mero de bits    menor do que 10    T    WRITE DIGIT           CALL WRITE CHAR  imprime o caracter na tela   POP DX  Retorna o valor inicial do registrador DX   para o registrador DL   RET  Retorna o controle ao procedimento que chamou                WRITE HEX DIGIT ENDP             PUBLIC WRITE CHAR    C   0      D  Ke  5  O  Q  D  Q  H   3  D  5   i  O  H   3  o  K  H   3  D  fer  3  Q  fab   o  fab   Q  c  D  K  5   e      D  HH  fab   c   0   fab   5  o  O  O   w   O   02                                         WRITE CHAR PROC   PUSH AX  Coloca na pilha o valor do registarador AX   MOV AH 2   Fun    o 2h   INT 21h   Interrup    o 21h   POP AX  Extrai da pilha o valor de AX 
68. tru    o MUL     INSTRU    O SBB             Prop  sito  Subtra    o com carry     Sintaxe           SBB destino  fonte    Esta instru    o subtrai os operadores e subtrai um do resultado se CF est   ativado   O operador fonte    sempre subtra  do do destino              Este tipo de subtra    o    usado quando se trabalha com quantidades de 32  bits        INSTRU    O SUB       Prop  sito  Subtra    o   Sintaxe     SUB destino  fonte          DJ   0     ta instru    o subtrai o operador fonte do destino     4 3  Instru    es de controle de processos  Conte  do   Instru    es de salto    4 3 1   4 3 2  Instru    es de la  os  lOp  4 3 3  Instru    es de contagem    Es     3 4  Instru    es de compara    o   3 5  Instru    es de flag    Es       4 3 1  Instru    es de salto        Usadas para transferir o processo de execu    o do programa para o operador indicado      go        Ci  Z  7j                           Q     r Cy  L  UE                  qasa  N g    Da    m N        a a a       QQZEWDD  EAN    L            zm C a   bri                            E     Q             MAR EE PEY  cd AROS  o S  AE PAS  E PAS  AD  CE GRE GR CEE GES  cal TO EEE  CS EN  CA REE  CATIE  CNTEE SETTE SE O SE  rei  Ca  2 q    INSTRU    O JMP    Prop  sito  Salto incondicional        Sintaxe     JMP destino       Esta instru    o    usada par adesviar o curso do programa sem tomar em conta as  condi    es atuais dos flags ou dos dados     INSTRU    O JA  JNBE          a            Prop  sito  S
69. ue n  s usamos diariamente    o decimal  mas este sistema n  o     conveniente para m  quinas  pois ali as informa    es t  m que ser codificadas de modo  a interpretar os estados da corrente  ligado desligado   este modo de c  digo faz  com que tenhamos que conhecer o c  lculo posicional que nos permitir   expressar um  n  mero em qualquer base onde precisarmos dele              O poss  vel representar um determinado n  mero em qualquer base atrav  s da seguinte  f  rmula     Onde n    a posi    o do d  gito  iniciando da direita para a esquerda e  numerando de 0  D   o d  gito sobre o qual n  s operamos e B    a base num  rica usada        2 2 1 3 Convertendo n  meros bin  rios para decimais       Quando trabalhamos com a Linguagem Assembly encontramos por acaso a  necessidade de converter n  meros de um sistema bin  rio  que    usado em  computadores  para o sistema decimal usado pelas pessoas           O sistema bin  rio    baseado em apenas duas condi    es ou estados  estar  ligado 1   ou desligado 0   portanto sua base    dois     Para a convers  o  podemos usar a f  rmula de valor posicional     Por exemplo  se tivermos o n  mero bin  rio 10011  tomamos cada d  gito da    direita para a esquerda e o multiplicamos pela base  elevando    pot  ncia                   correspondente    sua posi    o relativa   Binary  dl 1 0 0 T  Decimal  1 220   1 201   0 222   04243   1 204    1   2   0   0   16   19 decimal     A    O caracter    usado em computa    o como s  mbolo para
70. utar um conjunto de instru    es relacionadas  Q Sair do programa debug   R Mostrar o conte  do de um ou mais registradores   T Executar passo a passo as instru    es   U Desmontar o c  digo de m  quina em instru    es simb  licas   W Gravar um programa em disco    O poss  vel visualizar os valores dos registradores internos da CPU usando o  programa Debug  Debug    um programa que faz parte do pacote do DOS  e pode ser  encontrado normalmente no diret  rio C  DOS  Para inici   lo  basta digitar Debug na  linha de comando           C   gt Debug  Enter    Voc   notar   ent  o a presen  a de um h  fen no canto inferior esquerdo da tela  N  o se                                              spante  este    o prompt do programa  Para visualizar o conte  do dos registradores   experimente    r  Enter   Ax 0000 Bx 0000 CxXx 0000 Dx 0000 SP FFEE BP 0000 SI 0000 DI 0000  DS 0D62  ES 0D62 SS 0D62 CS 0D62 IP 0100 NV UP El PL NZ NA PO NC  0D62 0100 2E  us  0D62 0101 803ED3DF00 CMP BYTE PTR  DFD3  00 CS DFD3 03    O mostrado o conte  do de todos os registradores internos da CPU  um modo  alternativo para visualizar um   nico registrador    usar o camando  r  seguido do  parj  fmetro que faz refer  ncia ao nome do registrador      rbx  BX 0000          Esta instru    o mostrar   o conte  do do registrador BX e mudar   o indicador do Debug  de Tan para Ta    Quando o prompt assim se tornar  significa que    poss  vel  embora n  o   obrigat  ria  a mudan  a do valor contido no registrador  b
71. vido a esta inefici  ncia  o c  digo ASCII    usado  principalmente  para a  representa    o de textos     2 2 2 2 M  todo BCD          BCD significa Binary Coded Decimal           Neste m  todo grupos de 4 bits s  o usados para representar cada d  gito  decimal de 0 a 9  Com este m  todo podemos representar 2 d  gitos por byte de  informa    o     Vemos que este m  todo vem a ser muito mais pr  tico para representa    o   num  rica do que o c  digo ASCII  Embora ainda menos pr  tico do que o bin  rio  com o  m  todo BCD podemos representar d  gitos de 0 a 99  Com o bin  rio  vemos que o  alcance    maior  de 0 a 255                 Este formato  BCD     principalmente usado na representa    o de n  meros  grandes  aplica    es comerciais  devido   s suas facilidades de opera    o     2 2 2 3 Representa    o de ponto flutuante          Esta representa    o    baseada em nota    o cient  fica  isto     representar um n  mero       em 2 partes  sua bas seu expoent    Por exemplo o n  mero decimal 1234000     representado como 1 234 1076   observamos que o expoente ir   indicar o n  mero de casas que o ponto decimal deve  ser movido para a direita  a fim de obtermos o n  mero original     O expoente negativo  por outro lado  indica o n  mero de casas que o ponto decimal  deve se locomover para a esquerda     2 3 PROGRAMA DEBUG                Conte  do    2 3 1 Processo de cria    o de programas  2 3 2  Registradores da CPU   2 3 3 Programa debug   2 3 4  Estrutura Assembly   2 3
72. za o contador do clock  interno do computador  o hardware chama esta interrup    o muitas vezes durante um  segundo     N  o nos    permitido gerenciar diretamente esta interrup    o  uma vez que n  o se pode  controlar a hora atualizada por software  Mas podemos usar seus efeitos no  computador para o nosso benef  cio  por exemplo para criar um virtual clock  atualizado continuamente pelo contador interno de clock  Para tanto  precisamos  apenas ler o valor atual do contador e o transformar num formato compreens  vel pelo  usu  rio     5 1 2  Interrup    es de hardware externo  Interrup    es externas s  o geradas atrav  s de dispositivos perif  ricos  tais como  teclados  impressoras  placas de comunica    o  entre outros  S  o tamb  m geradas por    co processadores      N  o    poss  vel desativar interrup    es externas           Estas interrup    es n  o s  o enviadas diretamente para a CPU  mas  de uma    forma melhor  s  o enviadas para um circuito integrado cuja fun    o exclusiva     manusear este tipo de interrup    o  O circuito  chamado PIC8259A     controlado pela  CPU atrav  s de uma s  rie de comunica    o chamada paths     5 1 3  Interrup    es de software    Interrup    es de software podem ser ativadas diretamente por nossos programas  assembly  invocando o n  mero da interrup    o desejada com a instru    o INT     O uso das interrup    es facilita muito a cria    o dos programas  torna os  menores  Al  m disso     f  cil compreend   las geram boa performa
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
2ème trimestre 2013 - Crédit Agricole Toulouse 31  User Manual - Zinko Jacks    User Manual - Newegg.com  M-2005 Steam Sprayer User`s Manual  Fanvil D800 User Manual  User Manual AMPMA70V40    Verbatim (47512) 3.5" USB - 1000GB  Syscom TX8001614 network antenna    Copyright © All rights reserved. 
   Failed to retrieve file