             i----------------------------------------------
              RBT      Curso de Assembly      Aula N 09 
             ----------------------------------------------

Por: Frederico Pissarra


i-------------
 ASSEMBLY IX 
-------------

    O assunto de  hoje    INTERRUPES.   Como  j disse antes, uma
interrupo  uma requisio da ateno da CPU  por  um  dispositivo
(por  exemplo  o  teclado,  quando  apertamos  uma  tecla!).   A CPU
INTERROMPE o processamento normal e  salta para a rotina que "serve"
a interrupo requisitada, retornando ao ponto em que  estava  ANTES
da  interrupo  quando  finalizar  a  rotina de interrupo.  Assim
funciona a nvel de hardware.

    A novidade nos processadores INTEL  da srie 80x86  que existem
instrues assembly que  EMULAM  a  requisio  de  uma  interruo.
Essas  instrues  nada  mais  so  que  um  "CALL", mas ao invs de
usarmos um endereo para  uma  subrotina,  informamos o ndice (ou o
cdigo) da interrupo requisitada e a CPU se comportar como se  um
dispositivo tivesse requisitado a interrupo...

    As  rotinas  do DOS e da BIOS so chamadas por essas instrues.
Na realidade,  este  artificio  da  famlia  INTEL  facilita muito o
trabalho dos programadores  porque  no  precisamos  saber  onde  se
encontram  as  rotinas  da  BIOS  e do DOS na memria...  Precisamos
saber apenas o ndice da  interrupo  de cada uma das rotinas...  o
endereo a CPU calcula para ns!

    Eis a sintaxe da instruo:

 +------------------------------------------------------------------+
   INT 21h                                                         
   INT 10h                                                         
 +------------------------------------------------------------------+

    Onde 21h e 10h so ndices.

    A CPU sabe para onde saltar porque no inicio da memria de  todo
PC   tem   uma   tabela   conhecida  como  "Tabela  dos  vetores  de
interrupo".  A CPU, de posse do ndice na instruo INT, "pega"  o
endereo  correspondente a esse ndice nessa tabela e efetua um CALL
diferente (porque  o  fim  de  uma  rotina  de  interrupo  tem que
terminar em IRET e  no  em  RET  -  IRET    o  RET  da  rotina  de
interrupo - Interrupt RETurn).

    Por exemplo...  Se precisamos abrir um  arquivo,  o  trabalho  
enviado  ao  DOS pela interrupao de indice 21h.  Se queremos ler um
setor do disco, usamos a interrupao de indice 13h, etc...  Mas, nao
use a instruao INT  sem  saber  exatamente  o que est fazendo, ok?
Pode ter resultados desastrosos!

    Uma  descrio  da  maioria   das   interrupes   de   software
disponveis  nos  PCs  compatveis est disponvel no livro "Guia do
programador para PC e PS/2"  de  Peter Norton (recomendo a aquisio
deste livro!  De preferencia a  versao americana!).  Ou, se preferir
"literatura eletronica" recomendo  o  arquivo  HELPPC21.ZIP  (v2.1),
disponivel  em qualquer bom BBS...  Ainda assim pedirei para o RC do
ES (RBT) para disponibiliza-lo para  FREQ aos Sysops interessados em
adquiri-lo.

    Quanto as interrues  de  hardware  (as  famosas  IRQs!)...   
assunto  meio  complexo  no  momento e requer um bom conhecimento de
eletronica digital  e  do  funcionamento  do  micrprocessador...  no
futuro (prximo, espero!) abordarei esse assunto.
