MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 O Microprocessador 8086 Introdução O microprocessador 8086 é um microprocessador com uma arquitectura de 16 bits, com um conjunto de cerca de 123 instruções, tem um bus de endereços de 20 bits, os seus registos são de 16 bits e uma pre-fetch queue de 6 bytes (memória do tipo FIFO na qual são colocadas as instruções de código a serem executadas a seguir).
MICROPROCESSADORES O M I C R O P R O C E S S A D O R Execution Unit 8 0 8 6 1 Bus Interface Unit AX BX CX DX SP BP SI DI CS DS SS ES IP BHE,S7 16 bit ALU Bus Interface Unit Flags 4 A19-A16 ,S3 -S6 16 AD15-AD0 3 INTA,RD,WR 3 OT/R,DEN,ALE 6 byte Instruction Queue TEST INT NMI RQ,GT0,1 LOCK Control & Timming 2 QS0-QS1 3 S2 -S0 3 HOLD HLDA 2 CLK RESET READY MN/MX GND VCC Figura 1 - Diagrama de blocos do 8086.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 Bus Interface Unit A BIU trata das funções de busca e colocação em queue de instruções, leitura e gravação de operandos e realocação de endereços. Esta unidade trata também do controlo do bus. Para realizar estas funções, a BIU possui: registos e segmentos, registos de comunicação interna, indicador de instrução, queue de registos, somador de endereços e lógica de controlo do barramento.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 Execution Unit A unidade de execução é responsável pela descodificação e execução de todas as instruções de código. A EU é constituída por uma ALU (Aritmethic Logic Unit), flags de estado e controlo, oito registos de uso geral e lógica de controlo de queue.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 AX (Acumulador) O registo AX ou acumulador, e como tal está envolvido em tipos específicos de operações como IN (entradas de dados) e OUT (saídas de dados), multiplicação, divisão e operações de ajuste decimal codificado em binário. BX (Base) O registo BX é frequentemente usado como um registo base para referenciar posições de memória.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 SP (Stack pointer) É o ponteiro da stack (pilha), e aponta para a posição de topo da stack, é o registo usado por defeito nas operações de PUSH e POP. BP (Base pointer) É o ponteiro da base, permite o acesso a dados dentro do segmento da stack. Normalmente, este registo é usado para referências parâmetros que devem ser acedidos através da stack. SI (Segment index) É usado como registo de índice em alguns modos de endereçamento indirecto.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 Registo de flags O registo de flags é um registo de 16 bits, dos quais apenas 9 bits contêm flags, e que são usados para indicar várias situações durante a execução das instruções bem como relativas ao seu resultado. -- -- -- -- O D I T S Z -- A -- 15 P -- C 0 Figura 3 - Registo de flags do 8086.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 FFFFFh 64 KB Code Segment XXXX0h +Offset Stack Segment Segment Register File CS SS DS ES Data Segment Extra Segment 00000h Figura 4 - Mapa de memória exemplificativo dos segmentos e offset. Uma base e um deslocamento formam um endereço segmentado, o 8086 converte o endereço segmentado de 32 bits num endereço de 20 bits. Na realidade o que acontece é que o CPU desloca a base 4 bits à esquerda e adiciona-lhe o valor de deslocamento.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R Banco Par 8 0 8 6 1 Banco Impar 00004h 00005h 00002h 00003h 00000h AA BB 00001h AABB Figura 5 - Exemplo de uma transferência de memória com os bancos alinhados.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 Ciclos de barramento Cada ciclo de barramento do processador consiste em pelo menos quatro ciclos de clock. Estes são conhecidos como T1, T2, T3 e T4. O endereço é colocado no bus pelo processador durante T1 e a transferência de dados é feita durante T3 e T4. T2 é usado principalmente para a mudança de direcção do bus durante operações de leitura.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 Temporização do sistema Ciclo de leitura (read cycle) O ciclo de leitura começa em T1 e com o pulso de ALE. No flanco descendente de ALE, é usado para fixar a informação de endereço na latch de endereços, que está disponível no bus. O BHE e A0 endereçam os bytes mais significativos ou menos significativos ou ambos. De T1 a T4 a linha M/IO indica se se trata de leitura de memória ou de um dispositivo de I/O.
MICROPROCESSADORES O BHE 0 0 1 1 M I C R O P R O C E S S A D O R A0 Descrição 0 1 0 1 Palavra completa Byte mais significativo de/para endereço impar Byte menos significativo de/para endereço par Nenhum 8 0 8 6 1 Tabela 4 - Bytes da memória a ser acedidos. Os portos I/O são endereçados da mesma forma que as localizações de memória. Bytes endereçados em posições pares são colocados nas linhas D7-D0 do bus, e os endereços em posições impares são colocados nas linhas D15-D8 do bus.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 Interrupções não mascaráveis O 8086 tem apenas um pino de interrupt não mascarável e que tem prioridade mais elevada que os mascaráveis. Esta interrupção é activada no flanco ascendente. A interrupção NMI deve ter uma duração mínima de 2 ciclos de clock, mas não é necessário que esteja sincronizada com este.
MICROPROCESSADORES O T1 T2 T3 M I C R O P R O C E S S A D O R T4 TI T1 T2 T3 8 0 8 6 1 T4 ALE LOCK INTA Float AD0,AD15 Type Vector Figura 10 - Diagrama temporal da sequência de Interrupt Acknowledge. Sistema de Input/Output A forma utilizada pelo 8086 para aceder a dispositivos I/O é semelhante à usada para aceder à memória principal, ou seja, estas transferências são feitas através do barramento multiplexado de dados e endereços.
MICROPROCESSADORES O M I C R O P R O C E S S A D O R 8 0 8 6 1 ligado de modo a que estejam todos em endereços pares ou impares. desta forma, todas as transferências terão lugar na mesma parte da via de dados. I/O por mapeamento de memória Os dispositivos de I/O também podem ser alocados no espaço de memória do 8086. Devido ao facto de os dispositivos actuarem como um endereço de memória, o CPU verá os dispositivos como posições de memória e não saberá distinguir as duas situações.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Arquitectura dos Microcomputadores A evolução dos microcomputadores Na tabela podemos ver a evolução da família de microprocessadores INTEL desde a introdução do microprocessador de 16 bits até ao PENTIUM III de 1 GHz. A utilização de microcomputadores de 16 bits começa por ser generalizada por volta de 1980 com o lançamento do primeiro computador pessoal por parte da IBM, tendo ficado conhecido como o IBM-PC.
MICROPROCESSADORES A R Q U I T E C T U R A Pentium II 1997 Celeron 1998 Pentium III 1999 Pentium IV 2000 D O S 200 MHz 233 MHz 350 MHz 400 MHz 450 MHz 233 MHz 266 MHz 333 MHz 466 MHz 533 MHz 450 MHz 500 MHz 550 MHz 1.3 GHz 1.4 GHz 1.5 GHz 1.7 GHz M I C R O C O M P U T A D O R E S 64 bits 16 Gbyte 64 bits 4 Gbyte 64 bits 16 Gbyte 64 bits 64 Gbyte 2 Tabela 5 - Resumo da evolução dos microprocessadores.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 O 80286 O 80286 é um processador de 16 bits, com um bus de endereços de 24 bits, e o bus de dados de 16 bits. A sua inovação tecnológica deve-se ao facto de poder funcionar em modo protegido, no qual pode endereçar até 16 Mbytes de memória, em modo real funciona como o 8086. Para funcionar em modo protegido, tem mais 5 registos que não existiam no 8086.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 O Pentium-Pro - Tem 387 pinos; Duas caches separadas para código e dados no CPU e uma cache adicional para código e dados ligada directamente a CPU, com capacidade de 256 Kbytes ou 512 Kbytes; Bus de endereços de 32 bits, para endereçamento físico de 64 Gbytes. Multiprocessamento com até 4 CPU’s sem lógica adicional. O Pentium II O Pentium II é um Pentium-Pro ao qual foi adicionada a tecnologia MMX.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Compatibilidade entre microprocessadores Cada novo processador acrescenta inovações tecnológicas em relação ao seu antecessor, mas não perde compatibilidade com os anteriores, incluindo o 8086. Modo real, Protegido e Virtual 8086 Modo real Modo de endereçamento do 8086.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Barramentos dos computadores Os PC’s têm vários barramentos (muitos dos PC’s mais recentes têm pelo menos 4 barramentos), é comum utilizar-se a designação de hierarquia de barramentos.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Barramento de dados e endereços Todos os barramentos são constituídos por duas partes distintas: as linhas de dados e as linhas de endereços. O barramento de dados é o mais referido quando se fala de barramentos, pois é este que transporta os dados a serem processados. O barramento de endereços é o que transporta a informação sobre qual a posição de memória de/para onde os dados vão ser transferidos.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 A tabela mostra a largura de banda teórica que alguns dos barramentos I/O podem suportar hoje em dia. De notar que os barramentos podem trabalhar a diferentes velocidades. A largura de banda do PCI standard deveria ser de 133, ou seja 32 / 8 x 33.3 = 133.3 Mb/s, como muitas vezes é referenciado.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Figura 11 - Diagrama da arquitectura ISA de um XT. A arquitectura EISA (Extended ISA) Com a introdução dos microprocessadores de 32 bits, com barramentos de 32 bits, foi necessário estender também o bus ISA. Daí resultou o bus EISA, que mantém a compatibilidade com o sistema ISA. Desta forma, pode-se incorporar componentes ISA em slots EISA sem problemas.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Figura 12 - diagrama de blocos de um microcomputador com arquitectura EISA. Nos que requerem taxas de transmissão muito altas (placas gráficas, e discos rígidos) os 8 MHz do bus EISA rapidamente se tornam insuficientes. Com o conceito de bus local, tentou-se colocar o bus desses componente a trabalhar à mesma velocidade do CPU. A Intel desenvolveu o bus PCI e o comité VESA desenvolveu o VLBus.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Figura 13 - Diagrama de blocos de um microcomputador com arquitectura VLB. O barramento PCI O PCI é hoje em dia a solução standard para PC’s, e tem a seguinte estrutura. Luís Miguel Charrua Figueiredo 2 - 11 E.N.I.D.H.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Figura 14 - Diagrama de blocos de um microcomputador com arquitectura PCI. A bridge PCI representa a ligação entre o sistema CPU/RAM e o bus PCI. Todas as unidades individuais estão ligadas ao bus PCI, e ao contrário do VLB estas unidades podem ser integradas na mainboard, mas na maioria dos casos são construídas como adaptadores. A interface do bus de expansão é um outro tipo de unidade PCI.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 O sistema PCI suporta Plug & play, sendo normalmente é a BIOS que se encarrega de fazer a atribuição das interrupções, sendo que o PCI normalmente suporta partilha de interrupções. Os portos de I/O num PC com um bus PCI, estão todos localizados abaixo dos 64 Kbytes e a sua utilização é semelhante à dos sistemas (E)ISA.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 sem qualquer qualificador, estamos a falar da cache de nível 2 e refere normalmente a cache colocada entre o processador e a memória. Quando apareceram os PC’s o processador trabalhava a 8 MHz tal como todos os outros dispositivos.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Controlador de Interrupções O controlador de interrupções é importante para o controlo de dispositivos externos tais como o teclado, rato, discos rígidos ou portas série. Usualmente os processadores escrutinavam periodicamente os periféricos para verificar a existência de dados a transferir.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S 2 Mapa de memória Os primeiros 10 segmentos de memória são reservados para a memória convencional, com tamanho limitado a 640 Kbytes. Os primeiros 64 Kbytes são bastante importantes pois contêm informações relativas à máquina e rotinas de sistema.
MICROPROCESSADORES A R Q U I T E C T U R A D O S M I C R O C O M P U T A D O R E S Componente Controlador DMA (8237A-5) Controlador de Interrupções Temporizador PPI 8255A-5 Teclado Relógio em tempo real (MC 1468818) DMA Registo de página 2º Controlador de Interrupções Co-Processador Matemático Co-Processador Matemático Controlador de disco rígido Porto de Jogos Vago para expansão 2ª Porta Paralela 2ª Porta Série Placa Protótipo Placa de Rede 1ª Porta Paralela Adaptador de vídeo monocromático Adaptador CG
MICROPROCESSADORES A R Q U I T E C T U R A 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h 21h 0034h-0037h 0038h-003Bh 003Ch-003Fh 0040h-0043h 0044h-0047h 0048h-004Bh 004Ch-004Fh 0050h-0053h 0054h-0057h 0058h-005Bh 005Ch-005Fh 0060h-0063h 0064h-0067h 0068h-006Bh 006Ch-006Fh 0070h-0073h 0074h-0077h 0078h-007Bh 007Ch-007Fh 0080h-0083h 0084h-0087h D O S IRQ5: Hard Drive IRQ6: Diskette IRQ7: Printer BIOS: Video Functions BIOS: Determine Configuration BIOS: Determine RAM Memor
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 O Debug, Tasm e Tlink Nesta secção iremos apresentar duas formas de criar programas em assembly para o 80x86. Existem várias ferramentas possíveis de utilizar para o desenvolvimento de programas em assembly, no entanto iremos focar apenas duas delas: o debug que vem com qualquer PC como parte do sistema operativo, e o Tasm e Tlink da Borland, em que o Tasm é usado para compilar os ficheiros *.
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 O programa debug(ger) Como já foi mencionado, o debug é um programa que continua a ser distribuído pela Microsoft como parte integrante do sistema operativo (desde as primeiras versões do MS-DOS, até ao Windows 2000, XP e NT). O debug pode ser iniciado de duas formas: C:\>debug ficheiro.com em que damos logo o nome do ficheiro em que queremos trabalhar.
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 Comando Dump O comando Dump (D) permite visualizar grandes áreas de memória. Serve basicamente para visualizar dados, uma vez que o conteúdo de memória é apresentado em hexadecimal e em ASCII. Se se quiser ver o código de uma forma mais perceptível, deveremos usar o comando Unassemble. Ao introduzir o comando D sem outros parâmetros, ele usa por defeito o DS, e como estamos normalmente a lidar com programas do tipo *.
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 O comando Compare Este comando (Compare – C) serve para comparar dois blocos de memória, byte a byte. No caso de haver diferença o byte correspondente de cada bloco é apresentado. Por exemplo para comparar DS:0100h e DS:0200h em 8 bytes.
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 Comandos de introdução de dados O comando Enter O comando Enter (E) é usado para colocar bytes de dados na memória. Tem dois modos de funcionamento: visualização/midificação e substituição. A diferênça está na forma de introdução de dados, na linha de comandos ou na prompt do comando. Se dermos apenas o comando E endereço, estamos no primeiro modo, e que o debug nos mostra o endereço e o conteúdo desse endereço seguido de um ponto.
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 0CB2:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0CB2:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 69 ...............i 0CB2:0220 61 6C 20 4E 75 6D 62 65-72 20 69 73 20 25 31 al Number is %1 -f 021f l 10 'abcd' 3 ; preenche um bloco de 10h bytes com a string ‘abcd’ -d 0200 l 2f 0CB2:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 Ao criar programas com o debug, os esmos devem terminar com INT 20h, que é uma função do DOS para terminar o programa, se não for colocada, o debug continuará a tentar descodificar e executar as instruções nas posições seguintes (sejam elas válidas ou não) e poderá “pendurar” o PC, obrigando a um reboot ou até um power cycle.
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 Comandos de execução O comando Go Este comando serve para executar o programa, por defeito assume que o programa começa na posição CS:IP, no entanto poderemos indicar que queremos iniciar a execução noutro ponto qualquer do programa. Poderemos usar também até 10 breakpoints através da linha de comando.
MICROPROCESSADORES O D E B U G , allocate expanded memory XA [#pages] deallocate expanded memory XD [handle] map expanded memory pages XM [Lpage] [Ppage] [handle] display expanded memory status XS T A S M E T L I N K 3 - O Tasm e Tlink Como já foi dito, o Tasm é o compilador que “transforma“ os ficheiros *.asm num formato intermédio (*.obj) e o Tlink faz o trabalho final convertendo-os para ficheiros do tipo COM ou EXE.
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 C:\>tlink exam1.obj Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International C:\> O resultado é um ficheiro exam1.exe que pode agora ser executado.
MICROPROCESSADORES O • • • • D E B U G , T A S M E T L I N K 3 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 e AL, e o resultado da soma em BX: Soma Proc Near Mov BX, 0 ; Declaração do Procedimento ; Conteúdo do Procedimento...
MICROPROCESSADORES O D E B U G , T A S M E T L I N K 3 Um exemplo de uma macro para colocar o cursor numa determinada posição do ecran: Pos MACRO Linha, Coluna PUSH AX PUSH BX PUSH DX MOV AH, 02H MOV DH, Linha MOV DL, Coluna MOV BH, 0 INT 10H POP DX POP BX POP AX ENDM Para usar uma macro basta chamá-la pelo seu nome, tal como se fosse qualquer instrução na linguagem assembly: Pos 8, 6 Luís Miguel Charrua Figueiredo 3 - 12 E.N.I.D.H.
MICROPROCESSADORES C O N J U N T O D E Conjunto de Instruções do 8086 I N S T R U Ç Õ E S D O 8 0 8 6 4 Sums two binary operands placing the result in the destination. If CF is set, a 1 is added to the destination. ADD - Arithmetic Addition Usage: ADD Instruções detalhadas dest,src Modifies flags: AF CF OF PF SF ZF Adds "src" to "dest" and replacing the original contents of "dest". Both operands are binary.
MICROPROCESSADORES C O N J U N T O D E I N S T R U Ç Õ E S D O 8 0 8 6 4 Disables the maskable hardware interrupts by clearing the Modifies flags: AF CF PF SF ZF (OF undefined) Interrupt flag. NMI's and software interrupts are not Corrects result (in AL) of a previous BCD subtraction inhibited. operation. Contents of AL are changed to a pair of packed decimal digits.
MICROPROCESSADORES C O N J U N T O D E I N S T R U Ç Õ E S D O 8 0 8 6 4 Signed multiplication of accumulator by "src" with result return to the instruction that cause the exception because placed in the accumulator. If the source operand is a byte the CS:IP placed on the stack during the interrupt is the value, it is multiplied by AL and the result stored in AX. If address of the offending instruction.
MICROPROCESSADORES C O N J U N T O D E I N S T R U Ç Õ E S Usage: LODS Usage: LAHF D O 8 0 8 6 4 src LODSB Modifies flags: None LODSW Copies bits 0-7 of the flags register into AH. This includes Modifies flags: None flags AF, CF, PF, SF and ZF other bits are undefined. Transfers string element addressed by DS:SI (even if an AH := SF ZF xx AF xx PF xx CF operand is supplied) to the accumulator.
MICROPROCESSADORES C O N J U N T O D E I N S T R U Ç Õ E S D O 8 0 8 6 4 MOVS - Move String (Byte or Word) Modifies flags: CF OF PF SF ZF (AF undefined) Usage: MOVS Logical inclusive OR of the two operands returning the dest,src MOVSB result in the destination. Any bit set in either operand will MOVSW be set in the destination.
4 MICROPROCESSADORES C O N J U N T O D E I N S T R U Ç Õ E S D O 8 0 8 6 other than the 386 may result in errors if an interrupt Modifies flags: CF OF occurs before CX=0. C 7 0 REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero Usage: REPNE REPNZ Rotates the bits in the destination to the left "count" times Modifies flags: None with all data pushed out the left side re-entering on the Repeats execution of string instructions while CX != 0 and right.
4 MICROPROCESSADORES C O N J U N T O D E I N S T R U Ç Õ E S D O 8 0 8 6 Rotates the bits in the destination to the right "count" Compares value at ES:DI (even if operand is specified) times with all data pushed out the right side re-entering on from the accumulator and sets the flags similar to a the left. The Carry Flag will contain the value of the last subtraction. DI is incremented/decremented based on the bit rotated out.
MICROPROCESSADORES C O N J U N T O D E I N S T R U Ç Õ E S D O 8 0 8 6 4 Stores value in accumulator to location at ES:(E)DI (even if operand is given). (E)DI is incremented/decremented based on the size of the operand (or instruction format) and the state of the Direction Flag. Use with REP prefixes. SUB - Subtract Usage: SUB dest,src Modifies flags: AF CF OF PF SF ZF The source is subtracted from the destination and the result is stored in the destination.
MICROPROCESSADORES I N T E R R U P Ç Õ E S Interrupções Iremos agora apresentar alguns dos principais interrupts da BIOS. INT 10 - VIDEO - SET VIDEO MODE AH = 00h AL = desired video mode (see #00010) Return: AL = video mode flag (Phoenix, AMI BIOS) 20h mode > 7 30h modes 0-5 and 7 3Fh mode 6 AL = CRT controller mode byte (Phoenix 386 BIOS v1.
MICROPROCESSADORES I N T E R R U P Ç Õ E S = G . . 640x350 16 . A000 256k EGA,VGA 11h = G 80x30 8x16 640x480 mono . A000 VGA,MCGA,ATI EGA,ATI VIP 12h = G 80x30 8x16 640x480 16/256K . A000 VGA,ATI VIP = G 80x30 8x16 640x480 16/64 . A000 ATI EGA Wonder = G . . 640x480 16 . . UltraVision+256K EGA 13h = G 40x25 8x8 320x200 256/256K . A000 VGA,MCGA,ATI VIP 14h = T 132x25 Nx16 . 16 . B800 XGA, IBM Enhanced VGA [3] = T 132x25 8x16 1056x400 16/256K . . Cirrus CLGD5420/5422/5426 = G 80x25 8x8 640x200 . . .
MICROPROCESSADORES I N T E R R U P Ç Õ E S INT 10 - VIDEO - READ LIGHT PEN POSITION (except VGA) AH = 04h Return: AH = light pen trigger flag 00h not down/triggered 01h down/triggered DH,DL = row,column of character light pen is on CH = pixel row (graphics modes 04h-06h) CX = pixel row (graphics modes with >200 rows) BX = pixel column determine the current position and status of the light pen (if present) Desc: on a CGA, returned column numbers are always multiples of 2 (320Notes: column modes) or 4 (640-c
MICROPROCESSADORES I N T E R R U P Ç Õ E S AH = 0Bh BH = 00h BL = background/border color (border only in text modes) Return: nothing SeeAlso: AH=0Bh/BH=01h = attribute register number (undocumented) (see #00017) BH = color or attribute register value Return: nothing on MCGA, only BX = 0712h is supported under UltraVision, the Notes: palette locking status (see AX=CD01h) determines the outcome SeeAlso: AX=1002h,AX=1007h,AX=CD01h INT 10 - VIDEO - WRITE GRAPHICS PIXEL AH = 0Ch BH = page number AL = pixel c
MICROPROCESSADORES I N T E R R U P Ç Õ E S against older versions or unsupported video modes, programs which expect to use this function on EGA systems should set the ES:DX buffer to FFh before calling.
MICROPROCESSADORES I N T E R R U P Ç Õ E S 40h seek failed 80h timeout (not ready) AAh drive not ready (hard disk) B0h volume not locked in drive (INT 13 extensions) B1h volume locked in drive (INT 13 extensions) B2h volume not removable (INT 13 extensions) B3h volume in use (INT 13 extensions) B4h lock count exceeded (INT 13 extensions) B5h valid eject request failed (INT 13 extensions) B6h volume present but read protected (INT 13 extensions) BBh undefined error (hard disk) CCh write fault (hard disk) E0
MICROPROCESSADORES I N T E R R U P Ç Õ E S CL = high bits of cylinder number (bits 7,6) DH = head DL = drive Return: CF set on error CF clear if successful AH = status code (see #00234) AWARD AT BIOS and AMI 386sx BIOS have been extended to Notes: handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH for XT-type controllers on an AT or higher, AH=0Fh should be called first the IBM AT BIOS and many other BIOSes use only the low four bits of DH (head number)
MICROPROCESSADORES I N T E R R U P Ç Õ E S INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later) AH = 0Ah AL = number of sectors (01h may be only value supported) CH = low eight bits of cylinder number CL = sector number (bits 5-0) high two bits of cylinder number (bits 7-6) DH = head number DL = drive number (80h = first, 81h = second) ES:BX -> data buffer Return: CF clear if successful CF set on error AH = status (see #00234) AL = number of sectors transferred this function reads in four to seven bytes
MICROPROCESSADORES I N T E R R U P Ç Õ E S sectors support AH = type code 00h no such drive (SpeedStor) AL = 03h hard disk CX:DX = number of 512-byte 01h floppy without change-line support 02h floppy (or other removable drive) with change-line 03h hard disk CX:DX = number of 512-byte sectors CF set on error AH = status (see #00234 at AH=01h) SyQuest can report type 01h or 02h for 'hard disks', since its media is Note: removable BUGS: many versions of the Award 486 BIOS do not return the sector count beca
MICROPROCESSADORES I N T E R R U P Ç Õ E S AL = modem status (see #00305) Notes: default handler is at F000h:E739h in IBM PC and 100% compatible BIOSes since the PCjr supports a maximum of 4800 bps, attempting to set 9600 bps will result in 4800 bps various network and serial-port drivers support the standard BIOS functions with interrupt-driven I/O instead of the BIOS's polled I/O the 1993/04/08 Compaq system ROM uses only the low two bits of DX the default setting used by DOS (MS-DOS 6, DR-DOS 7.
MICROPROCESSADORES I N T E R R U P Ç Õ E S 01h write modem control register BL = modem control register (see #00334) Return: AX = status DX = port number Note: also supported by ArtiCom SeeAlso: AH=00h,AH=1Fh,AX=8000h"ARTICOM",AH=FBh CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see #00496) closes all devices opened by the given process ID with function 80h Notes: this function should be hooked by a multitasker which wishes to keep track of device ownership; the default BIO
MICROPROCESSADORES I N T E R R U P Ç Õ E S 10h WORD 12h 3 BYTEs 15h BYTE 16h WORD address 18h WORD 1Ah 3 BYTEs 1Dh BYTE 1Eh WORD address 20h 16 BYTEs source segment length in bytes (2*CX-1 or greater) 24-bit linear source address, low byte first source segment access rights (93h) (286) zero (386+) extended access rights and high byte of source destination segment length in bytes (2*CX-1 or greater) 24-bit linear destination address, low byte first destination segment access rights (93h) (286) zero (386+)
MICROPROCESSADORES I N T E R R U P Ç Õ E S SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h 0Ah N BYTEs ---Phoenix BIOS--0Ah BYTE 0Bh BYTE 0Ch BYTE 0Dh 4 BYTEs (Table 00507) Values for device type: 00h disk 01h diskette 02h keyboard 03h PS/2 pointing device 21h waiting for keyboard input (Phoenix BIOS) 80h network FBh digital sound (Tandy) FCh disk reset (PS) FDh diskette motor start FEh printer Luís Miguel Charrua Figueiredo AWARD copyright notice ??? (00h) major version minor version (BCD) A
MICROPROCESSADORES I N T E R R U P Ç Õ E S (Table 00515) Values for model/submodel/revision: Model Submdl Rev BIOS date System FFh * * 04/24/81 FFh * * 10/19/81 FFh * * 10/27/82 FFh 00h rev ??? FFh 01h rev ??? FFh 46h *** ??? FEh * * 08/16/82 FEh * * 11/08/82 FEh * * ../..x.. (see #00521) FEh 00h FEh 43h FEh A6h FDh * FCh * 20MB FCh * FCh 00h FCh 00h 30MB FCh 00h FCh 01h Keyb, 3.
MICROPROCESSADORES I N T E R R U P Ç Õ E S F8h 0Ch 00h 386SX) F8h 0Dh 00h 25MHz, type 3 system brd F8h 0Dh 00h 3 sys brd F8h 0Dh 01h 3 sys brd F8h 0Dh ??? 3 sys brd F8h 0Eh 00h F8h 0Fh 00h F8h 10h 00h F8h 11h 00h F8h 12h 00h F8h 13h 00h F8h 14h 00h 486), 95 XP F8h 15h 00h F8h 16h 00h (33MHz 486) F8h 17h 00h F8h 19h 05h 35/35LS or 40 (20 MHz 386SX) F8h 19h 05h type 37) F8h 19h 06h type 37) F8h 1Ah 00h F8h 1Bh 00h 386DX) F8h 1Bh 00h 486) F8h 1Ch 00h (16MHz 386SX) F8h 1Eh 00h 386SX) F8h 23h 00h F8h 23h 01h (2
MICROPROCESSADORES I N T E R R U P Ç Õ E S 9Ah * * ??? Compaq XT/Compaq Plus 30h ??? ??? ??? Sperry PC 2Dh * * ??? Compaq PC/Compaq Deskpro ??? 56h ??? ??? Olivetti, unknown model ??? 74h ??? ??? Olivetti, unknown model BIOS dates may vary without changes to the revision code, especially Notes: for non-IBM machines * This BIOS call is not implemented in these early versions or under Linux's DOSEMU. Read the Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h instead.
MICROPROCESSADORES I N T E R R U P Ç Õ E S FCh FCh FCh FCh FCh FCh 99h ../..x.. Toshiba T4700CS 9Bh V2.30 01/31x94 Toshiba T4700CT 9Bh V2.50 03/22x94 Toshiba T4700CT 9Bh V5.00 07/28x95 Toshiba T4700CT 9Ch V1.30 01/11x94 Toshiba T1950CT 9Ch V2.50 07/22x94 Toshiba T1950CT (T19XX) FCh 9Dh * V2.40 07/12x94 Toshiba T1950/CS (T19XX) FCh 9Eh * V1.20 12/25x93 Toshiba T3400 FCh 9Eh * V1.30 03/22x94 Toshiba T3400/CT FCh B5h ** V5.10 08/25x95 Toshiba T2110/CS (T21XX) FCh B5h V5.
MICROPROCESSADORES I N T E R R U P Ç Õ E S Notes: if no keystroke is available, this function waits until one is placed in the keyboard buffer the BIOS scan code is usually, but not always, the same as the hardware scan code processed by INT 09. It is the same for ASCII keystrokes and most unshifted special keys (F-keys, arrow keys, etc.), but differs for shifted special keys.
MICROPROCESSADORES I N T E R R U P Ç Õ E S how much extended memory has been used by VDISKs (see #00649). DOS 3.3+ PRINT hooks INT 19 but does not set up a correct VDISK header block at the beginning of its INT 19 handler segment, thus causing some programs to overwrite extended memory which is already in use. the default handler is at F000h:E6F2h for 100% compatible BIOSes MS-DOS 3.
MICROPROCESSADORES I N T E R R U P Ç Õ E S 76h 7Eh 80h 81h 81h 81h 82h 82h 82h 83h 84h 85h 86h 87h 87h 93h 94h 98h 99h A0h A1h A3h A4h A5h A6h A9h B1h B3h B4h B6h B6h B7h B7h B8h BEh C0h C0h C1h C4h C6h C6h C6h C7h C7h C7h CBh CCh CEh D0h D1h D4h D5h D6h D8h DBh DBh E1h E2h E3h E3h E4h E5h E6h EBh F1h F2h F3h F4h F4h F5h officially listed as reserved F.I.X. Minix v1.1 - 1.4a Minix v1.
MICROPROCESSADORES I N T E R R U P Ç Õ E S SeeAlso: AH=07h,AH=0Ch,INT 4A"SYSTEM" NWDOS) ^C/^Break are checked, and INT 23 is called if either pressed Notes: standard output is always the screen under DOS 1.
MICROPROCESSADORES I N T E R R U P Ç Õ E S 1Ch WORD 1Eh 1Fh BYTE BYTE current relative cluster number within file (0 = first cluster of file, 1 = second cluster, etc.) dirty flag (00h = not dirty) unused ---SHARE.EXE loaded, local file--1Ah WORD starting cluster of file on disk 1Ch WORD unique sequence number of sharing record 1Eh BYTE file attributes 1Fh BYTE unused??? ---SHARE.
MICROPROCESSADORES I N T E R R U P Ç Õ E S label in the disk's root dir not supported by MS Windows 3.0 DOSX.
MICROPROCESSADORES I N T E R R U P Ç Õ E S BUG: Novell DOS 7 SHARE v1.00 would refuse file access in the cases in #01403 marked with [1] (read-only open of a read-only file which had previously been opened in compatibility mode); this was fixed in SHARE v1.
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 Exemplos e Exercícios Exemplos Nesta secção estão exemplificados alguns programas (e devidamente comentados) em assembly para o 8086, usando quer o debug quer o Tasm/Tlink. Exemplos usando o debug Exemplo 1 Programa para colocar o valor 1Ah em AX, FFh em BX, e somar os dois valores, gravando no final o programa num ficheiro ex1_debg.com.
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 Exemplo 2 Este programa mostra 15 vezes no ecran a string de caracteres.
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 Exemplo 5 Este programa mostra no ecran um número binário através de um ciclo condicional (LOOP) usando a rotação do byte.
MICROPROCESSADORES E X E M P L O S 297D:0112 INT 21 ;Chama interrupção do DOS 297D:0114 INT 20 ;Finaliza o programa E E X E C R C Í C I O S 6 Exemplo 8 Este programa imprime o primeiro de dois dígitos hexadecimais.
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 Exemplo 10 Este programa pode ler dois dígitos hexadecimais.
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 297D:0219 POP DX ;Extrai o valor de DX da pilha 297D:021A RET ;Retorna o controlo ao programa principal 297D:021B CMP AL,41 ;Compara AL com 41 297D:021D JB 0203 ;Salta se CF é activado ao endereço 0203 297D:021F MOV AH,02 ;Função 2 (escreve um caractere no ecran) 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 stack
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 Exemplo 2 Este programa mostra os caracteres ABCDEFGHIJ no ecran. ;nome do programa: two.asm .model small .stack .
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 WRITE_HEX PROC PUSH CX ;coloca na stack o valor do registo CX PUSH DX ;coloca na stack o valor do registo DX MOV DH,DL ;move o valor do registo DL para o registo DH MOV CX,4 ;move o valor 4 para o registo CX SHR DL,CL CALL WRITE_HEX_DIGIT ;mostra no ecran o primeiro número hexadecimal MOV DL,DH ;move o valor do registo DH para o registo DL AND DL,0Fh CALL WRITE_HEX_DIGIT ;mostra no ecran o segundo número hexadecimal POP DX ;reti
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 Exemplo 4 Este programa mostra no ecran os números 12345. ;nome do programa: four.asm .model small .stack .code TEST_WRITE_DECIMAL PROC MOV DX,12345 ;Move o valor decimal 12345 para o registo DX CALL WRITE_DECIMAL ;Chama o procedimento MOV AH,4CH ;Função 4Ch INT 21h TEST_WRITE_DECIMAL ENDP ;Interrupção 21h ;Finaliza o procedimento PUBLIC WRITE_DECIMAL ;.................................................................
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 PUBLIC WRITE_HEX_DIGIT ;......................................................................; ; ; ;Este procedimento converte os 4 bits mais baixos do registo DL ; ;num número hexadecimal e imprime-os ; ;Use: WRITE_CHAR ; ;......................................................................
MICROPROCESSADORES E X E M P L O S E E X E C R C Í C I O S 6 ;usado para fazer um loop com 255 iterações PRINT_LOOP: CALL WRITE_CHAR ;Chama o procedimento que imprime INC DL ;Incrementa o valor do registo DL LOOP PRINT_LOOP ;Loop para imprimir 10 caracteres MOV AH,4Ch ;Função 4Ch INT 21h PRINT_ASCII ENDP ;Interrupção 21h ;Finaliza o procedimento WRITE_CHAR PROC MOV AH,2h ;Função 2h para imprimir um caracter INT 21h ;Imprime o caracter que está em DL RET ;Retorna o controlo ao procedimento
MICROPROCESSADORES B I B L I O G R A F I A 7 Bibliografia John Uffenbeck, “The 80x86 Family: Design, Programming, and Interfacing”, Prentice Hall James L. Antonakos, “An Introduction to the INTEL Family of Microprocessors”, Prentice Hall Hans-Peter Messner, “The Indespensable PC Hardware Book”, Addison-Wesley Victor S. Gonçalves, “Apontamentos de Microprocessadores”, ENIDH Hugo Eduardo Pérez P., “Tutorial de Linguagem Assembly” www.intel.