Tutorial Linguagem Assembly - Tutorial em Portugues da linguagem de programaçao...\nTutorial Linguagem Assembly\n**************************************************************************** T U T O R I A L --------------D E --L I N G U A G E M ----------------Conteúdo: 1.Introdução 2.Conceitos Básicos 3.Programação Assembly 4.Instruções Assembly 5.Interrupções e gerência de arquivos 6.Macros e procedimentos 7.Exemplos de programas 8.Bibliografia ***************************************************************************** CAPÍTULO 1: INTRODUÇÃO Conteúdo: 1.1.O que há de novo neste material 1.2.Apresentação 1.3.Por que aprender Assembly? 1.4.Nós precisamos da sua opinião --------------- // --------------1.1.O 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 linguagem é o funcionamento dos recursos internos do processador, os exemplos descritos não são compatíveis com qualquer outra arquitetura. A S S E M B L Y ---------------\nAs 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.\n***************************************************************************** CAPÍTULO 2: CONCEITOS BÁSICOS Conteúdo: 2.1.Descrição básica de um sistema computacional. 2.2.Conceitos básicos da Linguagem Assembly 2.3.Usando o programa debug --------------- // --------------Esta seção tem o propósito de fazer um breve comentário a respeito dos principais componentes de um sistema computacional, o que ir permitir ao usuário uma melhor compreensão dos conceitos propostos no decorrer do tutorial.\n2.1.DESCRIÇÃO DE UM SISTEMA COMPUTACIONAL 2.1.1.Processador Central\n2.1.2.Memória Principal 2.1.3.Unidades de Entrada e Saída 2.1.4.Unidades de Memória Auxiliar 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. É 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: adição e subtração de dois números inteiros, multiplicação e divisão de número inteiro, manuseio de bits de registradores e comparação do conteúdo de dois registradores. Computadores pessoais podem ser classificados pelo que é conhecido como tamanho da palavra, isto é, a quantidade de bits que o processador é capaz de manusear de uma só vez. 2.1.2.Memória Principal. É 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 entrada e a saída de informação entre ele e a memória. Através do uso destas\ncomunicaçõ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. --------------- // --------------2.2.CONCEITOS BÁSICOS 2.2.1.Informações nos computadores 2.2.2.Métodos de representação de dados 2.2.1.Informação no computador: 2.2.1.1 Unidades de informação 2.2.1.2.Sistemas numéricos 2.2.1.3.Convertendo números binários para decimais 2.2.1.4.Convertendo números decimais para binários 2.2.1.5.Sistema hexadecimal 2.2.1.1.Unidades de informação Para o PC processar a informação, é necessário que ela esteja em células especiais, chamadas á registradores. Os registradores são grupos de 8 ou 16 flip-flops. Um flip-flop é um dispositivo capaz de armazenar 2 níveis de voltagem, um baixo, geralmente 0.5 volts, e outro comumente de 5 volts. O nível baixo de energia no flip-flop é interpretado como desligado ou 0, e o nível alto, como ligado ou 1. Estes estados são geralmente conhecidos como bits, que são a menor unidade de informação num computador. Um grupo de 16 bits é conhecido como palavra; uma palavra pode ser dividida em grupos de 8 bits chamados bytes, e grupos de 4 bits chamados nibbles. 2.2.1.2.Sistemas numéricos O sistema numérico 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. É possível representar um determinado número em qualquer base através da seguinte fórmula:\nOnde n é a posição do dígito, iniciando da direita para a esquerda e numerando de 0. D é o dígito sobre o qual nós operamos e B é a base numérica usada. 2.2.1.3.Convertendo números binários para decimais Quando trabalhamos com a Linguagem Assembly encontramos por acaso a necessidade de converter números de um sistema binário, que é usado em computadores, para o sistema decimal usado pelas pessoas. O sistema binário é baseado em apenas duas condições ou estados, estar ligado(1), ou desligado(0), portanto sua base é dois. Para a conversão, podemos usar a fórmula de valor posicional: Por exemplo, se tivermos o número binário 10011, tomamos cada dígito da direita para a esquerda e o multiplicamos pela base, elevando ... potência correspondente ... sua posição relativa: Binary: Decimal: = 1 1*2^0 1 1 0 0 1\n+ 1*2^1 + 0*2^2 + 0*2^3 + 1*2^4 + 2 + 0 + 0 + 16 = 19 decimal.\nO 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.\nTomemos como exemplo o número decimal 43. 43/2=21 e o resto é 1; 21/2=10 e o resto é 1; 10/2=5 e o resto é 0; 5/2=2 e o resto é 1; 2/2=1 e o resto é 0; 1/2=0 e o resto é 1. Para construir o equivalente binário de 43, vamos pegar os restos obtidos de baixo para cima, assim temos 101011. 2.2.1.5.Sistema hexadecimal Na base hexadecimal temos 16 dígitos, que vão de 0 a 9 e da letra A até a F, estas letras representam os números de 10 a 15. Portanto contamos: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E, e F.\nA 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 e menores que 16 são representados pelas letras A,B,...,F. Logo, obtemos como resultado: 2Bh, onde o "h" representa a base hexadecimal. Para a conversão de um número hexadecimal em binário é apenas necessário inverter os passos: tomamos o primeiro dígito hexadecimal e o convertemos para binário, a seguir o segundo, e assim por diante. --------------- // --------------2.2.2.Métodos de representação de dados num computador. 2.2.2.1.Código ASCII 2.2.2.2.Método BCD 2.2.2.3.Representação de ponto flutuante\n2.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.\n2.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 em notação científica, isto é, representar um número em 2 partes: sua base e seu expoente. Por exemplo o número decimal 1234000, é representado como 1.234*10^6, 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 2.3.2.Registradores da CPU 2.3.3.Programa debug 2.3.4.Estrutura Assembly 2.3.5.Criando um programa assembly simples 2.3.6.Armazenando e carregando os programas 2.3.1.Processo de criação de programas. Para a criação de programas são necessários os seguintes passos: * Desenvolvimento do algoritmo, estágio em que o problema a ser solucionado é estabelecido e 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 seqüência de zeros e uns que podem ser interpretados pelo processador. * O último estágio é a eliminação de erros detectados no programa na fase de teste. A correção normalmente requer a repetição de todos os passos, com observação atenta.\n2.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 e 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 Registrador Acumulador BX Registrador Base CX Registrador Contador DX Registrador de Dados DS Registrador de Segmento de Dados ES Registrador de Segmento Extra SS Registrador de Segmento de Pilha CS Registrador de Segmento de Código BP Registrador Apontador da Base SI Registrador de Índice Fonte DI Registrador de Índice Destino SP Registrador Apontador de Pilha IP Registrador Apontador da Próxima Instrução F Registrador de Flag\n2.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 .COM, e por causa das características deste tipo de programa, eles não podem exceder os 64 Kb, e também devem iniciar no endereço de memória 0100H dentro do segmento específico. É 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\nQ Sair do programa debug R Mostrar o conteúdo de um ou mais registradores T Executar passo a passo as instruções U Desmontar o código de máquina em instruções simbólicas W Gravar um programa em disco É 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:/>Debug [Enter] Você notará então a presença de um hífen no canto inferior esquerdo da tela. Não se espante, este é o prompt do programa. Para visualizar o conteúdo dos registradores, experimente: -r[Enter] AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0D62 ES=0D62 SS=0D62 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\ncomando. 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, <- Ponteiro 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".\n2.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\nendereç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 100[enter] mov ax,0002[enter] mov bx,0004[enter] add ax,bx[enter] nop[enter][enter] O que o programa faz? Move o valor 0002 para o registrador ax, move o valor 0004 para o registrador bx, adiciona o conteúdo dos registradores ax e bx, guardando o resultado em ax e finalmente a instrução nop (nenhuma operação) finaliza o programa. No programa debug, a tela se parecerá com: C:\_>debug -a 100 0D62:0100 0D62:0103 0D62:0106 0D62:0108 0D62:0109\nmov ax,0002 mov bx,0004 add ax,bx nop\nEntramos com o comando "t" para executar passo a passo as instruções: -t 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: -t AX=0002 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000\nDS=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: -t 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).\nNão seria prático ter que digitar o programa cada vez que iniciássemos o Debug. Ao invés disso, podemos armazená-lo no disco. Só que o mais interessante nisso é que um simples comando de salvar cria um arquivo com a extensão .COM, ou seja, executável - sem precisarmos efetuar os processos de montagem e ligação, como veremos posteriormente com o TASM. Eis os passos para salvar um programa que já esteja na memória: * Obter o 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 0C1B:0103 0C1B:0106 0C1B:0108 0C1B:010A mov mov add int ax,0002 bx,0004 ax,bx 20\nPara 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-n test.com O comando "rcx" permite-nos mudar o conteúdo do registrador CX para o valor obtido como tamanho do arquivo com o comando "h", neste caso 000a. -rcx CX 0000 :000a Finalmente, o comando "w" grava nosso programa no disco, indicando quantos bytes gravou. -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 "l" (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 BX,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 que ele 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. ***************************************************************************** CAPÍTULO 3: PROGRAMAÇÃO ASSEMBLY Conteúdo: 3.1.Construindo programas em Assembly 3.2.Processo Assembly 3.3.Pequenos programas em Assembly 3.4.Tipos de instruções --------------- // --------------3.1.Construindo programas em Assembly. 3.1.1.Software necessário 3.1.2.Programação Assembly\n3.1.1.SOFTWARE NECESSÁRIO Para que possamos criar um programa, precisamos de algumas ferramentas: Primeiro de um editor para criar o programa fonte. Segundo de um montador, um programa que irá transformar nosso fonte num programa objeto. E, terceiro, de um linker (ligador) que irá gerar o programa executável a partir do programa objeto. O editor pode ser qualquer um que dispusermos. O montador será o TASM macro assembler da Borland, e o linker será o TLINK, também da Borland. Nós devemos criar os programas fonte com a extensão .ASM para que o TASM reconheça e o transforme no programa objeto, um "formato intermediário" do programa, assim chamado porque ainda não é um programa executável e tão pouco um programa fonte. O linker gera a partir de um programa .OBJ, ou da combinação de vários deles, um programa executável, cuja extensão é 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 .CODE 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 Vamos programar Primeiro passo Use qualquer editor para criar o programa fonte. Entre com as seguintes linhas: Primeiro exemplo ; use ; para .MODEL SMALL .STACK .CODE mov ah,01h mov cx,07h int 10h mov ah,4ch int 21h END fazer comentários em programas assembly ;modelo de memória ;espaço de memória para instruções do programa na pilha ;as linhas seguintes são instruções do programa ;move o valor 01h para o registrador ah ;move o valor 07h para o registrador cx ;interrupção 10h ;move o valor 4ch para o registrador ah ;interrupção 21h ;finaliza o código do programa\nSegundo passo Salvar o arquivo com o seguinte nome: exam1.asm Não esquecer de salvá-lo no formato ASCII. Terceiro passo Usar o programa TASM para construir o programa objeto. Exemplo: C:\_>tasm exam1.asm Turbo Assembler Version 2.0 Assembling file: exam1.asm Error messages: None Warning messages: None Passes: 1 Remaining memory: 471k\nCopyright (c) 1988, 1990 Borland International\nO 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:\_>tlink exam1.obj Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International C:\_> Onde exam1.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. É opcional a colocação da extensão .obj no comando. Quinto passo Executar o programa executável criado. C:\_>exam1[enter] Lembre-se, este programa assembly muda o tamanho do cursor no DOS. --------------- // --------------3.2.Processo Assembly. 3.2.1.Segmentos 3.2.2.Tabela de equivalência 3.2.1.SEGMENTOS A arquitetura dos processadores x86 força-nos a usar segmentos de memória para gerenciar a informação, o tamanho destes segmentos é de 64Kb. A razão de ser destes segmentos é que, considerando que o tamanho máximo de um número que o processador pode gerenciar é dado por uma palavra de 16 bits ou registrador, assim não seria possível 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.\nDesta forma, para que o montador seja capaz de gerenciar os dados, se faz necessário que cada informação ou instrução se encontre na área correspondente ao seu segmento. O endereço do segmento é fornecido ao montador pelos registradores DS, ES, SS e CS. Lembrando um programa no Debug, observe: 1CB0:0102 MOV AX,BX O primeiro número 1CB0, corresponde ao segmento de memória que está sendo usado, o segundo é uma referência ao endereço dentro do segmento, é um deslocamento dentro do segmento offset. O modo usado para indicar ao montador com quais segmentos vamos trabalhar é fazendo uso das diretivas .CODE, .DATA e .STACK. O montador ajusta o tamanho dos segmentos tomando como base o número de bytes que cada instrução assembly precisa, já que seria um desperdício de memória usar segmentos inteiros. Por exemplo, se um programa precisa de apenas 10Kb para armazenar dados, o segmento de dados seria apenas de 10Kb e não de 64Kb, como poderia acontecer se feito manualmente. 3.2.2.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 lê 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 e encontra-o na tabela correspondente como sendo um registrador. O processo para Var é um pouco diferenciado, o montador verifica que ela não é uma palavra reservada, então procura na tabela de símbolos, lá encontrando-a ele designa o endereço correspondente, mas se não encontrou ele a insere na tabela para que ela possa receber um endereço na segunda passagem. Ainda na primeira passagem é executado parte do processamento das diretivas, é importante notar que as diretivas não criam código objeto. Na passagem dois são montadas as instruções, traduzindo os códigos de operação e procurando os endereços, e é 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 e o token em questão são definidos quando o programa é carregado e antes de ser executado. --------------- // ---------------\n3.3.Mais programas. Outro exemplo Primeiro passo Use qualquer editor e crie o seguinte: ;exemplo2 .model small .stack .code mov ah,2h ;move o valor 2h para o registrador ah mov dl,2ah ;move o valor 2ah para o registrador dl ;(é o valor ASCII do caractere *) int 21h ;interrupção 21h mov ah,4ch ;função 4ch, sai para o sistema operacional int 21h ;interrupção 21h end ;finaliza o programa Segundo passo Salvar o arquivo com o nome: exam2.asm Não esquecer de salvar em formato ASCII. Terceiro passo Usar o programa TASM para construir o programa objeto. C:\_>tasm exam2.asm Turbo Assembler Version 2.0 Assembling file: Error messages: Warning messages: Passes: Remaining memory: exam2.asm None None 1 471k Copyright (c) 1988, 1990 Borland International\nQuarto passo Usar o programa TLINK para criar o programa executável. C:\_>tlink exam2.obj Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International C:\_> Quinto passo Executar o programa: C:\_>exam2[enter] * C:\_> Este programa imprime o caracter * na tela. --------------- // --------------3.4.Tipos de instruções. 3.4.1.Movimento de dados 3.4.2.Operações lógicas e aritméticas 3.4.3.Saltos, laços e procedimentos\n3.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 e 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 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 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.OPERAÇÕES LÓGICAS E ARITMÉTICAS usada para a comunicação e AX\nAs instruções de operações lógicas são: and, not, or e xor. Elas trabalham a nível de bits em seus operadores. Para verificar o resultado das operações usamos as instruções cmp e test. As instruções usadas para operações algébricas são: para adição add, para subtração sub, para multiplicação mul e para divisão div. Quase todas as instruções de comparação são baseadas na informação contida no registrador de 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 seqüê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. ***************************************************************************** CAPÍTULO 4: INSTRUÇÕES ASSEMBLY Conteúdo: 4.1.Instruções de operação de dados 4.2.Instruções lógicas e aritméticas 4.3.Instruções de controle de processos --------------- // --------------4.1. Instruções de operação de dados 4.1.1.Instruções de transferência 4.1.2.Instruções de carga 4.1.3.Instruções de pilha 4.1.1.Instruções de transferência. São usadas para mover o conteúdo dos operadores. Cada instrução pode ser usada com diferentes modos de endereçamento. MOV MOVS (MOVSB) (MOVSW) INSTRUÇÃO MOV Propósito: Transferência de dados entre células de memória, registradores e o acumulador. Sintaxe:\nMOV Destino, Fonte Destino é o lugar para onde o dado ser está. movido e Fonte é o lugar onde o dado\nOs diferentes movimentos de dados permitidos para esta instrução são: *Destino: *Destino: *Destino: *Destino: *Destino: *Destino: *Destino: *Destino: *Destino: Exemplo: MOV MOV MOV INT AX,0006h BX,AX AX,4C00h 21h memória. acumulador. registrador de segmento. memória/registrador. registrador. registrador. memória. registrador. memória. Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: Fonte: acumulador memória memória/registrador registrador de segmento registrador memória registrador dado imediato dado imediato\nINSTRUÇÕES MOVS (MOVSB) (MOVSW) Propósito: Mover byte ou cadeias de palavra da fonte, endereçada por SI, para o destino endereçado por DI. Sintaxe: MOVS Este comando não necessita de 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 seqüência de instruções ilustra isso: MOV SI, OFFSET VAR1 MOV DI, OFFSET VAR2 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 VAR1 é copiado para VAR2. As instruções MOVSB e MOVSW são usadas do mesmo modo que MOVS, a primeira move um byte e a segunda move uma palavra. 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.\nLODS (LODSB) (LODSW) LAHF LDS LEA LES 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 e 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 segundo uma palavra (usa todo o registrador AX).\nINSTRUÇÃ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: SF ZF ?? AF ?? PF ?? CF O "??" 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 endereç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,OFFSET VAR1 É equivalente a: LEA SI,VAR1 É muito provável que para o programador é muito mais fácil criar programas grandes usando este último formato. INSTRUÇÃO LES Propósito: Carregar o registrador de segmento extra Sintaxe: LES destino, fonte O operador fonte deve ser uma palavra dupla na memória. O conteúdo da palavra com endereço maior é interpretado como o endereço do segmento e é\ncolocado em ES. A palavra com endereço menor é o endereço do deslocamento e é colocada no registrador especificado no parâmetro de destino.\n4.1.3.Instruções de manipulação da pilha. Estas instruções permitem usar a pilha para armazenar ou recuperar dados. POP POPF PUSH PUSHF INSTRUÇÃO POP Propósito: Recuperar uma parte de informação da pilha. Sintaxe: POP destino Esta instrução transfere o último valor armazenado na pilha para o operador de destino, e 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 0 2 4 6 7 8 9 10 11 FLAG CF PF AF ZF SF TF IF DF OF\nOs 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.\nINSTRUÇÃ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. AND NEG NOT OR TEST XOR 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:\nFonte Destino | Destino ----------------------------1 1 | 1 1 0 | 0 0 1 | 0 0 0 | 0 O resultado desta operação é armazenado no operador de destino. INSTRUÇÃO NEG Propósito: Gera o complemento de 2. Sintaxe: NEG destino Esta instrução gera o complemento de 2 do operador destino e o armazena no mesmo operador. Por exemplo, if AX armazena o valor 1234H, então: NEG AX Isto fará com o que o valor EDCCH 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 ----------------------------------1 1 | 1 1 0 | 1 0 1 | 1 0 0 | 0 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.\nINSTRUÇÃ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\n4.2.2.Instruções aritméticas. São usadas para realizar operações aritméticas nos operadores. ADC ADD DIV IDIV MUL IMUL SBB SUB INSTRUÇÃO ADC Propósito: Efetuar a soma entre dois operandos com carry. Sintaxe: ADC destino, fonte Esta instrução efetua a soma entre dois operandos, mais o valor do flag CF, existente 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:\nDIV 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 acumulador AL ou AX pelo operando-fonte, devolvendo o resultado no acumulador AX caso a operação tenha envolvido AL com um operando de 8 bits, ou em DX e AX caso a operação tenha envolvido AX e um operando de 16 bits. INSTRUÇÃO IMUL Propósito: 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.\nUso: 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 e AX = número de bytes lidos. CF = 1 se há erro e 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 seqüencial num arquivo FCB. Registradores de chamada: AH = 14H DS:DX = Ponteiro para um FCB já aberto. Registradores de retorno: AL = 0 se não há erros, de outra forma o código correspondente de erro retornará: 1 erro no fim do arquivo, 2 erro na estrutura FCB e 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 seqüencial e arquivo FCB. Registradores de chamada:\nAH = 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 arquivo 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, Área 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.\nRegistradores 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 e 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 00H 02H 04H 06H Atributos Normal Hidden System Hidden e System\nO arquivo é criado com permissão de leitura e escrita. Não é possível a criação de diretórios através desta função. FUNÇÃ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 e 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\nencontrado, 03H se o caminho não foi encontrado, 04H se não ha handles disponíveis, 05H acesso negado, e 0CH 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: 7 . . . . FUNÇÃO 3EH Uso: Fecha um arquivo (handle). Registradores de chamada: AH = 3EH BX = Número do handle associado Registradores de retorno: CF = 0 se não há erros, ou CF será 1 e AX conterá o código de erro: 06H se o handle é inválido. Esta função atualiza o arquivo e libera o handle que estava usando. FUNÇÃO 3FH Uso: Ler uma quantidade específica de bytes de um arquivo aberto e armazená-los num buffer específico. --------------- // --------------5.1.4.2.Interrupção 10h Propósito: Chamar uma diversidade de funções do BIOS Sintaxe: Int 10H Esta interrupção tem várias funções, todas para entrada e saída de vídeo. Para 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 Função Função Função 02H, 09H, 0AH, 0EH, seleciona a posição do cursor exibe um caracter e o atributo na posição do cursor exibe um caracter na posição do cursor modo alfanuméri\nTutorial em Portugues da linguagem de programaçao assembly\n12 - Advanced Mechanisms\nTutorial do ProEngineer Wildfire 2 da PTC\n07 - Assembly\nT u t o r i a l d e l i n g u a g e m a s s e m b l y\nEste tutorial tem o intuito de apenas introduzir o leitor ao mundo da programacao em Linguagem...\nTutorial - Catia-Assembly\nsoftware free, limitado, para desenho de circuito impresso


BICHO BRAVO: Março 2008\nHá coisas que irritam! Há séculos que todos sabemos que a indisciplina nas escolas é uma realidade preocupante e plurifacetada. Sabem-no não só os professores que são alvo da mesma, como também os funcionários, que tantas vezes são tratados com desrespeito e sobranceria. Sabem-no aqueles pais que se esmifram mais a defender as crias do que a atacar quem quer que seja, e que são a maioria, como também o sabem os alunos que são ameaçados com punhos ou armas brancas e assaltados pelos seus próprios colegas, por exemplo. Esta prática, que há alguns anos atrás seria impensável, passou a fazer parte do quotidiano de quase todas as escolas e, contra o que se possa pensar, é exercida por alunos de todas as proveniências e estratos sociais. Por isso é que me parece muito leviano e perigoso fazer generalizações!\nNo entanto para a comunicação social, cuja indisciplina também deveria ser alvo de discussão e de sanções, tudo isto parece ser uma grande novidade. Enoja-me o tom sensacionalista de "Mais um caso dramático", "Mais um testemunho pungente" ou "Mais uma história de arrepiar". Se não se confere ao assunto a seriedade que ele merece, que raio de exemplo se está a passar àqueles alunos que por natureza não respeitam nada nem ninguém? Também me envergonha que haja indivíduos da classe docente que venham à televisão contar historinhas foleiras e auto-vitimizantes de meninos que os insultam e lhes riscam o carro e se masturbam nas aulas. Uma coisa é estar impotente para exercer a autoridade e castigar de forma adequada os prevaricadores, outra coisa é não ter autoridade nem dignidade para se fazer respeitar. Há problemas sérios, tem que se rever o estatuto do aluno, não pode ser retirada a capacidade de intervenção disciplinar aos professores e às escolas. Porém não me parece que a melhor forma de resolver estes problemas seja a instauração deste circo mediático e decadente. Tudo isto é incongruente e triste! No fundo trata-se apenas de mais do mesmo: um filão a explorar pelos diferentes órgãos de comunicação social na mira do lucro fácil que advém do sensacionalismo de pacotilha que eles próprios promovem em torno de questões sérias e relevantes.\nOlhe-se para a imagem acima e veja-se como as agressões a professores se aliam às banhas de um Jardim a banhos ou aos desvarios do garanhão tuga do momento. Que asco! E ainda li há pouco no blogue de um professor, que curiosamente pretende processar figuras públicas por difamação da imagem da classe, que foi a correr comprar um exemplar desta publicação pasquinzenta, congratulando-se por ver expostos de forma tão abjecta os podres da sua classe...\nQuando é que os jornalistas vão dar voz aos que têm capacidades e bom-senso, para não chegar ao ponto de dizer vergonha na cara e sentido do ridículo? Por que razão, e particularmente em depoimentos televisivos, levamos sempre com os que não sabem falar, não têm dentes ou não têm cérebro? Dizem os entendidos que é isto que vende e que é isto que nós queremos. Irra! A mim nunca ninguém me perguntou nada! O que é certo é que começo a confundir dois vocábulos: Portugal e Circo Chen. Até a mediocridade dos programas de televisão portugueses conduz a esta legítima confusão: sopeiras, bichas histéricas, astrólogas, pseudo-vips, ex- Big Brothers, ex-misses, ex-pessoas dotadas de cérebro e não sei que mais população escolhida a dedo, a cortar nas casascas alheias com total despudor, a falar de trivialidades e mexericos e desgraças, a encher a cabeça do povo que consegue digerir tais bostas gigantescas com mais bostas gigantescas.\nAs escolas portuguesas são o reflexo da nação. Se fazem parte de um país que está podre, de onde vem tanto espanto?!\nPublicada por Kika à(s) 12:39 Sem comentários:\nQuem puxará a carroça?\n"(...) Ninguém duvida de que o PSD tenha um plano para salvar Portugal, mesmo que aparentemente não tenha um plano para se salvar. Toda a gente percebe que o PSD é mais difícil de governar do que o país. No PSD, que é um partido que se caracteriza por não ter ideologia nenhuma, a harmonia é rara e difícil. Veja-se o que acontece agora: o António Capucho não concorda com o Luís Filipe Menezes; o Luís Filipe Menezes não concorda com o Rui Rio; o Rui Rio não concorda com o Pacheco Pereira e o Pacheco Pereira não concorda com ninguém. O caso complica-se quando constatamos que o Luís Filipe Menezes, na ânsia de agradar a toda a gente, diz com frequência uma coisa e o seu exacto inverso, o que faz com que, muitas vezes, o presidente do PSD nem consigo mesmo concorde. E o trágico é que há quem diga que esta é a sua melhor qualidade. Faz sentido: Luís Filipe Menezes não é uma alternativa a José Sócrates. É várias. Menezes tem opiniões para todos os gostos. Há propostas capazes de agradar a todos os sectores da sociedade portuguesa, e ainda a alguns sectores de certas sociedades estrangeiras. As únicas pessoas a quem Menezes não consegue agradar, por mais que tente, são os militantes do PSD. (...)"\nExcerto do artigo da rubrica Boca do Inferno de Ricardo Araújo Pereira, publicado na Visão de 13 de Março\nQuando pararemos de pensar em alternativas? Quando teremos bons governantes e uma oposição condigna? Quando viveremos num clima de estabilidade, confiança e prosperidade? Quem estará à altura de tomar as rédeas? Volta Sebastião! Estás perdoado!\nPublicada por Kika à(s) 00:43 2 comentários:\nTempo híbrido e cinzentaço aqui a norte. Convida à introspecção e ao encasulamento. O mar está bravo e a humidade cobre tudo com uma película molhada e brilhante, que é depois lavada pela chuva tímida que a tempos escorre do céu.\nFoi dia mundial do teatro (quando é que não há um dia mundial de qualquer coisa?) neste nosso país tão avesso às artes do palco. Lembrei-me das pessoas que ainda sobrevivem no Parque Mayer, agarradas às memórias gloriosas de um passado que não retornará, e só desejo que não sejam despojadas do pouco que lhes resta na recta final das suas vidas.\nDeixo entretanto a minha homenagem a todos os actores que colocam o seu amor ao teatro acima das suas necessidades materiais e do seu desejo de protagonismo, esperando por subsídios estatais quiméricos e representando com todo o empenho em salas de espectáculo desertificadas. O que está morto decompõe-se, o que está vivo transforma-se! Bem-hajam!\nPublicada por Kika à(s) 23:41 Sem comentários:\nTorre de Babel ou caixa de Pandora?\nA partir de 2008 deverá entrar em vigor a reforma ortográfica que torna a língua portuguesa um idioma único em todo o mundo. No entanto, as alterações afectam apenas 2% do português falado no Brasil. Em Portugal, contudo, as coisas já se processam de forma distinta.\nVamos então tentar ter uma ideia das mudanças que ocorrerão no português de Portugal. O hífen não se usará mais. Assim, quando o segundo elemento começar com s ou com r, em vez do hífen essas letras serão duplicadas. Exemplos: palavras como anti-semita ou contra-regra passarão a redigir-se antissemita e contrarregra. Abre-se uma excepção para as palavras em que os primeiros elementos terminam com r, mantendo essas a sua grafia usual: hiper-requintado. Do mesmo modo, quando o primeiro elemento termina em vogal e o segundo começa com vogal diferente o hífen cai. Exemplos: auto-avaliação fica autoavaliação; extra-escolar passa a extraescolar.\nJá formas verbais como vêem, dêem e lêem deixam de ter acento circunflexo, passando a redigir-se veem, deem e leem.\nOs i e u tónicos quando precedidos de ditongo deixam de levar acento agudo. Assim viúva fica viuva.\nO alfabeto passa a conter as letras k, w e y.\nOs c e p mudos caem. Por exemplo: acção passa a ação, acto a ato e adopção a adoção.\nO h mudo também cai. Deste modo húmido passa a úmido, por exemplo.\nLamento, mas não me agrada nada a ideia, em particular nos casos em que as palavras se confundem: Eu ato o sapato e é um ato difícil. Bizarro! Já a humidade sem h deixa-me seca e não me apetece passar à ação, de escrever, oviamente! (terá a ver com o ovo?) Averá a queda deste h? Que medo! E como os ditongos sem acento passam a ler-se como ditongos, isso significa que a palavra viúva passa a ler-se viu/va e o miúdo é um miu/do. Que orror!!! Vai ser uma autoflagelação mutilar tão ativamente as palavras!\nE que grande miscelânea vai ser a escrita portuguesa em terras lusas se este acordo for aprovado! Não sei se haverá uniformização, pois com a tendência incrível que os portugueses têm para dar erros ortográficos agora é que vamos ter várias línguas portuguesas dentro de Portugal.\nEnfim, não me parece correcto que este acordo passe exclusivamente pela Assembleia, em especial em tempos de maioria parlamentar, e pelo Presidente da República. Creio que esta é matéria adequada à realização de um Referendo Nacional. Afinal a nossa língua por alguma razão se chama nossa (possessivo, indica posse, ou será que também vamos mudar a gramática?) e temos que a sentir como tal. Respeito as opiniões dissonantes, mas gostava que todos fôssemos ouvidos. Bom, fôssemos sem acento passa a ser uma forma do verbo fossar (escavar com o focinho). Será que este circunflexo também cai? Se assim for, eis uma palavra a evitar!\nNão sei o que pensa de tudo isto o povo brasileiro, mas acredito que se sinta igualmente incomodado. Ainda assim as alterações são mais flagrantes por aqui. E mesmo lendo regularmente autores brasileiros e gostando muito de Jorge Amado, de Carlos Drummond de Andrade e de Vinicius de Moraes, a verdade é que todas as obras que li estavam traduzidas em português de Portugal, pois só assim consigo retirar genuíno prazer da leitura. Não se trata de ter nada contra (até gosto imenso da sonoridade que é mais doce e melodiosa do que a nossa) mas sim de ter tudo a favor da minha língua tal como ela é. É difícil tentar impor mudanças quando nos sentimos felizes com aquilo que se quer mudar. Mudem os políticos, mudem a falta de incentivos à cultura, mudem o clima de insegurança que se tem avolumado, mudem o que está mal. E mudem a m... da prepotência com que tentam governar este país pois não há cu que aguente!\n(Brueghel, Torre de Babel)\nPublicada por Kika à(s) 23:09 2 comentários:\nOntem foi colocado na Internet um vídeo sob o título "9º C em grande!". Foi posteriormente retirado, mas horas depois voltou a estar disponível, desta vez sob o título "Numa escola portuguesa - Vergonha". Infelizmente já foi novamente retirado há pouco mais de meia hora atrás. No entanto ainda pode ser visto no Público on line, onde igualmente se encontra uma colectânea dos melhores vídeos de 2007 por onde vale a pena passar os olhos. Trata-se então da filmagem feita por um aluno em sala de aula enquanto a sua colega se recusa a devolver o telemóvel que a professora de Francês lhe confiscara, gritando "Dá-me o telemóvel já!" e puxando pela docente. A dada altura esta não tombou no chão por pouco, ouvindo-se um "Olha que a velha vai cair!". Aluna e professora disputaram durante alguns minutos o dito telemóvel, até que houve alunos que tentaram pôr fim à contenda enquanto se ouviam as gargalhadas da turma em reboliço e alguém comentava "Isto é demais, ouve lá!".\nEste que aqui se encontra já tem um ano e intitula-se "Ministra da Educação - A vergonha".\nOra talvez haja mais em comum entre estes dois vídeos do que uma mera semelhança de títulos. Afinal temos duas personagens do sexo feminino a revelarem a sua falta de educação e a merecerem a vergonha daqueles que os visualizam. No entanto, e tendo em conta que o exemplo vem de cima, o procedimento da Sra. Ministra para com os jovens presentes que a vaiavam tende a deixar-nos mais perplexos, pois presenteou-os com uma atitude inqualificavelmente absurda, patética e em tudo similar àquela que por eles estava a ser adoptada. E utilizou (pasme-se!) a tão característica prepotência a que já nos habituou: "Seguramente que gritarei mais alto!" Ilação a retirar: quando alguém se portar mal paguemos-lhe da mesma moeda e comportemo-nos ainda pior. Peculiar conceito de educação este da Sra. Ministra da Educação! Nem quero imaginar o que seria se os alunos presentes, ao invés de lhe darem uma vaia, lhe tivessem mostrado o traseiro!\nAinda assim o que mais me espanta é que nem uma só vez este famigerado vídeo, que há um ano se encontra a circular na Internet e que todos enviámos por mail aos amigos, tenha vindo a lume na comunicação social. Nem uma só vez a Sra. Ministra foi interpelada relativamente a este procedimento que, convenhamos, nada tem de usual ou de abonatório. É por estas e por outras que estou cada vez mais convicta de que os órgãos de comunicação social, e em espacial a televisão, se encontram fortemente manipulados. Talvez a questão da desinformação seja, de facto, mais pertinente do que nunca.\nA parte mais caricata, ainda assim, é que esta mesma senhora, que não consegue permanecer indiferente aos protestos de alguns jovens com quem pontualmente se cruza, continue a retirar aos professores a autoridade dentro das salas de aula e permaneça surda às estatísticas que revelam a ocorrência de uma situação de violência diária contra os professores deste país. E estas estatísticas reportam-se apenas a situações de agressão mais incisiva que levam os docentes a apresentar queixa na polícia, pois casos como o da jovem que protagoniza esta tragicomédia ocorrem frequentemente e não chegam sequer ao conhecimento das autoridades. Resta até saber se a retirada do vídeo da Internet não é obra de quem nega sistematicamente a existência de violência nas escolas portuguesas.\nO que acontecerá então à dita jovem de acordo com a legislação em vigor? Pois tendo em conta que certamente terá a seu favor o representante da Associação de Pais (um benemérito que não usufrui de incentivos estatais como os seus correlegionários da Confap!), será fervorosamente defendida com alegações de que se encontra perturbada, de que o seu contexto familiar não lhe faculta o equilíbrio desejável, de que deve ter acompanhamento psicológico e que em nada beneficiará com a exclusão do seu estabelecimento de ensino, e blá blá blá... A aluna terá, na pior das hipóteses a segunda pena máxima: dez dias de férias em casa, os quais não podem sequer ser contabilizados para a sua reprovação por faltas. E mesmo que pudessem, se a aluna não tiver feito quinze anos até trinta de Setembro do ano passado a sua assiduidade é um mero dado estatístico. Já os seus colegas, que se comportaram igualmente mal e a apoiaram, que deliraram com a cena e brindaram a professora com o epíteto de velha extasiados com a hipótese da sua queda, esses terão uma repreensão colectiva que ficará registada em cadastros que ninguém lerá. E abonam a favor dos envolvidos as imagens que provam que nenhum deles tem tatuagens nem piercings! Bons tempos, não tão longínquos, em que existia trabalho cívico nas escolas e eles iriam para a cozinha descascar batatas ou para as casas de banho limpar sanitas, com a "velha" a mimoseá-los com os seus piropos! Por acaso essa foi a sugestão de alguns dos jovens que se manifestaram no YouTube cujos comentários porém já não podem ser lidos. Mas não, que disparate! Estamos num país de brandos costumes e um dia destes nem os indivíduos que cumprem o serviço militar obrigatório terão que realizar tão humilhantes tarefas. Passarão a comer puré de batata instantâneo e terão aquelas casas de banho portáteis que se auto-higienizam, mas sem moeda!\nOs adolescentes e os jovens estão a formar o seu carácter e precisam de ser aconselhados, orientados e educados. Tendo uma personalidade própria e características geracionais comuns, ele são também o reflexo da sociedade em que se encontram inseridos e o produto da formação que recebem e da informação que absorvem. Assim sendo, não é sobre eles que recai a maior quota parte de responsabilidade e de vergonha. Essa fica para os cidadãos que não possuem ética nem civismo, para os educadores que não têm autoridade nem sabem educar, para todos portugueses que compactuam bovinamente com um sistema em deterioração aos mais diversos níveis. Este é o estado da nação e a nação somos todos nós!\nPublicada por Kika à(s) 20:59 4 comentários:\nNuma época em que a memória colectiva é tão curta, é bom relembrar que foram cem mil os que se manifestaram contra o actual estado do ensino em Portugal, secundados por centenas de transeuntes solidários. Foi um dia histórico! Esperemos que não seja irrepetível e que todos os que legitimamente querem expressar o seu descontentamento o façam civicamente e sem medo de retaliações.\nPublicada por Kika à(s) 00:18 Sem comentários:\nEstávamos convictos de que a maior preocupação e o alvo favorito do actual Governo eram os professores, que até já foram apelidados de hooligans por um senhor a quem convinha fazer uma operação plástica ao cérebro mais bem sucedida do que aquela com que desfigurou a cara, para quem não o ouviu nem se apecebeu da grotesca máscara, Emídio Rangel. À frente. Cem mil docentes saíram à rua na maior manifestação de sempre de uma classe profissional na Península Ibérica para exprimir de forma pacífica, e sobretudo cívica, o seu descontentamento. No entanto os olhos de cada um vêem o que cada um quer e daí retiram as ilações que bem entendem. Adiante! Na realidade, e voltando ao início, o certo é que o executivo PS encontrou novos focos de interesse em que concentrar as suas energias. Muitos coelhos saem da cartola dos governantes socialistas e eis senão quando, manobra de diversão inusitada, somos brindados com a proposta de um projecto lei que visa proibir a colocação de piercings na língua e nos genitais, bem como impedir a aplicação de piercings, tatuagens e de maquilhagem permanente a menores de 18 anos. Questão que se impõe: atravessamos uma época tão áurea que permita o luxo de ter ocupados os fracos cérebros e o escasso tempo dos líderes da nação com este assunto? Outras questões que igualmente se impõem: não há práticas legais mais nefastas para a saúde dos cidadãos em geral do que aquelas que esta lei visa impedir? Não é mais grave a mania de borrar as paredes com pseudo-graffitis que originam uma imensa poluição visual e desfeiam a paisagem urbana do que desenhar no corpo aquilo que bem se entender? Não há questões muito mais prementes no leque das preocupações comezinhas, como por exemplo o incremento da violência, a exigir a atenção da Assembleia? Isto é, no mínimo, Felliniano! E já agora, não resisto a comentá-lo, esta medida é mais um passo na esteira da desresponsabilização de muitos pais de adolescentes e jovens portugueses, que por este andar têm os seus filhos educados pelo Estado e pelos professores (para quando a escola nas férias caramba?!) e já não precisam de os mandar constantemente para o quarto jogar Playstation (cheia de heróis mauzões e tatuados) ou navegar na Internet (onde eles se inspiram para estas práticas tão fixes) ou ver o Miami Ink na televisão (eu vejo e gosto!).\nNo entanto o aspecto mais grave de toda esta polemicazita, a meu ver, é o atentado à liberdade individual do cidadão que semelhante medida acarreta. Quando um indivíduo perde os direitos sobre o seu próprio corpo é caso para ter medo! Que pretenderá impor-nos o Governo nos próximos tempos? A abolição do uso de lingerie ousada e a comercialização exclusiva de cuecas de gola alta e soutiens reforçados? A proibição de qualquer intercâmbio sexual que não ocorra na posição de missionário e que não tenha fins procriatórios? A obrigação de tomar banho duas vezes ao dia mas nunca de banheira cheia e com espuma para poupar água e evitar fantasias de índole perniciosa? A proibição de usar sapatos de tacão alto fora de casa para preservar a coluna e relegar a atenção que se concentra nas pernas femininas para um plano mais superior, a saber os olhos ou o cabelo, se bem que este último também nunca possa ser pintado de cores berrantes e improváveis, assim como as unhas e as pálpebras que devem aliás manter a sua coloração original para evitar os químicos que se entranham no organismo?! Se alguém precisar de ideias desta índole ou ainda mais à frente conte comigo! Tenho um manancial inesgotável e igualmente castrador de atentados aos direitos e liberdades individuais do ser humano.\nO Salazar, sob a alçada de quem nunca vivi, era para mim um mito controverso e, sobretudo, o sinónimo da força de um povo que se conseguiu libertar, ainda que tardiamente, das garras da ditadura. Hoje, numa época em que todos os rótulos mentem ou teimam em colorir a verdade, temos políticos que não se assumem, que se escondem por trás de ideologias partidárias e de definições arrevesadas, gente que perdeu a hombridade, homens que usam falsas promessas para chegar ao poder, lobos travestidos de cordeiros, Salazares de meia pataca. É sabido que as rosas têm espinhos. Só não era suposto que eles nos picassem com tanto afinco e desfaçatez!\nPublicada por Kika à(s) 18:19 3 comentários:\nEtiquetas: politicando, serrote\nOntem foi colocado na Internet um vídeo sob o tí...


Sportbuzz · Ex-Athletico, atacante Morro García é encontrado morto na Argentina\nEx-Athletico, atacante Morro García é encontrado morto na Argentina\nUruguaio cumpria isolamento desde 22 de janeiro, depois de testar positivo para Covid-19\nRedação Publicado em 06/02/2021, às 14h18 - Atualizado às 14h19\nEx-Athletico, atacante Morro García é encontrado morto na Argentina - GettyImages\nO atacante uruguaio Santiago García, conhecido como Morro García, de 30 anos, foi encontrado morto na manhã deste sábado, 06, em Mendoza, na Argentina.\nO jogador do Godoy Cruz teve uma breve passagem pelo Athletico-PR. Morro García chegou a ser a contratação mais cara do time brasileiro, que desembolsou R$ 7 milhões ao Nacional, do Uruguai.\nDe acordo com informações da imprensa argentina, García passava por tratamento psiquiátrico e estava com depressão. A polícia local trata o caso inicialmente como suicídio.\nAo jornal “El Sol”, o Godoy Cruz confirmou a morte e reiterou para que todos “tratem a notícia com o respeito que se merece”. O clube afirmou que todos “se sentem afligidos” neste momento.\nNo Godoy desde 2016, García estava afastado do elenco e fora dos planos do time. Ele é o maior artilheiro da equipe no Campeonato Argentino, com 50 gol em 118 jogos, e segundo na lista histórica do time. Ele havia testado positivo para a Covid-19 em 22 de janeiro e cumpria isolamento desde então.\n“O Athletico Paranaense presta condolências a todos os amigos e familiares de Morro García. Desejamos forças neste momento difícil”, escreveu o Athletico-PR em uma rede social.\nCaso você esteja passando por problemas e pensando em cometer suicídio, procure ajuda especializada como o CVV e os Centros de Atenção Psicossocial (CAPS) de sua região. O CVV funciona 24 horas por dia, inclusive aos feriados, pelo telefone 188 e também pelo e-mail, chat e pessoalmente. São mais de 120 postos de atendimento em todo o Brasil.\nAthletico-PR x Internacional: saiba onde assistir e as prováveis escalações


Serviço de Pintura e Funilaria Automotiva Onde Encontrar na Chácara do Castelo - Empresa de Funilaria - Nildcar\nServiço de pintura e funilaria automotiva onde encontrar na Chácara do Castelo\nSe procura por Serviço de pintura e funilaria automotiva onde encontrar na Chácara do Castelo com profissionais qualificados no segmento, entre em contato com a Nildcar, oferecemos serviços de alto padrão!\nCaso esteja buscando por Serviço de pintura e funilaria automotiva onde encontrar na Chácara do Castelo, A Nildcar proporciona todos os seus serviços com eficiência e seriedade, através de profissionais especializados e qualificados. Nossos profissionais trabalham com o objetivo de oferecer os melhores serviços do ramo, entre em contato.\nO conteúdo do texto "Serviço de Pintura e Funilaria Automotiva Onde Encontrar na Chácara do Castelo" é de direito reservado. Sua reprodução, parcial ou total, mesmo citando nossos links, é proibida sem a autorização do autor. Crime de violação de direito autoral – artigo 184 do Código Penal – Lei 9610/98 - Lei de direitos autorais.


Comprar Metaxalone em Farmacia Online | Venda de Generico do Metaxalone Barato Preço\nComprar metaxalone 400mg em Farmacia Online\nComo faço para usar metaxalone?\nPare de tomar glucosamina aquando da presença de sinais de overdose, metaxalone 400mg. Palavras-chave: Enzimas proteolíticas, bromelina, purificação. A finalidade destes medicamentos é dissolver qualquer trombo, que possa ter sido, qual o melhor albuterol comprar. Informações, sintomas e tratamentos da Hiperplasia Prostática Benigna, que é uma condição bastante comum que afeta muitos homens a partir de 50 anos de. Descritores: Cardiomiopatia dilatada, Coração, Ressonância magnética, qual o melhor metaxalone curitiba. Marque uma consulta em Centro Estomatológico Da Praia de Mira. Pode parecer menos opaca se a concentração seminal for, metaxalone mr tablets. Infecção fúngica superficial do estrato córneo, decorrente de leveduras dimórficas do gênero Malassezia, que conduz a lesões maculares. A maioria dos casos de dor, barato metaxalone campinas. Nolvadex, Tamoxifen, Womans Health - where to buy nolvadex.\nMetaxalone: Use e visor\nFratura pyatochnoj ossos acontece relativamente raro e aplica-se a complexa, 400mg. Entretanto, usar repelentes quando estiver em região com casos de. Trabalhadores expostos a substancias ototóxicas podem desenvolver, venda metaxalone comprimido. Verificada pela correção de posicionamentos incômodos ou anormais em que se coloca o animal que deve. No cabe duda de que los problemas encontrados se hubiesen planteado con mucha más agudeza en ausencia del marco financiero instaurado en 1988, que, preço da metaxalone. A aspiração de secreção endotraqueal é um procedimento que expõe o paciente a uma série de complicações, o que justifica uma criteriosa avaliação da sua. Borges, que propõe um método cíclico de avaliação, onde professores e alunos são avaliados continuamente, farmácia atomoxetine do rio de janeiro. É o órgão de digestão e absorção e termina o que a boca e o estômago. Dependendo do grau de ptose palpebral, o paciente pode apresentar comprometimento do campo visual, metaxalone mais barato no brasil. Resposta impulsional e resposta em frequência.\nOnde você pode comprar metaxalone?\nEstão presentes taquipnéia e dispnéia, mas não pleurisia, Metaxalone 400mg. Bactérias aderidas a células intestinais Interação Helicobacter- célula durante. Toxinas obtidas em culturas de bactérias, submetidas a modificações, barato cefpodoxime rio. Segundo pesquisas, 70 por cento das pessoas brancas são deficientes. Entre o trato portal e a veia centro lobular estão as células do parênquima, substituto do farganesse curitiba. O terceiro que ele considera como uma meta para a qual ele deve aspirar incessantemente. Ele é eficaz em combater os sintomas do período menstrual e estimula a, inflanefran comprar farmacia preço. Febre - O que é, convulsões febris, tratamento. Com legendas Inglês, Alemão e Latim, compra de metaxalone a venda. Quando a queda da pálpebra é acentuada, parte da.\nNo final do experimento, realizou-se coleta de sangue para dosagens das, metaxalone . Por exemplo: se o lucro fosse igual a 6 e os salários a 2, estes poderiam. Em 1921, Adolpho Lutz escreveu um relato das doenças da pele observadas por ele durante 40, genericos de metaxalone a venda. Sintomatologia local: prostatalgia, alteração de forma, tamanho e. Vigilância epi de miológica do vírus da doença de Newcastle em aves, comprimido metaxalone original. Porém a hepatite A pode não apresentar sintomas, ou ter sinais muito. Os músculos intercostais unem as costelas entre si, são 3 músculos intercostais que são músculos acessórios da respiração, metaxalone comprimido barato. O atendimento que a escola oferece não é para tratamento. As pessoas com diabetes tipo 2, após o diagnóstico, são avaliadas uma vez por ano, para identificação de eventual nefropatia diabética, através, similar do metaxalone fortaleza. Cães acometidos por esta diátese hemorrágica hereditária podem ser assintomáticos, ou apresentar sinais clínicos de um problema hemostático primário.\nQual é o melhor metaxalone Online Pharmacy genérico?\nConceito e Significado de Dependência química: É uma condição física e, 400mg metaxalone. No Estado, conforme dados do Instituto Brasileiro de Geografia e. As doenças respiratórias em cães e gatos tem caráter etiológico muito, metaxalone farmácia. Do ponto de vista anatômico, os músculos voluntários se compõem de. Quanto mais baixa a temperatura, menor a possibilidade de deterioração do produto, procardia compra e venda. Analisando na bíblia o sentido da palavra no capitulo primeiro de Gênesis. Qualquer construção, por mais simples que seja, pilulas metaxalone menor. Os sintomas são similares aos causados pela falta de ferro, e a análise de tecidos. É um ritmo respiratório lento, ou seja, a lentidão, generico metaxalone brasil preços. Kit contendo 01 Suplemento Capilar e 01 Colágeno Hidrolisado.\nVocê pode comprar Metaxalone 400mg em uma dessas cidades:


Curso de Controlo de Gestão em Odivelas - Lisboa\nContabilidade Empresarial > Controle de gestão\nCursos - Curso de Controlo de Gestão - Odivelas - Lisboa\nDescrição de Curso de Controlo de Gestão\nCurso online de Controlo de Gestão.\nEsta formação tem como objetivo dotar os formandos de conhecimentos sobre sistemas de controlo de gestão.\nA gestão estratégica das organizações envolve a definição de objetivos que importa garantir que são efetivamente alcançados. O controlo de gestão tem como função essencial a comparação entre a performance desejada para a empresa e aquela que efetivamente se alcança, bem como, a tomada de ações corretivas no caso de registarem desvios.\nÉ neste contexto que esta formação se afigura como uma matéria essencial em termos de gestão organizacional.\n– Compreender a definição e a importância destes sistemas;\n– Elencar os princípios básicos;\n– Identificar as fases do processo;\n– Conhecer os vários tipos destes sistemas;\n– Estabelecer uma relação comparativa entres estes dois métodos.


A iniciativa vai garantir capacitação a 20 profissionais recém-formados na área de Ciências Agrárias\n07/04/2021 18h06 - Atualizada em 07/04/2021 23h50\nOs residentes conhecerão no campo a realidade da agricultura familiar no território paraenseTreinamento avançado para especializar um profissional não é exclusividade da área de saúde. Um exemplo é a recente parceria entre a Empresa de Assistência Técnica e Extensão Rural do Estado do Pará (Emater) e a Universidade Federal Rural da Amazônia (Ufra), que vai garantir a capacitação de 20 profissionais recém-formados em graduações na área de Ciências Agrárias como residentes agrícolas.\nOs selecionados integram o Programa de Residência Profissional Agrícola do Ministério da Agricultura, Pecuária e Abastecimento (Mapa), que no Pará tem a primeira experiência implantada pelo Instituto de Ciências Agrárias da Ufra, executada com o apoio do órgão de assistência técnica.\nAlém de profissionais de Engenharia Agrônoma, a Residência Profissional Agrícola da Ufra também abrange as áreas de Engenharia Florestal, Zootecnia e Engenharia de Pesca. A presidente Cleide Amorim garantiu que a Emater está preparada para receber os residentes\nExperiência de campo - “A Emater já está preparada para receber os residentes que serão capacitados nas comunidades com todo o apoio dos técnicos dos escritórios locais da empresa, o que vai ser de grande relevância na formação desses novos profissionais, que terão toda uma experiência de campo dentro da realidade da agricultura familiar do Estado”, ressalta a presidente da Emater, Cleide Amorim.\nO primeiro módulo da residência será cursado no escritório local da Emater, e dois módulos já estão programados para propriedades rurais em vários municípios e na Unidade Didática de Bragança (UDB), na região Nordeste.\nDe acordo com a coordenadora da residência, Antônia Bronze, o projeto visa à capacitação dos profissionais da área de Ciências Agrárias, a partir de atividades na agricultura familiar para o desenvolvimento de tecnologias integradas e práticas sustentáveis no uso dos recursos naturais, além de contribuir para a melhoria da qualidade de vida do homem no campo.\n“O residente vai estar dentro da comunidade, interagindo com o produtor rural e com a equipe técnica da Emater, promovendo uma troca de aprendizado, o que é importante para os residentes, para a Ufra e para a Emater. Queremos levar uma visão empreendedora dos produtores das unidades residentes, a fim de que estas aumentem a produtividade, geração de emprego e oferta de produtos agrícolas nos centros urbanos, dando contribuição à segurança alimentar da população”, explicou a coordenadora. O aprendizado será fundamental na formação profissional dos selecionados\nExpectativa - Recém-formada, a engenheira agrônoma Jaqueline Silva integra a primeira turma de 10 residentes, que já iniciou a capacitação nos próximos dias. “Eu estou muito grata pela oportunidade de participar dessa residência muito almejada por todos, e espero superar meus limites. Minhas expectativas para esse ano é me capacitar profissionalmente, adquirir habilidade e conhecimento através das diversas atividades práticas, do convívio com os produtores rurais e técnicos da Emater. Que seja uma experiência inesquecível!”, disse a residente.\nDentro das etapas de capacitação, os residentes atuarão em Unidades de Produção Familiar e Associações em oito municípios paraenses (Belém, Ananindeua, Marituba, Benevides, Santa Bárbara do Pará, Santa Izabel do Pará, Santo Antônio do Tauá e Castanhal). Está prevista também uma etapa na Unidade Didática de Bragança (UDB), que há mais de 50 anos é um espaço de referência para treinamentos e capacitações em Assistência Técnica e Extensão Rural (Ater). A UDB é referência para encontros, cursos, intercâmbios e outras atividades\nEstrutura de conhecimento - A Unidade Didática de Bragança tem uma área de 100 hectares, utilizada para a promoção de encontros, reuniões, cursos, oficinas, intercâmbios, excursões e outras atividades, além de um auditório com capacidade para até 60 participantes por evento e estrutura para acomodação. A Unidade apoia instituições educacionais dos mais diversos níveis na área de Ciências Agrárias, e reúne dados meteorológicos coletados desde 1977.\nReferência também no apoio a agricultores locais, a UDB dispõe de um Laboratório de Solos e uma agroindústria de leite e frutas. O Laboratório de Solos analisa a fertilidade, determina o pH e faz exames de nutrientes, fatores essenciais que beneficiam diretamente agricultores empenhados em melhorar a produção.\nAGROPECUÁRIA 29/03 16h42\nAdepará fiscaliza e preserva qualidade fitossanitária de produtos animais e vegetais\nSOJA 29/03 10h50\nPará está entre os 10 maiores exportadores de grãos do País\nLÍDER 26/03 11h24\nPRODUTO TRADICIONAL 25/03 18h27\nAdepará participa do processo de Indicação Geográfica ao queijo do Marajó


Adesivo de Parede Mandalas Para Decoração da Sala de Estar\nA sala de estar vai ficar um espaço exotérico com a decoração feita com esse adesivo de parede. As mandalas possui representação diferentes para várias culturas. Mas em todas elas está ligada as boas energias. É uma sugestão magnífica para a sala de estar pois produz um ambiente agradável que inspira equilíbrio e paz.\nPequeno (134cm x 55cm)\nMédio (183cm x 75cm) +R$23,10\nGrande (219cm x 90cm) +R$62,30\nContém: 01 Mandala (55cm de altura) e 02 Mandalas (medindo 25 e 29cm de altura).\nContém: 01 Mandala (75cm de altura) e 02 Mandalas (medindo 35 e 40cm de altura).\nContém: 01 Mandala (90cm de altura) e 02 Mandalas (medindo 40 e 48cm de altura).


I.E.I MORADA DA ALEGRIA: BRINCANDO E APRENDENDO\nEnsino aprendizagem não requer apenas um olhar atencioso, cheio de cuidados, ambientes saudáveis e ricos em conteúdos, administrado por profissionais responsáveis e afetuosos. Com estes critérios desenvolvem-se crianças socialmente mais independentes, confiantes em si, com adaptabilidade e rendimento intelectual progressivo. Tendo bom desenvolvimento em atividades de percepção visual, percepção visio motora , coordenação motora, percepção auditiva e tátil, além da linguagem oral . Para isto se faz necessário também o empenho de brincadeiras mediadas, visando sempre o aprendizado.\n“MORADA DA ALEGRIA” recebe e cultiva as crianças assim, conduzidas por olhares investigativos e acolhedores.\nPostado por Fabiano às 19:39


MetroComm passa a distribuir dispositivos para o Vivo Zap - Converge Comunicações | TI INSIDE Online\nMetroComm passa a distribuir dispositivos para o Vivo Zap\nPostado em: 22/02/2007, às 22:11 por Redação\nA MetroComm, distribuidora de produtos de informática e soluções tecnológicas especializadas, firmou parceria com a Vivo Empresas, divisão da operadora de telefonia móvel responsável por fornecer sistemas de comunicação para o mercado corporativo. A partir deste mês, a distribuidora inicia a comercialização de cartões PCMCIA e pen drives USB 3G, que permitem a utilização do Vivo Zap, um serviço de acesso à internet móvel em banda larga oferecido pela operadora.\nO serviço Vivo Zap foi criado com objetivo de proporcionar aos clientes da operadora o aumento da eficiência dos colaboradores e automatizar a força de vendas. Com ele, os usuários podem acessar a internet em banda larga de qualquer lugar que houver cobertura digital CDMA Vivo, sem a necessidade de estar conectados a uma rede fixa.\nA operação pode ser realizada por meio de um laptop compatível com cartão PCMCIA, celular compatível com Vivo Zap ou com conexão por uma porta USB, que torna o produto aceito em qualquer modelo de notebook. Para isso, basta adquirir o cartão ou um pen drive e acoplar ao laptop. A versão com porta USB suporta conexão em 1xRTT e EVDO, além ser compatível com Windows 2000 ou superior.\nSegundo o diretor da MetroComm, Ayrton do Valle, a Vivo escolheu a empresa por sua carteira com mais de 25 mil clientes. ?A partir deste mês, passamos a comercializar dois modelos desses cartões, a PCMCIA Kyocera KPC 650 e a PCMCIA UISO C893?, adianta.


PREFEITURA E SEMA REALIZARÃO 710 CADASTRO FLORESTAL RURAL EM ITACARÉ - Jornal Tribuna da RegiãoJornal Tribuna da Região\tPREFEITURA E SEMA REALIZARÃO 710 CADASTRO FLORESTAL RURAL EM ITACARÉ - Jornal Tribuna da Região\nInício » Posts » + CATEGORIAS » Destaque » PREFEITURA E SEMA REALIZARÃO 710 CADASTRO FLORESTAL RURAL EM ITACARÉ\nA Prefeitura de Itacaré, através da sua Secretaria de Meio Ambiente, firmou acordo junto à Secretaria Estadual de Meio Ambiente (SEMA) e o INEMA, para a realização de 710 Cadastro Estadual Florestal Rural (CEFIR). Os interessados já podem procurar a Secretaria do Meio Ambiente, em Itacaré, ou a Secretaria de Agricultura, em Taboquinhas, para fazer o agendamento de visitas.\nO CEFIR corresponde, no estado da Bahia, ao Cadastro Ambiental Rural (CAR), no âmbito Federal. O cadastro é uma obrigação criada pelo Código Florestal Brasileiro auxiliando no Planejamento ambiental e econômico do Estado. Todas as propriedades rurais com até quatro módulos fiscais terão os seus cadastros feitos pelo SEMA/INEMA em parceria com os municípios.\nO secretário de Meio Ambiente de Itacaré, Paulo Baracho, esclarece que esse cadastro será feito gratuitamente, auxiliando os pequenos produtores rurais a se adequarem a legislação ambiental dentro do prazo, ou seja até maio de 2018. O cadastro traz como benefícios a valorização das propriedades e possibilidade de acessar crédito agrícola, entre outras vantagens.\n66.118 EX-ATRIZ DO “ZORRA TOTAL” FICA COMPLETAMENTE NUA NA PRAIA


Distribuidor de Limpador Mamadeira Fino ALDEIA DA SERRA - Limpador para Mamadeira - Murano Kit Higiene Para Bebe\nO distribuidor de limpador mamadeira fino ALDEIA DA SERRA é desenvolvido para atender as necessidades de pais e responsáveis nos procedimentos de higienização do produto logo após a amamentação. Um de seus principais diferenciais é contar com dimensões especiais que garantem o acesso do instrumento ao interior da mamadeira, para a eliminação de resíduos e bactérias de forma simples e rápida. O limpador é livre de materiais compostos por substâncias tóxicas.\nPrecisando de distribuidor de limpador mamadeira fino ALDEIA DA SERRA?\nPor ser considerado um produto indispensável no dia a dia dos pais de crianças pequenas, as vendas de distribuidor de limpador mamadeira fino ALDEIA DA SERRA estão sempre em alta. Conheça a fabricante Murano Baby e conte com os produtos da empresa em seu estabelecimento. Entre em contato.\nPesquisando distribuidor de limpador mamadeira fino ALDEIA DA SERRA? Saiba que a MURANO INDUSTRIA E COMERCIO LTDA oferece a solução no segmento de ENXOVAIS PARA BEBÊ, como, Kit de Higiene para Bebê, ENXOVAIS PARA BEBÊ - Vila Moinho Velho - São Paulo, Kit de Higiene Bebê, Kit Papinha Completo, Kit Banho Bebê Completo, Kit de Papinha, entre outros serviços. Isso acontece graças aos investimentos da empresa com ótimos profissionais e instalações de qualidade, buscando sempre a satisfação do cliente e a excelência em produtos e trabalhos. Nossos profissionais estão prontos para atendê-lo adequadamente, nós oferecermos, além do que já foi citado, outros serviços, como por exemplo, Kit de Higiene para Bebê e Limpador para Mamadeira Fino. Por isso, fale conosco e saiba mais.\nO conteúdo do texto "Distribuidor de Limpador Mamadeira Fino ALDEIA DA SERRA" é de direito reservado. Sua reprodução, parcial ou total, mesmo citando nossos links, é proibida sem a autorização do autor. Crime de violação de direito autoral – artigo 184 do Código Penal – Lei 9610/98 - Lei de direitos autorais.


Chefe do Pentágono confirma intenção dos EUA de controlar petróleo sírio\nO Departamento de Defesa dos EUA confirmou a intenção das Forças Armadas dos EUA de permanecer na Síria e de monitorar ainda mais os campos de petróleo no nordeste do país. Isto foi afirmado pelo chefe do Pentágono, Mark Esper, em uma entrevista coletiva com a secretária de Defesa australiana Linda Reynolds.\nQuestionado por jornalistas se o controle americano sobre as áreas de petróleo na Síria é possível sem confronto com Moscou e Damasco, Esper disse que os Estados Unidos exercerão controle sobre os campos de petróleo na Síria para "protegê-los dos terroristas do Estado Islâmico" (proibido na Rússia), bem como fornecer acesso a eles por representantes da oposição síria.\nGarantimos a segurança dos campos de petróleo, a fim de negar o acesso do ISIS a eles e a outras entidades da região, bem como a garantir que as forças democratas na Síria tenham acesso constante a eles. Esses recursos são importantes para que as Forças Democráticas cumpram sua missão e façam o que precisa ser feito na região.\n- disse o secretário de defesa dos EUA.\nEsper enfatizou que os EUA pretendem ficar e proteger os campos de petróleo, inclusive do ISIS, e "responderão a qualquer ameaça à vida das forças armadas dos EUA". Segundo o chefe do Pentágono, um contingente militar dos EUA adicional está sendo remanejado e implantado no nordeste do país.\nComeçamos a implantar, realocar forças adicionais (...) em Deir ez-Zor. Como eu disse, isso inclui unidades mecanizadas e outros tipos de tropas, e isso continuará até decidirmos: temos capacidade suficiente para garantir que o ISIS e outras forças desestabilizadoras não tenham acesso a essa instalação de petróleo\n- Ele disse aos repórteres.\nAnteriormente, foi relatado que os Estados Unidos pretendem enviar tropas no campo petrolífero sírio ao redor do 900 com o apoio de tanques Abrams e outros veículos blindados, bem como formações armadas dos SDF, incluindo unidades árabe-curdas.\nDe acordo com informações espaciais fornecidas pelo Ministério da Defesa da Rússia, o desejo dos EUA de "proteger campos de petróleo dos terroristas do IG é pilhagem trivial do petróleo sírio, que os EUA produzem ilegalmente e contrabandeiam para os países vizinhos.


CEP de Cunhambebe - RJ | Guia de Compra\nCEP de Cunhambebe - RJ\nPara refinar a busca do CEP em Cunhambebe, digite uma palavra-chave, referente à Rua, ou Avenida, ou Praça.\nLocalizar CEP de Cunhambebe - RJ\nPara encontrar a localização com detalhes do CEP em Cunhambebe - RJ, selecione um endereço acima. Todavia, a lista de CEPs pode ser extensa, em cidades de médio e grande porte.\nA lista de CEP de Cunhambebe em RJ, com endereço do código postal da rua, avenida, ou praça, está disponível nesta página, para consulta.\nA estrutura do CEP em Cunhambebe - RJ é dividida por Bairros, Ruas, Avenidas e Praça.\n- Logradouros em Cunhambebe - RJ: Faixa de Sufixos utilizada: 000 a 899\n- Códigos Especiais em Cunhambebe - RJ: Faixa de Sufixos utilizada: 900 a 959


Política de Privacidade - Saúde Inteligente\nObrigado por visitar nosso site Saúde Inteligente. Esta política descreve as formas como coletamos, armazenamos, usamos e protegemos suas informações pessoais. Você aceita essa política e concorda com tal coleta, armazenamento e uso quando se inscrever ou usar nossos produtos, serviços ou qualquer outro recurso, tecnologia ou funcionalidade que nós oferecemos ao acessar nosso site ou por qualquer outro meio.\nEsta Política de Privacidade está sujeita a alterações por Saúde Inteligente a qualquer momento e, a nosso critério, sem aviso prévio, atualizando esta publicação.\nAs informações de identificação pessoal têm como objetivo de divulgar artigos, conteúdos promocionais e parceiros. Nós só coletamos informações pessoais, como nomes e endereços de email.\nPodendo também usar estas informações para contatá-lo sobre oportunidades de negócios caso identifiquemos que você possa ser um parceiro de negócios adequado.\nO usuário dos nossos serviços pode a qualquer momento deixar de receber comunicações do nosso site. Para tanto basta enviar um e-mail para o nosso suporte indicando o seu desejo de não mais receber comunicações, ou simplesmente clicar no link ‘remover’ ou ‘desuscribirse contido no final de cada email.\nNós só enviaremos e-mails para as pessoas que nos autorizarem previamente, diretamente, ou por intermédio de terceiros. Nós não enviamos e-mails comerciais não solicitados, porque nós odiamos o Spam tanto quanto você.\nOs Cookies são informações enviadas pelo servidor do Saúde Inteligente ao computador do usuário, que auxilia na identificação de seu IP e na facilidade e eficiência de sua navegação, simplificando o login de usuários cadastrados, auxiliando na garantia de segurança e autenticidade dos acessos, bem como para controle interno de audiência e de preferências. A aceitação ou não dos cookies pode ser livremente alterada na configuração de seu navegador. No entanto, quando o usuário desrespeitar alguma regra de segurança ou exercer alguma atividade prejudicial ao bom funcionamento do site, como por exemplo, tentativas de hackear o serviço, o Saúde Inteligente, para proteção e segurança do site e dos demais usuários, pode adotar medidas para identificar o usuário e coibir tais condutas ilícitas.\nAtenção: O Saúde Inteligente possui links de acesso para outros sites e que não estão cobertos por esta política. Assim, verifique a política de privacidade desses sites, tendo em vista que suas informações serão administradas de acordo com a política de cada um deles e que podem diferenciar das nossas.\nEm caso de dúvidas o usuário poderá entrar em contato pela página Fale Conosco (link para contato)