Home

Tutorial de Linguagem Assembly

image

Contents

1. 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 sem sinal em nota o decimal Use WRITE HEX DIGIT WRITE DECIMAL PROC PUSH AX P e na pilha o valor do registrador AX PUSH CX P e na pilha o valor do registrador CX PUSH DX P e na pilha o valor do registrador DX PUSH SI P e na pilha o valor do registrador SI MOV AX DX move o valor do registrador DX para AX MOV SI 10 move o valor 10 para o registrador SI XOR CX CX zera o registrador CX NON ZERO XOR DX DX zera o registrador CX DIV SI divis 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 DECIMAL 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
2. Adiciona 30 a D Compara Dl com ta ao L 3A a100 297D 0100 MOV AH 02 297D 0102 MOV DL BL 297D 0104 MOV CL 04 297D 0106 SHR DL CL 297D 0108 ADD DL 30 297D 010B CMP DL 3A 297D 010E JL 0113 297D 0110 ADD DL 07 297D 0113 INT 21 297D 0115 MOV DL BL 297D 0117 AND DL OF 29 D 011A ADD DL 30 297D 011D CMP DL 3A 297D 0120 JL 0125 297D 0122 ADD DL 07 297D 0125 INT 21 297D 0127 INT 20 Este Sal Adiciona Chama in P6e endere o 07 a DL terrup o 0113 se menor do DOS o valor de BL em DL Transporta fazendo AND dos n meros bit a bit Adiciona Compara Salta ao Adiciona Chama in Dl com 30 a DL 3A endere o 0125 07 a DL se menor terrup o do DOS Finaliza o programa programa imprime o segundo de dois d gitos hexadecimais se menor ou igual se menor ou igual D cimo exemplo a100 297D 0100 MOV AH 01 Fun o 1 l caractere do teclado 297D 0102 INT 21 Chama interrup o do DOS 297D 0104 MOV DL AL P e o valor de AL em DL 297D 0106 SUB DL 30 Subtrai 30 de DL 297D 0109 CMP D1L 09 Compara DL com 09 297D 010C JLE 0111 Salta ao endere o 0111 297D 010E SUB DL 07 Subtrai 07 de DL 297D 0111 MOV CL 04 P e o valor 04 em CL 297D 0113 SHL DL CL Insere zeros direita 2974D v0115 INT 21 Chama interrup o do DOS 297D 0117 SUB AL 30 Subtrai 30 de AL 297D
3. 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 ESCRITA RAND MICA T A fun o 21H e a fun o 22H da interrup o 21h s o usadas na 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 para 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 registrador 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 5 2 3 1 Trabalhando com handles 5 2 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 arquivos e o prog
4. o 40H recomendado ao inv s desta fun o FUN O 09H Uso Mostra uma cadeia de caracteres na tela Registradores de chamada 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 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 rea onde est 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 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
5. 1 1 Instru es de transfer ncia 1 2 Instru es de carga 1 3 Instru es de pilha Als I n 4 4 4 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 lulas 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 registrador 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 e
6. DS DX Ponteiro para um FCB j aberto Registradores de retorno AL 0 se n o h erros de outra forma o c digo correspondente 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 j 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 0FFH 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 arqui
7. JPO JNS JO JP JPE JS INSTRU O JMP Prop sito Salto incondicional Sintaxe JMP destino Esta instru o usada para desviar o curso do programa sem tomar em conta as condi es atuais dos flags ou dos dados INSTRU O JA JNBE Prop sito Salto 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 INSTRU O JAE JNB 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
8. 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 resultante 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 menor endere o logo quando subtra 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 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 TEPAS EST R XHOZZ Y N O R O 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 1 1 1 1 0 0 0 1 0 0 0 0 O resultado desta op
9. est o diretamente representadas 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 teclado 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 teti 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 Reconhecimento de comunica o A impressora est pronta para o uso JOS UMBWUNHO Os bits 1 e 2 bits n o s o relevantes A maioria dos BIOS suportam 3 portas paralelas havendo alguns que suportam 4 Fun
10. finaliza o programa Este progra ma mostra na tela os n meros 12345 Quinto exemplo nome do pr model smal stack code PRINT_ASCII ograma five asm l PROC MOV DL 00h move o valor 00h para o registrador DL MOV CX 255 move o valor decimal 255 para o registrador CX usado para fazer um la o com 255 intera es PRINT LOOP CALL WRITE CHAR Chama o procedimento que imprime INC DL Incrementa o valor do registrador DL LOOP PRINT LOOP Loop para imprimir 10 caracteres MOV AH 4Ch Fun o 4Ch INT 21h Interrup o 21h PRINT ASCII ENDP Finaliza o procedimento WRITE CHAR PROC MOV AH 2h Fun o 2h para imprimir um caracter INT 21h Imprime o caracter qu st em DL RE Retorna o controle ao procedimento que chamou WRITE CHAR ENDP Finaliza o procedimento END PRINT ASCII Finaliza o programa Este programa mostra na tela o valor dos 256 caracteres do c digo ASCII kkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkkxkxkxkkxkxkx k CAP TULO 8 BIBLIOGRAFIA Cr ditos Monico Brisexo C Engenheiro Id ia Original Desenvolvimento Implementa o da edi o 1996 Hugo Eduardo P rez P Desenvolvimento Implementa o da edi o 1995 V ctor Hugo Avila B Vers o Inglesa Jeferson Botelho do Amaral Vers o Portuguesa Ana
11. 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 ter acesso a mais do que 65536 locais da mem ria usando apenas um destes registradores 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 ter acesso 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 1CBO 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 indi
12. 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 Devido 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 as suas facilidades de opera o 2 2 2 3 Representa o de ponto flutuante Esta representa o baseada e
13. 291D 0227 POP DX Extrai o valor de DX da pilha 291D 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 aA 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 GAS 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 gt Isto cria o programa execut vel com o mesmo nome do objeto com extens o diferente one ex 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 model small stack code mov AH 1h Fun o 1 do DOS Int 21h l o caracter e retorna o c digo ASCII ao registrador AL mov DL AL move o c digo ASCII para o registrador DL sub
14. DL 30h subtrai de 30h para converter a um d gito de 0 a 9 cmp DL 9h compara se o d gito est entre 0 9 jle digitl se verdadeiro obt m o primeiro n mero 4 bits sub DL 7h se falso subtrai de 7h para converter a uma letra A F digitl mov CL 4h prepara para multiplicar por 16 shl DL CL jmultiplica para converter dentro dos 4 bits mais altos int 21h obt m o pr ximo caracter sub AL 30h repete a opera o de convers o cmp AL 9h compara o valor 9h com o conte do do registrador AL jle digit2 se verdadeiro obt m o segundo d gito sub AL 7h se falso subtrai de 7h digit2 add DL AL adiciona o segundo d gito mov AH 4Ch fun o 4Ch do DOS exit Int 21h interrup o 21h End finaliza o programa Este programa l dois caracteres e os imprime na tela Segundo exemplo nome do programa two asm model small stack code PRINT_A J PROC MOV DL A move o caracter A para o registrador DL MOV CX 10 move o valor decimal 10 para o registrador CX reste valor usado para fazer la o com 10 intera es PRINT LOOP CALL WRITE CHAR Imprime o caracter em DL INC DL Incrementa o valor do registrador DL LOOP PRINT LOOP La o para imprimir 10 caracteres MOV AH 4Ch Fun o 4Ch para sair ao DOS INT 21h Interrup o 21h PRINTAJ ENDP Finaliza o procedimento WRITE CHAR PROC MOV AH 2h Fun o 2h imprime caracter INT 21h Imprime o caracter qu st em DL RET Retorna o c
15. 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 destino 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 e 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 acumulad
16. Uso Ler caracteres do teclado e armazen los num buffer Registradores de chamada AH OAH DS DX Endere o inicial da rea de armazenamento 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 rea 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 0FFH FUN O 14H Uso Leitura sequencial num arquivo FCB Registradores de chamada AH 14H
17. caso CX ainda n o seja 1 INSTRU O LOOPE Prop sito Gerar um la o no programa considerando o estado de ZF Sintaxe OOPE s mbolo Esta 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 LOOPNE 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 tr 09 tas instru es s o usadas para decrementar ou incrementar o conte do de contadores DEC INSTRUCTION Prop sito Decrementar o operador Sintaxe DEC 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 flag
18. conhecidos como handles O primeiro modo de manusear arquivos tem sido usado desde o sistema operacional CPM predecessor do DOS logo permite certas compatibilidades com muitos arquivos velhos 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 volume 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 muito simples permite nos um melhor manuseio de erros Para uma melhor facilidade daqui por diante nos referiremos aos Blocos de Controle de Arquivo como FCBs e aos Canais de Comunica o como handles 5 2 2 M todo FCB 5 2 2 1 Introdu o 2 Abertura de arquivo 3 Criar um novo arquivo 4 Escrita sequencial 5 6 7 Leitura sequencial Leitura e escrita rand mica Fechar um arquivo OIT ND NAN DN ND ND NAN MN ND Er 5 2 2 1 INTRODU O H dois tipos de FCB o normal cujo comprimento 37 bytes e o estendido com 44 bytes Neste tutorial iremos assumir o primeiro ou seja quando falarmos em FCB estaremos fazendo refer ncia ao tipo normal 37 bytes 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 no diret rio corrente pois FCBs n o
19. 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 tamanho 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 seguinte 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 0C1B 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 par metro 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 qu
20. do DOS mpara se o caractere lido um n o l um outro caractere aracter to write on AL ama interrup o do DOS naliza o programa n o 1 l caractere do teclado ENT ER Usa duas fun es da mesma fun o 1 e a segundo escreve um n o 2 escreve um caractere na tela a 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 P6e o valor 00 no registrador DL 291D 0107 RCL BL 1 Rotaciona o byte em BL um bit para a esquerda 291D 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 P6e 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 restado 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 pro
21. feita como se segue NomeMacro MACRO par metrol par metro2 Do mesmo modo que temos a funcionalidade dos par metros 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 AX PUSH BX PUSH DX MOV AH 02H MOV DH Linha MOV DL Coluna MOV BH O INT 10H POP DX POP BX POP AX NDM E Para usar uma macro basta cham la pelo seu nome tal como se fosse qualquer instru o na linguagem assembly Pos 8 6 6 2 3 Biblioteca de Macros Uma das facilidades oferecidas pelo uso de macros a cria o de bibliotecas que s o grupo de macros podendo ser inclu das num programa origin rias de arquivos diferentes A cria o destas bibliotecas muito simples Criamos um arquivo com todas as macros que ser o necess rias e o salvamos como um arquivo texto Para incluir uma biblioteca num programa basta colocar a seguinte instru o Include NomedoArquivo na parte inicial do programa antes da declara o do modelo de mem ria 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 digo do programa come a aqui STACK A pilha
22. fornecem suporte ao sistema de organiza o de arquivos atrav s de diret rios do DOS FCB composto pelos seguintes campos 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 a que registro ser feito acesso 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 O 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 abertura O registrador DX deve apontar para o bloc
23. o Olh Uso Setar uma porta paralela 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 0 Estado de time out 1 2 3 Erro de entrada e sa da 4 Impressora selecionada 5 Fim de papel 6 1 Reconhecimento de comunica o 71 A impressora est pronta para o uso 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 LPT1I 0 LPT2 1 diante O estado da impressora codificado bit a bit como segue assim por assim por 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 UMEBWUNHO Os bits 1 e 2 bits n o s o relevantes 5 2 Gerenciamento de Arquivos 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 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
24. 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 0D62 0100 mov ax 0002 0D62 0103 mov bx 0004 0D62 0106 add ax bx O D62 0108 nop D62 0109 O tm ntramos com o comando t para executar passo a passo as instru es AX 0002 BX 0000 Cx 0000 DX 0000 SP FFEE BP 0000 SI 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 Vemos o valor 0002 no registrador AX Teclamos t para executar a segunda instru o AX 0002 BX 0004 CX 0000 DX 0000 SP FFEE BP 0000 SI 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
25. o valor do registrador CX RE Retorna o controle ao procedimento que chamou WRITE HEX ENDP PUBLIC WRITE HEX DIGIT EEE EEEE EEAO E EE EE E A E EE E EE E E E E EO E E E A EE E Este procedimento converte os 4 bits mais baixos do registrador DL para um n mero hexadecimal e o mostra na tela do computador Use WRITE CHAR z W A T x USH DX DL 10 HEX LETTER D DL non Short WRITI SUL D H4G4 4 OM T DD DL A 10 WRITE DI POP DX T WRITE_HEX_DIGIT ENDP U T T CALL WRITE CHAR DIGIT PROC E DIGIT UBLIC WRITE CHAR coloca na pilha o valor de DX compara se n o salta se sim escreve se o n mero de bits menor do que 10 para HEX LETER converte para n mero o caracter converte um caracter para hexadecimal imprime o caracter na tela Retorna o valor inicial do registrador DX para o registrador DL Retorna o controle ao procedimento que chamou WRITE CHAR PROC PUSH AX Coloca na pilha o valor do registrador AX MOV AH 2 Fun o 2h INT 21h Interrup o 21h POP AX Extrai da pilha o valor de AX RE 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
26. 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 dois 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 a
27. uma constante diretamente para um registrador de segmento primeiro deve se mover para um registrador 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 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 a 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 3 4 2 0PERA ES L GICAS E ARITM TICAS As instru es de opera es l gicas s o and n
28. 0119 CMP AL 09 Compara AL com 09 297D 011B JLE 011F Salta ao endere o 011f 297D 011D SUB AL 07 Subtrai 07 de AL 297D 011F ADD DL AL Adiciona AL a DL 291D 0121 INT 20 Finaliza o programa Este programa pode ler dois d gitos hexadecimais D cimo primeiro exemplo a100 297D 0100 CALL 0200 297D 0103 INT 20 a200 297D 0200 PUSH DX 297D 0201 MOV AH 08 297D 0203 INT 21 297D 0205 CMP AL 30 297D 0207 JB 0203 297D 0209 CMP AL 46 Chama um procedimento Finaliza o programa P6e o valor de DX na pilha Fun o 8 Chama interrup o do DOS Compara AL com 3 0 Salta se CF ativado ao endere o 0203 Compara AL com 4 6 297D 020B JA 0203 Salta ao endere o 0203 se diferente 297D 020D CMP AL 39 Compara AL com 39 297D 020F JA 021B Salta ao endere o 021B se diferente 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 291D 021A RET Retorna o controle ao programa principal 297D 021B CMP AL 41 Compara AL com 41 297D 021D JB 0203 Salta se CF ativado ao endere o 0203 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
29. A RR TUTORIAL D E 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 Bibliografia oISNUMABWUNH Dai ii CAP TULO 1 INTRODU O Conte do 1 0 que h de novo neste material 2 Apresenta o 3 Por que aprender Assembly 4 N s precisamos da sua opini o RARA AI 1 1 0 que h de novo neste material Ap s um ano da realiza o da primeira vers o do tutorial e atrav s das Opini es recebidas por e mail resolvemos ter por disposi o todos estes coment rios e sugest es Esperamos que atrav s deste novo material Assembly as pessoas que se mostrarem interessadas possam aprender mais sobre o seu IBM PC Esta nova edi o do tutorial inclui Uma se o completa sobre como usar o programa debug Mais exemplos de programas Um motor de pesquisa para qualquer t pico ou item relacionado a esta nova vers o Consider vel reorganiza o e revis o do material Assembly Em cada se o h um link para o Dicion rio On line de Computa o de Dennis Howe 1 2 Apresenta o Este tutorial destina se aquelas 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 l
30. D62 CS 0D62 IP 0100 NV UP EI PL NZ NA PO NC 0D62 0100 2E CS 0D62 0101 803ED3DF00 CMP BYTE PTR DFD3 00 CS DFD3 03 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 par metro 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 para Quando o prompt assim se tornar significa que poss vel embora n o obrigat ria a mudan a do valor contido no registrador bastando 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 par metros 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 par metros 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 lt Ponteiro
31. Mar a Peraza Programadora de Linguagem Assembly Graciela Salcedo Mancilla Programadora Tcl Tk Juan Olmos Monroy Designer Gr fico Refer ncias Bibliogr ficas Assembly Language For IBM Microcomputers J Terry Godfrey Prentice Hall Hispanoamericana S A Mexico Basic Assembler A Rojas Ed Computec Editores S A de C v Mexico IBM Personal Computer Assembly Language Tutorial Joshua Auerbach Yale University Organiza o Estruturada de Computadores Andrew S Tanenbaum Prentice Hall do Brasil Guia do Programador para as Placas EGA e VGA Richard F Ferraro Ed Ci ncia Moderna Programando em Assembler 8086 8088 Jeremias r D Pereira dos Santos Edison raymundi Junior McGraw Hill Assembly IBM PC T cnicas de Programa o Alan r Miller EBRAS Editora Brasileira Linguagem Assembly para IBM PC Editora C Caixa de Peter Norton John Socha Campus Ferramentas Carlos Augusto P Gomes Antonio Editora Carlos Barbosa Erica Interrup es MS DOS ROM BIOS Eurico Soalheiro Br s McGraw Hill Desenvolvimento de Software B sico eland L Beck Editora Campus Programa o Assembly 80386 Guia Pr tico para Programadores Ross P McGraw Hill Nelson
32. OM 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 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 executar um conjunto de instru es relacionadas Q Sair do programa debug R T U W Mostrar o conte do de um ou mais registradores Executar passo a passo as instru es Desmontar o c digo de m quina em instru es simb licas Gravar um programa em disco aN 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 s spante este o prompt do programa Para visualizar o conte do dos registradores experiment r Enter AX 0000 BX 0000 cx 0000 DX 0000 SP FFEE BP 0000 SI 0000 DI 0000 DS 0D62 ES 0D62 SS 0
33. Os colchetes no segundo par metro 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 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 par metro 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 par metro ao comando a isso recomend vel para evitar problemas logo a 100Tenter 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
34. amadas 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 que n s usamos diariamente o decimal mas este sistema n o conveniente para m quinas pois ali as informa es tem 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 E 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
35. ando 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 e AL e 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 basta sub
36. antos bytes gravou w 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 L 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 na mem ria O qu le faz desmontar o c digo e mostr lo em assembly Os par metros 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 Di ii ie CAP TULO 3 PROGRAMA O ASSEMBLY Conte do Construindo programas em Assembly Processo Assembly Pequenos programas em Assembly Tipos de instru es O OU w AUNE 3 1 Construindo programas em Assembly 3 1 1 Software necess rio 3 1 2 Programa o Assembly 3 1 1 SOFTWARE ESS RIO z Q 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 exe
37. ara ter acesso a cada uma delas necess rio colocar o n mero da 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 0AH exibe um caracter na posi o do cursor Fun o 0EH modo alfanum rico de exibi o de caracteres 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
38. car 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 TABELAS 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 1 MOV e 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
39. 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 E E A E o Td a T E a A E EE E pd I EE a EE E A R ENTS E N I AE EEA A D ENTE EAA E WRITE HEX DIGIT PROC PUSH DX P6e 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 DIGI 1 ENDP PUBLIC WRITE CHAR DEE Nanda Te ain Gu usar a da O de SUS la DE VC cg q e E E RA a DE a na O Na OR RT DA a TSE o Ci cas E TEE AS U a e S Este procedimento imprime um caracter na tela usando uma fun o D O 5S WRITE CHAR PROC PUSH AX P6e na pilha o valor do registrador AX MOV AH 2h Fun o 2h INT 21h Interrup o 21h POP AX Retira da pilha o valor inicial do registrador AX RE Retorna o controle ao procedimento que chamou WRITE CHAR ENDP END TEST WRITE DECIMAL
40. crita N o poss vel a cria o de diret rios atrav s desta fun o FUN 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 ha 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 6 5 4 3 2 1 O 0 0 Apenas leitura 0 01 Apenas escrita aJr od 0 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 4 5 1 4 2 Interrup o 10h Prop sito Chamar uma diversidade de fun es do BIOS Sintaxe Int 10H Esta interrup o tem v rias fun es todas para entrada e sa da de v deo P
41. cut 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 normalmente 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 importante incluir as seguintes diretivas assembly MODEL SMALL Define o melo de mem ria a usar em nosso programa CODI Define as instru es do programa relacionado ao segmento de c digo STACK Reserva espa o de mem ria para as instru es de programa na pilha END Finaliza um programa assembly Ea Vamos programar Primeiro passo 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
42. da e a sa da de informa o entr J 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 inconvenientes 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 pode 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 44 EITOS B SICOS Informa es nos computadores M todos de representa o de dados Informa o no computador 2 1 1 Unidades de informa o Sistemas num ricos Convertendo n meros bin rios para decimais Convertendo n meros decimais para bin rios Sistema hexadecimal O DONNNHMNHZ DR OEE Q ND MN MN DIO ND MN MN Q DAMN MN MN a e e Os MN 2 2 1 1 Unidades de informa o Para o PC processar a informa o necess rio qu la esteja em c lulas especiais ch
43. declarada End Inicio Fim do programa kkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkkxkxkxkkkxkx k T CAP TULO 7 EXEMPLOS DE PROGRAMAS Conte do Exemplos de Programas com Debug Exemplos de Programas com TASM Teka EA 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 para ver o que cada programa faz Procedimento Primeiro passo Carregar o programa exemplo Por exemplo C gt debug n one com u 100 109 0D80 0100 B80600 MOV AX 0006 0D80 0103 BB0400 MOV BX 0004 0D80 0106 01D8 ADD AX BX 0D80 0108 CD20 INT 20 Nota n one com Dar nome ao programa a ser carregado Carreg lo u 100 109 Desmontar o c digo do endere o inicial ao final especificado Segundo passo Digite o comando g Por exemplo 9 Program terminated normally Exe Pri a0 297 297 2 9 7 297 A meiro ex 100 D 0100 D 0103 D 0106 D 0108 emplo MOV MOV ADD INT mplos de programas no Debug AX 0006 BX 0004 AX BX 20 P6e o valor 0006 no registrador AX P6e o valor 0004 no registrador BX Ad iciona BX ao conte do de AX Finaliza o Programa nica coisa que este programa faz salvar dois valores em dois registrado
44. era 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 fique armazenado no registrador AX INSTRU O NOT Prop sito 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 DOO HH Oror OoHHAH 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 realiza uma disjun o exclusiva de dois operadores bit a bit Fonte Destino Destino 1 1 0 0 0 1 0 1 1 0 0 0 4 2 2 Instru es aritm ticas S o usadas para realizar opera es aritm ticas nos operadores DC DD IV DIV UL MUL vnHiEgAHD Di w wW UB INSTRU O ADC Prop sito
45. errup o Sintaxe CLI Esta instru o desliga o flag de interrup es desabilitando deste modo interrup es mascar veis Uma interrup 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 0 Poder amos dizer qu la apenas inverte o valor do flag INSTRU O STC Prop sito Ativar o flag de carry Sintaxe STE Esta instru o ajusta para 1 o flag CF INSTRU O STD Prop sito Ativar o flag de endere o Sintaxe SID Esta instru o ajusta para 1 o flag DF INSTRU O STI Prop sito Ativar o flag de interrup o Sintaxe SLIL Esta instru o ativa o flag IF e habilita interrup es externas mascar veis que s funcionam quando IF 1 Di ii T CAP TULO 5 INTERRUP ES E GER NCIA DE ARQUIVOS Conte do Interrup es Dei 5 2 Gerenciamento de arquivos 5 1 Interrup es 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 ge
46. 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 par metro de destino 4 1 3 Instru es de manipula o da pilha Estas instru es permitem usar a pilha para armazenar ou recuperar dados POP POPE 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 vai 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 PF AP ZF SE TE IF DF OF HOoOowvo Jo RBNO 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
47. grama imprime um valor zero em d gitos hexadecimais S timo 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 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 21 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 P6e o valor de BL em DL 297D 0104 MOV CL 04 P e o valor 04 em CL 297D 0106 SHR DL C 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 D1 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 29 D 0115 INT 20 Finaliza o programa Nono exemplo Fun o 2 escre P6e o valor de P e o valor 04 Desloca os 4 bi Este programa imprime o primeiro de dois d gitos ve BL em Es hexadecimais um caractere na tela em DL CL mais altos do n mero ao nibble mais direita
48. gundo 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 ZE 2a AF 2 PE CE O 22 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 endere o de segmento A palavra associada com o menor endere o o ndere o de 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 VARI equivalente a EA SI VARI 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
49. i 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 Eh um grupo de c lulas agora sendo fabricada com semicondutores 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 valor num rico e capaz de ser endere ada isto pode ser identificada de forma singular em rela o as 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 a 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 entra
50. idos 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 a 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 grupo 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 ZA 2 2 2 M todos de representa o de dados num computador 2 2 2 1 C digo ASCII M todo BCD PERAI EA 2 2 2 3 Representa o de ponto flutuante 2
51. inguagem 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 se o introdut ria s o mencionados alguns conceitos elementares sobre computadores e a Linguagem Assembly em si 1 3 Por que aprender Assembly A primeira raz o para se trabalhar com o assembly 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 assembly 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 execu o 1 4 N s precisamos da sua opini o Nosso intuito oferecer um modo simples para que voc consiga aprender Assembly por si mesmo Por tanto qualquer coment rio ou sugest o ser bem vinda Di ii ii 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 EA Esta se o tem o prop sito de fazer um breve coment rio a respei
52. m 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 2 3 1 Processo de cria o de programas Registradores da CPU Programa debug Estrutura Assembly Criando um programa assembly simples Armazenando e carregando os programas NNNNN O OU www SS UE WUN 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 segi ncia de zeros e uns que podem ser interpretados pelo processador O ltimo est gio a elimina o de erros detectados no programa na fa
53. ndere ada por SI para o destino endere ado por DI Sintaxe MOVS Este comando n o necessita de par metros 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 VAR1 VAR2 MOV SI OFFSET MOV DI OFFS MOVS Primeiro inicializamos os valores de SI e DI com os endere os das vari veis VAR1 e VAR2 respectivamente ent o ap s a execu o de MOVS o conte do de VARI copiado para VARZ2 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 4 1 2 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 registrador AL Os comandos LODSB e LODSW s o usados do mesmo modo o primeiro carrega um byte e o se
54. o 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 SEQUENCIAL 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 SEQ ENCIAL Antes de tudo devemos definir a rea de transfer ncia de arquivo ou DTA Para a leitura seq encial usaremos a fun o 14H da interrup o 21h
55. o atual do cursor Registradores de chamada 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 Bd DE Fun o 0 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
56. ontrole ao procedimento que chamou WRITE CHAR ENDP Finaliza o procedimento END PRINT_A_J Terceiro exemplo nome do programa three asm model small Finaliza o programa Este programa mostra os caracteres ABCDEFGHIJ na tela 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 a ra E a SN po S O DO SO E EUNE A a PED O E Ea a E va E Este procedimento converte para hexadecimal o byte armazenado no registrador DL e mostra o d gito o Use WRITE HEX DIGIT e id nto E a aan q ca 7 TO dp OE Tunado ea DD a AO Di a CD 2 RS a 7 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 mostra na tela o segundo n mero hexadecimal POP DX retira da pilha o valor do registrador DX POP CX retira da pilha
57. or 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 Multiplica 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 instru 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 Esta instru o subtrai o operador fonte do destino EA 4 3 Instru es de controle de processos 4 3 1 Instru es de salto 4 3 2 Instru es de la os loop 4 3 3 Instru es de contagem 4 3 4 Instru es de compara o 4 3 5 Instru es de flag 4 3 1 Instru es de salto Usadas para transferir o processo de execu o do programa para o operador indicado JMP JA JNBE JAE JNBE JB JNAE JBE JNA JE JZ JNE JNZ JG JNLE JGE JNL JL JNGE JLE JNG JC JNC JNO JNP
58. ot 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 flag 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 sequ 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 Di RR CAP TULO 4 INSTRU ES ASSEMBLY Conte do 4 1 Instru es de opera o de dados Instru es l gicas e aritm ticas 4 3 Instru es de controle de processos A N A stru es de opera o de dados
59. pilha CODE as linhas seguintes s o instru es do programa mov ah 0lh move o valor 01h 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 construir o programa objeto Exemplo C N gt tasm examl asm Turbo Assembler Version 2 0 Copyright c 1988 1990 Borland International Assembling file examl asm Error messages None Warning messages None Passes 1 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 N gt tlink examl obJ Turbo Link Version 3 0 Copyright c 1987 1990 Borland International CENS 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 E opcional a coloca o da extens o obj no comando Quinto passo Executar o programa execut vel criado C N gt examl enter Lembre se este programa assembly muda o tamanho do cursor no DOS 3 2 Processo Assembly 3
60. ramador pode concentrar s m 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 sequencial ou rand mico o arquivo simplesmente tomado como uma rede de bytes 5 2 3 2 FUN 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 Di ii ii 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 d 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 recuperado qu
61. renciadas na sua totalidade pelo hardware e n o poss vel modific las Um exemplo claro deste tipo de interrup es a que atualiza 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 E 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 E 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 inst
62. res e adicionar o valor de um ao outro Seg a ocr 0c1 a 0c1 0c1 0ci1 0c1 0ci1 0c1 0c1 0c1 Est undo exe 100 B 0100 j B 0102 1 102 H 125 0125 M 128 M 12B M 12D I 12F D 130 J 132 J 134 I W ww w w 2000000 e progra mplo Enter ello How are you OV DX 0102 OV AH 09 e 2 Cc CX xZ 0134 Terceiro exemplo al 297 297 297 297 Est 00 D 0100 D 0102 D 0105 D 0107 MOV MOV INT INT mo 125 Salta para o endere o 125h 0d Oa Copia a string para registrador DX OV CxX 000F Quantas vezes a string ser mostrada Copia o valor 09 para registrador AH Mostra a string Subtrai 1 de CX Se CX igual a O salta para o endere o 0134 Salta ao endere o 012D Finaliza o programa AH 01 CX 0007 10 20 ma mostra 15 vezes na tela a string de caracteres Fun o para mudar o cursor sFo CR rmata o cursor ama interrup o do BIOS Finaliza o programa e programa muda o formato do cursor Quarto exemplo MOV INT CMP JNZ MOV MOV INT INT a100 297D 0100 297D 0102 297D 0104 297D 0106 297D 0108 297D 010A 297D 010C 297D 010E Est pri caractere na tela ENTER Quinto exem plo Fu Ch Co Se Fu CA Ch PEL e programa usa a interrup o 21h do DOS meira l um caractere do teclado O programa l caracteres do teclado at encontrar um ama interrup o
63. 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 1 1 0 0 1 Decimal 1 220 1X201 4 04202 0420304 1 2 4 1 2 0 0 16 19 decimal A O caracter usado em computa o como s mbolo para 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 Vai ser analisado 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 O 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 obt
64. ru 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 performance 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 t m acesso aos 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 5 1 4 1 Int 21H Interrup o do DOS ltiplas chamadas fun es DOS H Interrup o do BIOS trada e Sa da de V deo Sae 1 4 2 Int 10 n 6H Interrup o do BIOS n 7 n Dre LAS ENT trada e Sa da do Teclado H Interrup o do BIOS trada e Sa da da Impressora 5 1 4 4 Int hHhAHASAO 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 es
65. s INSTRU O CMPS CMPSB CMPSW Prop sito Comparar cadeias de um byte ou uma palavra Sintaxe CMP destino fonte Esta instru o 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 na stas instru es afetam diretamente o conte do dos flags LC ID LI CMC STC STD STI E E e oa 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 int
66. se 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 Os registradores segundo seus respectivos nomes AX BX CX DX DS ES SS CS BP SI DI SP IP Registrador Acumulador Registrador Base Registrador Contador Registrador de Dados Registrador de Segmento de Dados Registrador de Segmento Extra Registrador de Segmento de Pilha Registrador de Segmento de C digo Registrador Apontador da Base Registrador de ndice Fonte Registrador de ndice Destino Registrador Apontador de Pilha Registrador Apontador da Pr xima Instru o F Registrador de Flag 2 3 3 Programa Debug Para a cria o de um programa em assembly 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 C
67. sm N o esquecer de salvar em formato ASCII Terceiro passo Usar o programa TASM para construir o programa objeto C N 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 International C N gt Quinto passo Executar o programa C N gt exam2 enter x CENS Este programa imprime o caracter na tela 3 4 Tipos de instru es 3 4 1 Movimento de dados 3 4 2 0pera es l gicas e aritm ticas 3 4 3 Saltos la os e procedimentos 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 externo vice versa Este 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
68. stituir 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 6 2 1 Defini o de uma Macro 6 2 2 Sintaxe de uma Macro 6 2 3 Bibliotecas de Macros 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 par metros e num procedimento n o No momento em que a macro executada cada par metro 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
69. t em hexadecimal Esta interrup o tem muitas fun es para ter acesso a cada uma delas necess rio que o n mero correspondente 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 d arquivos M todo FCB OFH Abertura de arquivo 14H Leitura sequencial 15H Escrita sequencial 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
70. to 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 DESCRI O DE UM SISTEMA COMPUTACIONAL l1 Processador Central 2 Mem ria Principal 3 Unidades de Entrada e Sa da 4 Unidades de Mem ria Auxiliar NNNNN nRAHHR 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 Eh tamb m conhecido por CPU ou Unidade Central de Processamento que por sua vez composta 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 freq 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 ad
71. vo est no fim do mesmo Esta fun o l o registro especificado pelos campos do bloco atual e registro de um FCB aberto e coloca a informa o na DTA Area 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 comprimento 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 es
72. w 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 instru o salta se n o h paridade ou se a paridade mpar O salto feito se PF 0 INSTRU O 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 JPE Prop sito Salto condicional e o estado dos flags tomado E 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 00P OOPNE Eal 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
73. zero O salto feito se ZF est desativado INSTRU O JG JNLE Prop sito Salto condicional e o sinal tomado Sintaxe JG s mbolo A instru o salta se est larger se est not larger ou se est equal O salto ocorre se ZF 0 ou se OF SF INSTRU O JGE JNL Prop sito Salto condicional e o sinal tomado Sintaxe JGE s mbolo A instru o salta se est larger se est less than ou se est equal O salto feito se SF OF INSTRU O JL JNGE Prop sito Salto condicional e o sinal tomado Sintaxe JL s mbolo A instru o salta se est less than se est not larger than ou se est equal O salto feito se SF diferente de OF INSTRU O JLE JNG Prop sito Salto condicional e o sinal tomado Sintaxe 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 overflo

Download Pdf Manuals

image

Related Search

Related Contents

P516-130 AD-250 UG SP-g.indd  Inventum PW420  Timex W-91 User's Manual  Samsung SyncMaster  PDFファイル  IE61K ELECTRIC COOKTOP USER MANUAL  Version 3.02  Instructions de montage et mode d`emploi Station de porte    Life Fitness M051-00K63-A032 User's Manual  

Copyright © All rights reserved.
Failed to retrieve file