m10 - progrmação de microprocessadores - trabalho

24
Trabalho Realizado por: Diogo Fernandes, nº3; 3ºG 1 Módulo 10 – Programação de Microprocessadores Módulo 10 – Programação de Microprocessadores SDAC Prof. Miguel

Upload: diogo-fernandes

Post on 19-Oct-2015

143 views

Category:

Documents


3 download

TRANSCRIPT

Mdulo 10 Programao de Microprocessadores

Trabalho Realizado por: Diogo Fernandes, n3; 3G

SDAC

Prof. Miguel NadaisMdulo 10 Programao de Microprocessadores

ndice

Introduo3Conceitos bsicos de programao em Assembly4Programao em Assembly8Programa em Assembly (Exemplos)16Concluso19Web Grafia20

Introduo

Este trabalho foi realizado no mbito da disciplina de Sistemas Digitais e Arquitectura de Computadores, do Curso Profissional de Gesto de Equipamentos Informticos. O trabalho relativo ao Mdulo 10 Programao de Microprocessadores. Assembly uma linguagem de programao, ou seja, serve para conceber programas. Esta linguagem de programao considerada de baixo nvel, ou seja, o utilizador interage directamente com o Processador do computador, sem a necessidade de intermedirios. A linguagem Assembly no mais do que uma representao simblica da codificao binria de um computador: a linguagem mquina. Esta linguagem de programao oferece uma representao mais prxima do programador, o que simplifica a leitura e a escrita dos programas.Mas para qu usar Assembly e quando? Tipicamente, quando um programador utiliza Assembly, porque a velocidade ou a dimenso do programa que est a desenvolver so crticas. Isto acontece muitas vezes na vida real, sobretudo quando os computadores so embebidos noutras mquinas (carros, avies, unidades de controlo de produo industrial...). Os computadores deste tipo devem responder rapidamente a eventos vindos do exterior. Existe ainda outro motivo, que est relacionado com a execuo temporal dos programas: muitas vezes possvel retirar grandes benefcios da optimizao de programas. Por exemplo, alguns jogos que recorrem a elaborados motores 3D so parcialmente programados em Assembly (nas zonas de cdigo onde a optimizao mais benfica que so normalmente as zonas de cdigo mais frequentemente utilizado).Ao longo deste trabalho irei tentar explicar a linguagem Assembly, e tambm mostrar alguns exemplos de um programa em Assembly.

Conceitos bsicos de programao em Assembly

Assembly a linguagem de programao mais bsica disponvel para qualquer processador. Com a linguagem Assembly, um programador s trabalha com as operaes executadas directamente sobre o processador. A linguagem Assembly carece de alto nvel de conforto, tais como variveis e funes, e no porttil entre as diversas famlias de processadores. No entanto, Assembly a linguagem de programao mais poderosa disponvel no computador, e ela d aos programadores a viso necessria para escrever cdigo eficiente em linguagens de alto nvel. Aprender Assembly valorizar o tempo e o esforo de todos os programadores srios.

O Bsico

Antes de podermos explorar o processo de escrever programas de computador, temos que voltar para o bsico e saber exactamente o que um computador e como o seu funcionamento. Cada computador, no importa quo simples ou complexo, tem no seu ncleo, exactamente duas coisas: o Processador e alguma memria. Juntas, essas duas coisas so o que tornam possvel que o seu computador execute programas.No nvel mais bsico, um programa de computador nada mais do que uma compilao de nmeros armazenados na memria. Nmeros diferentes dizem para o Processador fazer diferentes coisas. O Processador l os nmeros, um de cada vez, descodifica-os e executa o que os nmeros dizem. Por exemplo, se o Processador l o nmero 64 como parte de um programa, ela ir adicionar 1 ao nmero armazenado num local especial chamado AX. Se o Processador l o nmero 146, vai trocar o nmero armazenado em AX com o nmero armazenado noutro local chamado BX. Ao combinar vrias operaes simples, como estas num programa, um programador pode fazer o computador realizar coisas incrveis.Como exemplo, aqui esto os nmeros de um simples programa de computador:184, 0, 184, 142, 216, 198, 6, 158, 15, 36, 205, 32Se o utilizador digitar estes nmeros na memria do computador e execut-los no MS-DOS, veria um sinal de dlar ($) colocado no canto inferior direito da tela, uma vez que o que estes nmeros dizem que o computador faa.

Figura Representao em cdigo mquina e linguagem AssembleyLinguagem Assembly

Embora os nmeros do programa acima faam sentido para um computador, eles no so claros para um ser humano. Quem poderia imaginar que o cdigo colocaria um cifro no ecr? Claramente, manipular nmeros directamente uma pssima maneira de escrever um programa.No tem que ser assim. H algum tempo atrs, algum veio com a ideia de que os programas de computador poderiam ser escritos com palavras, em vez de nmeros. Ento um programa especial, ao qual se d o nome de assembler, juntaria as palavras do programador e convert-las-ia em nmeros que o computador pudesse entender. Isto salvou os programadores de milhares de horas de esforo, j que no tinham mais que procurar nmeros difceis de lembrar nas costas de livros de programao, em vez disso bastava usar palavras simples.O programa acima, escrito na linguagem Assembly, fica assim:MOV AX, 47104 MOV DS, AX MOV [3998], 36 32 INTQuando o assembler l este programa exemplo, converte cada linha de cdigo numa instruo de nvel da CPU. Este programa utiliza dois tipos de instrues, MOV e INT. Nos processadores da Intel, a instruo MOV movimenta dados, enquanto a instruo INT transfere o controlo do processador para os drivers de dispositivo ou sistema operativo.O programa ainda no est completamente claro, mas muito mais fcil de entender do que era antes. A primeira instruo, MOV AX, 47104, informa ao computador para copiar o nmero 47104 no local AX. A prxima instruo, MOV DS, AX, informa o computador para copiar o nmero em AX para o local DS. A prxima instruo, MOV [3998], 36 diz ao computador para colocar o nmero 36 em memria na posio 3998. Finalmente, INT 32 finaliza o programa, regressando ao sistema operativo.Antes de prosseguirmos irei explicar como funciona este programa. Dentro do Processador existe uma quantidade de locais, chamados registos, que podem armazenar um nmero. Alguns registos, como o AX, so de uso geral, e no fazem nada de especial. Outros registos, como o DS, controla a forma como o processador funciona. DS funciona como um registo de segmento, e usado para escolher qual rea de memria da CPU pode gravar. No nosso programa, vamos colocar o nmero 47104 para DS, que diz CPU para aceder memria na placa de vdeo. A prxima coisa que o programa faz colocar o nmero 36 na localizao 3998 da memria da placa de vdeo. Como o 36 o cdigo para o sinal de dlar $ e 3998 a posio de memria do canto inferior direito do ecr, um cifro aparece no ecr alguns microssegundos depois. Finalmente, o programa informa a CPU para realizar o que se chama uma interrupo. Uma interrupo usada para parar um programa e executar outro. No nosso caso, usamos a interrupo 32, que termina o nosso programa e retorna para o MS-DOS, ou qualquer outro programa que foi usado para iniciar o nosso programa.

O Assemblador

Uma ferramenta essencial quando se programa em linguagem Assembly o assemblador. O uma programa que traduz de Assembly para linguagem mquina. Os primeiros assembladores pouco mais faziam do que a traduo para cdigo mquina, mas actualmente tm muitas outras capacidades permitindo nomeadamente: Atribuir nomes simblicos a endereos de memria, variveis e grupos deInstrues; Trabalhar em diversas bases de numerao bem como converter caracteres nos seus cdigos ASCII; Efectuar clculos aritmticos simples com constantes ou nomes simblicos; Definir os endereos de memria onde o programa e os dados iro ser armazenados; Reservar reas de memria para armazenamento temporrio de informao; Configurar a gerao de cdigo mquina e o formato das listagens produzidas; Construir e utilizar bibliotecas de funes, ajudando o programador de forma modular e a reutilizar cdigo, j escrito em Assembly ou noutras linguagens.Existem actualmente inmeros assembladores comerciais e de domnio pblico para a famlia 51. Para o sistema operativo Windows um dos melhores o da KEIL software, disponvel em verso de desmonstrao, mas 90% funcional.

Figura Interface do KEIL software

Programao em Assembly

A linguagem Assembly , pois, o nvel mais baixo em que se pode programar com alguma comodidade. A traduo da linguagem Assembly de cada microprocessador para o cdigo mquina correspondente pode ser feita mo, mediante uma tabela de converso, mas normalmente feita recorrendo a um assemblador, ferramenta que na maior parte dos casos oferecida pelo fabricante do microprocessador.Nas seces seguintes apresentam-se as vantagens e desvantagens de programar em linguagem Assembly; um bom assemblador atenua algumas das desvantagens da linguagem mas h outras que lhe so intrnsecas.Vantagens

A principal vantagem de programar em linguagem Assembly poder optimizar o cdigo de modo a aproveitar ao mximo as caractersticas particulares do hardware onde vai ser executado, conseguindo assim melhores resultados quer em tempo de execuo quer em tamanho de cdigo gerado.Outra vantagem a existncia de assembladores para todos os microprocessadores, muitas vezes oferecidos pelos fabricantes, pelo que sempre possvel programar em Assembly, qualquer que seja o microprocessador escolhido. O mesmo no acontece com linguagens de alto nvel, onde nem sempre possvel encontrar um compilador adequado para um determinado microprocessador. Podemos ainda dizer com a facilidade de optimizao do cdigo permite aproveitar ao mximo as caractersticas particulares do hardware, onde o programa vai ser executado, conseguindo deste modo melhores resultados quer em tempo de execuo querem tamanho de cdigo gerado. Desvantagens

A principal desvantagem de uma linguagem de baixo nvel a grande desproporo que existe entre a complexidade do seu conjunto de instrues e as tarefas que o microprocessador normalmente chamado a executar. Esta desproporo obriga o programador a decompor cada tarefa num conjunto de operaes elementares que, alm de ser um processo demorado e sujeito a erros, no ajuda a manter o cdigo estruturado.Outra desvantagem a necessidade de conhecer em detalhe o modelo de programao do microprocessador, nomeadamente no que se refere aos registos de trabalho disponveis, registos privilegiados ou especiais e registo de estado. Como consequncia desta dependncia relativamente aos detalhes internos de um microprocessador, a portabilidade dos programas muito reduzida.

A tendncia actual, a favor de uma programao mista, usando principalmente linguagens de mais alto nvel (por exemplo C), e recorrendo linguagem Assembly apenas em rotinas onde a eficincia do cdigo seja o objectivo principal. Esta tendncia explica-se devida forte presso do mercado, que obriga a encurtar o tempo de desenvolvimento e a aumentar a facilidade de manuteno do cdigo, e tambm devido aos avanos na microelectrnica que permitem que a rapidez de execuo se consiga facilmente por aumento da frequncia de funcionamento. Componentes da linguagem Assembly

Os componentes da linguagem Assembly so basicamente as instrues para o processador. Ignorando as instrues que no podem ser utilizadas pelo sistema operativo Windows, assembly condicional, macros, ponto flutuante, MMX e instrues de 64 bits, os componentes da linguagem Assembly podem ser divididos nas seguintes categorias: Instrues de Registos; Instrues de Pilha; Instrues de Execuo; Instrues de Memria; Instrues de Flag; Declaraes de Memria; Directivas para o Assembler; Comentrios; Instrues para o Sistema Operativo (Windows).

Instrues de Registos

Estas instrues transferem dados ou realizam clculos utilizando os registos de 32 bits da Processador. Existem seis registos de uso geral chamados de EAX, EBX, ECX, EDX, ESI e EDI. Exemplos deste tipo de instruo so:MOVESI,EBX ;move o contedo do registo EBX para o registo ESIADDEAX,EDI ;soma o contedo do registo EDI com o do registo EAXBTECX,0 ;testa o bit 0 do registo ECXCMPEDX,450 ;compara o contedo de EDX com 450DIVECX ;divide EDX:EAX (inteiro longo) por ECXMULECX ;multiplica EAX por ECX e pe o resultado em EDX:EAXSHLEDX,4 ;desloca os bits de EDX para a esquerda em 4 bits (multiplica por 16)TESTEAX,8 ;testa o bit 3 do registrador EAXInstrues de Pilha

A pilha uma rea de memria reservada pelo sistema operativo para cada programa que estiver a ser executado como rea de arquivamento temporrio. So exemplos deste tipo de instruo:PUSHEAX ;pe o contedo do registo EAX na pilhaPOPEDX ;retira o ltimo valor colocado na pilha e pe em EDXPUSH1000h ;pe o valor hexadecimal 1000 na pilhaMOVEBP,ESP ;move o valor do ponteiro da pilha para o registo EBPSUBESP,30h ;move o ponteiro da pilha para abrir uma rea de armazenamento para dados locaisMOVD[EBP-20h],500h;insere o valor 500 hexa para a rea de dados locaisInstrues de Execuo

Estas instrues desviam o processador para que execute cdigo a partir de um ponto que no seja a prxima linha de execuo. So exemplos:CALLMAKEWINDOW;executa o cdigo do procedimento e depois retornaCALLEAX ;executa o cdigo a partir do endereo presente em EAX e depois retornaRET ;termina este procedimento retornando ao chamadorJZ4 ;se o resultado for zero, continua a execuo a partir do marcador 4:JC>.fim ;se a flag estiver activa, continua a execuo a partir de .fimJMPMAKEWINDOW;continua a execuo a partir do procedimento nominadoLOOP2 ;decrementa ECX e salta para o marcador 2: a no ser que ECX=0

Instrues de Memria

Estas instrues lem ou escrevem em reas de memria que no sejam da pilha. Normalmente estas reas esto na seo de dados do prprio executvel ou podem ser alocadas pelo sistema operativo em tempo de execuo. So exemplos:ADDEAX,[ESI] ;adiciona a EAX o contedo de memria cujo ponteiro de endereo est no registo ESIMOVEAX,[MEUSDADOS];move para EAX o contedo de memria cujo marcador MEUSDADOSSUBD[MYDATA+64],10h;subtrai 10h do dword em MEUSDADOS mais 64 bytesCMPB[MYDATA+EDX*4],2;compara um byte com 2 numa parte do array MEUSDADOSLODSB ;carrega o byte na memria apontada por ESI em alSTOSD ;carrega o contedo de EAX na memria apontada por EDIInstrues de Flag

As principais flags usadas so a Z (flag zero), C (flag carry), S (flag de sinal) e D (flag de direco). A maioria das instrues alteram as flags automaticamente para dar o resultado da instruo. Existem determinadas instrues que podem ser usadas para alterar o valor das flags manualmente:STC ;activa a flag de carryCLC ;limpa a flag de carrySTD ;activa a flag de direco para LODS, STOS, CMPS, SCAS, MOVSCLD ;limpa a flag de direcoDeclaraes de Memria

O sistema operativo reserva memria para o executvel quando ele executado. Declaraes so feitas para reservar memria na seo de dados ou na seo de constantes se os dados devem ser inicializados, isto , devem receber um valor. Se forem dados no inicializados, a rea de dados pode ficar reservada na seo de dados no inicializados. Isto no toma espao algum no arquivo executvel porque um espao de memria alocado para este tipo de dado quando o executvel iniciado pela primeira vez.Seguem exemplos de como a memria declarada, o que pode variar de acordo com o assembler utilizado:DB4 ;declara um byte e atribui-lhe o valor inicial 4MEUDADODB4 ;um byte de valor inicial 4 com o marcador MEUDADOMYSTRUCTDD16DUP0;16 dwords, todos com valor zero, chamados MYSTRUCTBUFFERDB1024DUP ?;1024 bytes chamados BUFFER como dados no definidos

Directivas para o Assembler

So instrues que orientam onde o Assembler deve colocar o cdigo fonte que as segue. O Assembler marca a seo de cdigo como apenas para leitura e executvel; as sees de dados definidos e indefinidos como leitura/escrita. Veja alguns exemplos (que podem variar de acordo com o assembler):CODESECTION ;tudo o que se segue deve ser colocado numa seo ;marcada para apenas leitura e executvel (cdigo)DATASECTION ;tudo o que se segue deve ser colocado numa seo ;com atributos de leitura e escrita mas no de cdigoCONSTSECTION ;tudo o que se segue deve ser colocado numa seo ;com atributo de apenas leituraComentrios

Aps ponto e vrgula, o texto ignorado at prxima quebra de linha. Desta forma possvel associar descries e explicaes ao cdigo fonte, as quais sero ignoradas pelo assembler.Instrues para o sistema operativo proporcionam ao programador o acesso a uma grande variedade de funes. No caso do sistema operativo Windows, proporcionam acesso API (Applications Programming Interface). Veja os exemplos abaixo: PUSH12h ;pe valor hexa 12 na pilha para a chamada APICALLGetKeyState ;pede ao Windows para por o estado da tecla Alt em EAXTESTEAX,80000000h;testa se a tecla Alt est sendo pressionada (bit 31 ligado)JZ>L22 ;no, saltar para L22

PUSH24h ;valor hexa 24 = ponto de interrogao, botes yes e noPUSHESI,EDI ;endereo do ttulo, endereo da mensagemPUSH[hWnd] ;manipulador da janela proprietriaCALLMessageBoxA ;mostra a caixa de mensagem Windows pedindo yes/noCMPAL,7 ;checa se "no" foi clicado pelo utilizadorJNZ>L40 ;no, saltar para L40

PUSH0PUSHADDR FILE_DONE ;d endereo do arquivo FILE_DONE para receber o resultadoPUSHECX,EDX ;ECX = bytes que devem ser escritos, EDX=fonte de dados,PUSHESI ;ESI = manipulador do arquivoCALLWriteFile ;escrever ECX bytes de EDX para ESI

PUSH808h,5h ;808 = em baixo e meio preenchido, 5 = elevadoPUSHEBX,EDX ;ebx = RECT, EDX = contexto do dispositivoCALLDrawEdge ;desenhar rectngulo especial com bordas na tela

PUSH4h,3000h,ESI,0;4h = fazer memria leitura/escrita, 3000h = reservarCALLVirtualAlloc ;reservar e consignar ESI bytes de memria leitura/escrita

PUSH0,[hInst],0,0;param, manipulador do mdulo, menu e proprietrioPUSH208,130,30,300;altura, largura, y, xPUSH80C80000h ;estilo (POPUP+CAPTION+SYSMENU)PUSHEAX ;EAX = endereo da string terminada em zero com o ttuloPUSH'LISTBOX' ;por ponteiro para 'LISTBOX' na pilhaPUSH0 ;estilo extended (nenhum)CALLCreateWindowExA;criar a janela listbox

......ou,se preferir,usar INVOKE..INVOKE CreateWindowExA,0,'LISTBOX',EAX,80C80000h,300,30,130,208\ 0,0,[hInst],0

.............

INVOKE ShowWindow,[hWnd],1Modelo de Programao

O modelo de programao de um microprocessador descreve os recursos disponveis para o programador: registos de trabalho, registos especiais, eventuais agrupamentos de registos, instrues e modos de endereamento disponveis, etc. Para comear a escrever pequenos programas basta conhecer os principais registos e instrues de um microprocessador. As seces seguintes apresentam o modelo de programao da famlia 51 da Intel.

Registos principais da famlia i51

A arquitectura base da famlia 51 da Intel disponibiliza um nmero aprecivel de registos dos quais se destacam, numa primeira abordagem, os seguintes: Registos de trabalho R0 a R7 Registos privilegiados A (acumulador) e B Registo de estado PSW (program status word)Os registos A e B so privilegiados no sentido de que existem algumas instrues que s podem ser executadas neles, por exemplo as operaes aritmticas s podem ser efectuadas sobre o acumulador. O registo de estado (PSW) d, entre outras, indicaes sobre a paridade do valor contido no acumulador, se houve ou no transporte e/ou overflow na ltima operao aritmtica efectuada, etc.

Grupos de instrues da famlia i51

As instrues disponveis na famlia i51 podem dividir-se em cinco grupos consoante a sua funo:1. Instrues de movimentao de dados2. Instrues aritmticas3. Instrues lgicas4. Instrues de salto e chamada de sub-rotinas5. Instrues booleanasAs instrues de movimentao de dados permitem copiar valores: de um registo para memria, da memria para um registo, etc.As instrues aritmticas permitem efectuar as quatro operaes aritmticas elementares considerando ou no a existncia de eventuais transportes. sempre necessrio recorrer ao registo acumulador e, por vezes, tambm ao registo B.As instrues lgicas permitem efectuar operaes lgicas elementares assim como rotaes de bits para a esquerda ou para a direita. Funcionam tambm exclusivamente com o acumulador.As instrues de salto e chamada de sub-rotinas permitem alterar a ordem de execuo de um programa de forma condicional ou incondicional.As instrues booleanas permitem manipular bits individualmente. A maior parte delas obriga a utilizar um dos bits do registo de estado a flag CY (carry) que funciona para o processamento booleano como o acumulador para o processamento aritmtico e lgico.Algumas regras de sintaxe e modos de endereamento da famlia i51A forma geral de uma instruo Assembly da famlia 51 mnemnica [operando1[,operando2[,operando3]]]ou seja, h instrues com 3, 2, 1 ou nenhum operando. De acordo com o estabelecido pelo fabricante original um operando pode ser: um nmero, representando um endereo de memria (endereamento directo), o nome de um registo (endereamento registo), um valor constante, se precedido do carcter # (endereamento imediato), um apontador, se precedido do carcter @ (endereamento indirecto).Estas regras de sintaxe entendem-se melhor com a apresentao de alguns exemplos simples:MOV R5,40h ; Copia para o registo R5 o contedo da posio de memria 64.MOV R5,#40h ; Coloca no registo R5 o valor 64.ADD A,R5 ; Adiciona ao acumulador o registo R5. Resultado no acumulador.ORL A,#10010001b ; Faz o OR lgico do acumulador com o valor 91h.; O resultado fica no acumulador.LJMP 4358h ; Continua a execuo do programa no endereo 4358h.; Copia para o acumulador...MOV A,R0 ; ...o que est em R0MOV A,@R0 ; ...o contedo da posio de memria apontada por R0.Note-se que dos registos de trabalho R0 a R7, apenas R0 e R1 podem assumir o papel de apontadores.Quando o manual de programao [1] emprega a designao genrica Rn est a referir-se aos registos R0 a R7 mas quando usa a designao Ri est a referir-se apenas aos registos R0 e R1.

Programa em Assembly (Exemplos)

Exemplo 1 Ose seguinte programa constitui um procedimento que copia uma string x para uma string y:# Programa que copia uma string y para uma string x.datastr1: .asciiz "origem "str2: .asciiz "copia ".textmain: addi $sp, $sp, -4 # reserva uma posio no stacksw $ra, 0($sp) # guarda o endereo de retornojal strcpylw $ra, 0($sp) # recupera endereo de retornoaddi $sp, $sp, 4 # pop do stack pointerend: jr $rastrcpy:addi $sp, $sp, -4sw $s0, 0($sp)# guarda $s0 no stackadd $s0, $0, $0# $s0 = i = 0la $t5, str1 # guarda endereo de str1 em $t5la $t6, str2 # guarda endereo de str2 em $t6L1:add $t1, $s0, $t5 # carrega em $t1 endereo de str1 que o y(i)lb $t2, 0($t1) # carrega o byte y(i) em $t2add $t3, $s0, $t6 # carrega em $t3 endereo de str2 que o x(i)sb $t2, 0($t3)# armazena em x(i) o byte y(i) que est em $t2addi $s0, $s0, 1# incremento de 1 (byte seguinte)bne $t2, $0, L1# se y(i) != 0 ento continua a copiarlw $s0, 0($sp) # seno, recupera antigo valor de $s0addi $sp, $sp, 4jr $ra

Exemplo 2

# Este procedimento calcula o factorial de um inteiro positivo# O argumento recebido em $ a 0# O resultado (um inteiro de 32 bits) devolvido em $ v 0# No usa nenhum registo $s0-$s7 por isso no preciso guard-los factorial :subu $sp, $sp, 4sw $r , 4($sp) # guarda endereo de retorno no s t a c kbeqz $a0, termina # testa base da recursosubu $sp, $sp, 4 # ainda no terminasw $a0, 4 ($sp) # guarda o argumentosub $a0, $a0, 1 # ser chamado com n-1jal factorial # aps a base da recurso ser executada, estas linhas# sero executadaslw $t0, 4($sp) # argumento que guardei no stackmul $v0, $v0, $t0 # n*(n-1)lw $ra, 8($sp) # preparar o retornoaddu $sp, $sp, 8 # retirei do stack dois elementos (um endereo e# um argumento)jr $ratermina:li $v0, 1 # 0! = 1 o valor de retornolw $ra, 4($sp) # obtm endereo de retornoaddu $sp, $sp, 4 # ajusta o stack pointerjr $ra # retorna

Exemplo 3

.data 0x10010000long: .word 7 # dimenso do bufferbuffer: .space 7 # buffer onde se armazenam os caracteres teclados.data 0xffff0000cin: .space 1 # porto de controlo do teclado.data 0xffff0004in: .space 1 # porto de leitura do teclado.text.globl mainmain: la $a0, buffer # carrega endereo do bufferlw $v0,long($0) # controlo da longitude do bufferaddi $v0,$v0,-1li $v1,0x0a # caracter return, muda de linha (\n)la $a1, in # carrega endereo inla $a2, cin # carrega endereo de controlo do tecladoctr: lb $t0, 0($a2)andi $t0,$t0,1beq $t0,$0, ctrlb $s0, 0($a1) # l do porto do tecladosb $s0,0($a0) # armazena o dado no bufferaddi $a0,$a0,1 # incrementa apontador do bufferaddi $v0,$v0,-1 # decr. tamanho restante bufferbne $v0,$0, ctr # controlo de fim de stringfim: li $s0, 0x00sb $s0,0($a0) # armazena fim de string no bufferjr $ra # retorna ao mainEste cdigo constitui um programa que l os caracteres introduzidos a partir do teclado, sem contudo efectuar um correcto controlo da entrada de dados.

Exemplo 4

Neste exemplo, ao executar o programa, ser mostrado no ecr uma mensagem a dizer Ola Mundo..section .rodatastrOlaMundo: .string "Ola Mundo!\n".text.globl mainmain:pushl %ebppushl $strOlaMundocall printfaddl $4, %esppop %ebpxorl %eax, %eaxret

Concluso

A elaborao deste trabalho proporcionou um conhecimento bsico da linguagem de programao em Assembly.

Web Grafia

http://valeriofarias.com/introducao-a-linguagem-assembly/ http://www.portugal-a-programar.pt/topic/134-a-linguagem-assembly/ http://paginas.fe.up.pt/~jmf/mp0304/downloads/aulatp-5.pdf http://cee.uma.pt/people/faculty/pedro.campos/docs/guia-AC.pdf http://paginas.fe.up.pt/~jmf/mp0506/dwnlds/mp1-0506-print.pdf http://eden.dei.uc.pt/~filipius/arquivo/teaching/sebenta.pdf

19Mdulo 10 Programao de Microprocessadores