Home

Tutorial Assembly

image

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

image

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