• Nenhum resultado encontrado

Assembly Primeiros Passos

N/A
N/A
Protected

Academic year: 2022

Share "Assembly Primeiros Passos"

Copied!
15
0
0

Texto

(1)

Aula 5

Assembly

Primeiros Passos

5.1 Objectivos . . . 1

5.2 Introdu¸c˜ao . . . 2

5.3 Programa¸c˜ao em linguagemassembly . . . 3

5.4 Modelo de programa¸c˜ao . . . 4

5.4.1 Organiza¸c˜ao da mem´oria . . . 4

5.4.2 Registos principais . . . 5

5.4.3 Grupos de instru¸c˜oes . . . 5

5.5 Regras de sintaxe . . . 6

5.6 O assemblador . . . 7

5.6.1 Caracter´ısticas gerais . . . 7

5.6.2 Alguns comandos do assemblador da KEIL . . . 8

5.6.3 Formato das listagens . . . 10

5.7 Problemas . . . 10

5.8 Algumas resolu¸c˜oes . . . 12

5.1 Objectivos

Familiariza¸c˜ao com o modelo de programa¸c˜ao simplificado da fam´ılia 51, com a sintaxe da sua linguagemassembly e com alguns comandos do assemblador.

1

(2)

5.2 Introdu¸ c˜ ao

O paradigma do programa residente1 obriga, como o pr´oprio nome indica, a armazenar em mem´oria um programa (conjunto de instru¸c˜oes) num formato que o microprocessador entenda. Essas instru¸c˜oes n˜ao s˜ao mais do que c´odi- gos bin´arios que o microprocessador vai extraindo da mem´oria, descodificando e executando. Um programa nessa forma diz-se estar emc´odigo m´aquina. Pro- gramar directamente em c´odigo m´aquina n˜ao ´e vi´avel mesmo para programas pequenos. De facto, por simples inspec¸c˜ao constata-se que os programas em c´odigo m´aquina: a) s˜ao muito extensos, dif´ıceis de perceber e depurar, b) n˜ao descrevem as tarefas a executar de um modo facilmente intelig´ıvel.

Estes problemas podem ser parcialmente resolvidos atribuindo um nome sim- b´olico (mnem´onica) a cada c´odigo de instru¸c˜ao de modo a tornar o programa minimamente intelig´ıvel e mais f´acil de escrever; chama-se a isso programar em linguagemassembly.

Um exemplo ajudar´a a clarificar estes conceitos: considere-se um programa que adiciona o conte´udo da posi¸c˜ao de mem´oria 64 com o conte´udo da posi¸c˜ao 65 colocando o resultado na posi¸c˜ao de mem´oria 66 e ignorando um eventual transporte (carry). Numa descri¸c˜ao de alto n´ıvel, considerando a mem´oria re- presentada peloarray mem[ ], o que este programa ir´a fazer ´e:

mem[66] = mem[64] + mem[65]

No caso particular da fam´ılia 51 as opera¸c˜oes aritm´eticas envolvem obrigatoria- mente um registo – o registo acumulador (A) – que, antes da opera¸c˜ao, guarda um dos operandos e depois recolhe o resultado. Tendo em conta esta restri¸c˜ao o programa poder´a ser:

1. copiar para o acumulador o conte´udo da posi¸c~ao de mem´oria com o endere¸co 64,

2. adicionar ao acumulador o conte´udo da posi¸c~ao de mem´oria com o endere¸co 65 (ficando o resultado no acumulador), 3. copiar para a posi¸c~ao de mem´oria com o endere¸co 66 o valor

que ficou no acumulador.

Na figura 5.1 pode ver-se a representa¸c˜ao deste programa em c´odigo m´aquina e em linguagemassembly: consta de trˆes instru¸c˜oes e ocupa seisbytes.

c´odigo m´aquina linguagemassembly E5 40

25 41 F5 42

| {z }

MOV A,64 ADD A,65 MOV 66,A

| {z }

odigos Instru¸oes

Figura 5.1: Representa¸c˜ao em c´odigo m´aquina e linguagemassembly

1Cfr. aulas te´oricas da primeira semana.

(3)

5.3. PROGRAMA ¸C ˜AO EM LINGUAGEM ASSEMBLY 3 De acordo com o estabelecido pelo fabricante2 os c´odigosE5h,25heF5hrepre- sentam, respectivamente, as trˆes instru¸c˜oes referidas anteriormente e os c´odigos 40h, 41h e42hrepresentam os endere¸cos de mem´oria envolvidos na opera¸c˜ao;

note-se a necessidade de os converter para hexadecimal quando se programa directamente em c´odigo m´aquina.

5.3 Programa¸ c˜ ao em linguagem assembly

A tradu¸c˜ao de um programa escrito em linguagemassemblypara os c´odigos m´a- quina correspondentes pode ser feita `a m˜ao, mediante uma tabela de convers˜ao mas habitualmente ´e feita de forma autom´atica recorrendo a uma ferramenta pr´opria – oassemblador – fornecida (pelo menos em vers˜oes simples) gratuita- mente pelo fabricante.

A programa¸c˜ao em linguagemassembly tem vantagens e desvantagens intr´ınse- cas `a pr´opria linguagem. Como vantagens registe-se que:

• A existˆencia de assembladores para todos os microprocessadores, muitos deles gratuitos ou de dom´ınio p´ublico, faz com que seja sem- pre poss´ıvel programar emassembly, qualquer que seja o micropro- cessador escolhido; o mesmo n˜ao acontece com linguagens de alto n´ıvel, onde nem sempre ´e poss´ıvel encontrar um compilador ade- quado para um dado microprocessador.

• A facilidade de optimiza¸c˜ao do c´odigo permite aproveitar ao m´aximo as caracter´ısticas particulares dohardware onde o programa vai ser executado, conseguindo deste modo melhores resultados quer em tempo de execu¸c˜ao quer em tamanho de c´odigo gerado.

E como desvantagens:

• A extrema simplicidade das instru¸c˜oes ´e respons´avel pela habitual despropor¸c˜ao entre as tarefas que o microprocessador ´e chamado a executar e o seu conjunto de instru¸c˜oes. Isto obriga `a decomposi¸c˜ao de cada tarefa a executar num conjunto de opera¸c˜oes elementares que, al´em de ser um processo demorado e sujeito a erros, dificulta a estrutura¸c˜ao dos programas.

• A necessidade de conhecer os detalhes internos de um microproces- sador, em particular tudo o que se refere aos registos de trabalho dispon´ıveis, registos privilegiados ou especiais, registo de estado e conjunto de instru¸c˜oes, tem como consequˆencia uma reduzida por- tabilidade dos programas.

A tendˆencia actual em ambiente comercial ´e a favor de uma programa¸c˜ao mista, usando principalmente linguagens de mais alto n´ıvel (C em particular) e recor-

2Foi a Intel que originalmente desenvolveu a fam´ılia 51 embora actualmente existam v´arios fabricantes com produtos compat´ıveis. A Philips Semiconductors ´e, actualmente, o fabricante com a maior gama de produtos compat´ıveis com esta fam´ılia.

(4)

rendo `a linguagemassembly apenas em rotinas onde a eficiˆencia do c´odigo seja o objectivo principal. Esta tendˆencia explica-se por trˆes motivos:

• a press˜ao do mercado obriga a encurtar o tempo de desenvolvimento e a aumentar a facilidade de manuten¸c˜ao do c´odigo,

• existem actualmente compiladores para a maioria dos microprocessadores, alguns at´e de dom´ınio p´ublico, capazes de gerar c´odigo optimizado,

• os avan¸cos na microelectr´onica permitem que a rapidez de execu¸c˜ao se consiga facilmente por aumento da frequˆencia de funcionamento.

Em ambientes acad´emicos, especialmente se o objectivo ´e estudar o funciona- mento interno de um microprocessador, o respectivo assembly ´e a linguagem mais adequada pelo que ser´a intensivamente utilizada nesta disciplina. Em disciplinas que abordem de novo este assunto mas na perspectiva do desen- volvimento de aplica¸c˜oes para microprocessadores, ser´a natural que se utilizem linguagens de mais alto n´ıvel.

5.4 Modelo de programa¸ c˜ ao

O modelo de programa¸c˜ao de um microprocessador descreve os recursos dis- pon´ıveis para o programador: organiza¸c˜ao da mem´oria, registos de trabalho, registos especiais, eventuais agrupamentos de registos, instru¸c˜oes e modos de endere¸camento dispon´ıveis, etc. Para come¸car a escrever pequenos programas basta conhecer a organiza¸c˜ao da mem´oria, os principais registos e os diferentes grupos de instru¸c˜oes. As sec¸c˜oes seguintes apresentam estes componentes do modelo de programa¸c˜ao para o caso particular da fam´ılia 51.

5.4.1 Organiza¸ c˜ ao da mem´ oria

Do ponto de vista da programa¸c˜ao e de uma forma extremamente resumida podemos considerar que a fam´ılia 51 permite o acesso a trˆes zonas de mem´oria distintas – mem´oria de dados interna (MDI), mem´oria de dados externa (MDE) e mem´oria de programas (MP) que poder´a ser interna ou externa ao micro.

A figura 5.2, adaptada da folha de caracter´ısticas do componente [?], indica a capacidade de cada uma destas zonas para o caso do 89C51.

Este elemento da fam´ılia 51 possui internamente 128 bytes de RAM (que funci- ona como MDI) e pode endere¸car at´e 64 kBytes de mem´oria de dados externa adicional. Para armazenar o programa possui internamente 4 kBytes de Flash ROM que funciona como mem´oria de programas. Alternativamente pode ende- re¸car at´e 64 kBytes de mem´oria de programas externa.

Na maioria das aplica¸c˜oes a distin¸c˜ao entre mem´oria de programas interna e externa ´e irrelevante para o programador pois ela ´e feita por hardware. No en-

(5)

5.4. MODELO DE PROGRAMA ¸C ˜AO 5

128 Bytes

64 kBytes

4 kBytes 60 kBytes

MDI MDE MP

Figura 5.2: Organiza¸c˜ao da mem´oria do 89C51

tanto, na mem´oria de dados a distin¸c˜ao ´e feita porsoftware, existindo instru¸c˜oes espec´ıficas para lidar com uma e com outra.

5.4.2 Registos principais

A arquitectura base da fam´ılia 51 disponibiliza um n´umero apreci´avel de registos dos quais se destacam os seguintes:

• Registos de trabalho – R0 a R7,

• Registos privilegiados – A (acumulador) e B,

• Registo apontador de 16 bits – DPTR (data pointer),

• Registo de estado – PSW (program status word).

Os registos A e B s˜ao privilegiados no sentido de que existem algumas instru¸c˜oes que s´o podem ser executadas neles, por exemplo as opera¸c˜oes aritm´eticas s´o podem ser efectuadas sobre o acumulador. O registo apontador de 16 bits ´e utilizado para aceder `a mem´oria externa. O registo de estado (PSW) d´a, entre outras, indica¸c˜oes sobre a paridade do valor contido no acumulador e se houve ou n˜ao transporte na ´ultima opera¸c˜ao aritm´etica efectuada; existem instru¸c˜oes espec´ıficas para testar estas condi¸c˜oes.

5.4.3 Grupos de instru¸ c˜ oes

As instru¸c˜oes dispon´ıveis na fam´ılia 51 podem dividir-se em cinco grupos con- soante a sua fun¸c˜ao:

1. Instru¸c˜oes de movimenta¸c˜ao de dados 2. Instru¸c˜oes aritm´eticas

3. Instru¸c˜oes l´ogicas (processamento debytes) 4. Instru¸c˜oes de salto e chamada de subrotinas 5. Instru¸c˜oes booleanas (processamento de bits)

(6)

As instru¸c˜oes de movimenta¸c˜ao de dados permitem copiar valores de um registo para outro, de um registo para mem´oria e de mem´oria para um registo.

As instru¸c˜oesaritm´eticas permitem efectuar as quatro opera¸c˜oes aritm´eticas elementares considerando ou n˜ao a existˆencia de eventuais transportes. ´E sempre necess´ario recorrer ao registo acumulador.

As instru¸c˜oesl´ogicaspermitem efectuar opera¸c˜oes l´ogicas elementares – AND, OR, XOR e NOT, sempre bit a bit – sobre operandos de umbyte, assim como rota¸c˜oes de bits para a esquerda ou para a direita.

As instru¸c˜oes desaltoechamadade subrotinas permitem alterar a ordem de execu¸c˜ao de um programa de forma condicional ou incondicional.

As instru¸c˜oes booleanas permitem manipular bits individualmente. A maior parte delas obriga a utilizar aflagCY (carry) que funciona para o processamento booleano como o acumulador para o processamento aritm´etico e l´ogico. bit do psw

O resumo de instru¸c˜oes [2] ou [1, p´aginas 13..16] d´a uma panorˆamica geral das instru¸c˜oes dispon´ıveis pelo que constitui um elemento de consulta indispens´avel.

O livro recomendado [4, sec¸c˜ao 8.7] ou o manual de programa¸c˜ao editado por um dos fabricantes desta fam´ılia [1] constitui a principal referˆencia para estudo deste assunto.

5.5 Regras de sintaxe

A forma geral de uma instru¸c˜aoassembly da fam´ılia 51 ´e

mnem´onica [operando1[,operando2[,operando3]]]

isto ´e, cada instru¸c˜ao ´e constitu´ıda por uma mnem´onica eventualmente seguida de um, dois ou trˆes operandos que podem ser:

• um n´umero, representando um endere¸co de mem´oria,

• um n´umero, representando uma constante (se precedido pelo car´acter#),

• o nome de um registo,

• o nome de um registo a funcionar como apontador (se precedido pelo car´acter @).

Estas regras de sintaxe entendem-se melhor com a apresenta¸c˜ao de exemplos.

Nota: Tudo o que aparece ap´os o car´acter ‘;’ ´e considerado coment´ario at´e ao fim da linha.

Assegure-se que entende completamente todas as instru¸c˜oes apresentadas no segmento de programa seguinte:

(7)

5.6. O ASSEMBLADOR 7

; Copia para o registo R5...

MOV R5,40h ; ...o conte´udo da posi¸c~ao de mem´oria 64.

MOV R5,#40h ; ...o valor 64.

; Coloca no registo DPTR o valor 50000 (C350h).

MOV DPTR,#50000

; Adiciona ao acumulador (acc) o registo R7.

ADD A,R7 ; O resultado fica em acc.

; Faz o OU l´ogico (bit a bit) do acc com o valor F0h.

ORL A,#11110000b ; O resultado fica em acc.

; Copia para a posi¸c~ao de mem´oria 65 o que est´a em acc.

MOV 65,A

; Continua a execu¸c~ao do programa no endere¸co 4358h.

LJMP 4358h

; Copia para o acumulador...

MOV A,R0 ; ...o que est´a em R0

MOV A,@R0 ; ...o conte´udo da posi¸c~ao de mem´oria

; de dados interna apontada por R0.

Note-se que dos registos de trabalho R0 a R7, apenas R0 e R1 podem assumir o papel de apontadores. No manual de programa¸c˜ao [1] a designa¸c˜ao gen´ericaRn refere-se aos registos R0 a R7 mas a designa¸c˜aoRi refere-se apenas aos registos R0 e R1. A designa¸c˜ao gen´ericadirect refere-se a um endere¸co da mem´oria de dados interna.

5.6 O assemblador

5.6.1 Caracter´ısticas gerais

Uma ferramenta essencial quando se programa em linguagem assembly ´e o as- semblador. Os primeiros assembladores pouco mais faziam do que a tradu¸c˜ao para c´odigo m´aquina mas actualmente tˆem muitas outras capacidades permi- tindo nomeadamente:

• atribuir nomes simb´olicos a endere¸cos de mem´oria, vari´aveis e grupos de instru¸c˜oes,

• trabalhar em diversas bases de numera¸c˜ao bem como converter caracteres nos seus c´odigos ASCII,

• efectuar c´alculos aritm´eticos simples com constantes ou nomes simb´olicos,

• definir os endere¸cos de mem´oria onde o programa e os dados ir˜ao ser armazenados,

• reservar ´areas de mem´oria para armazenamento tempor´ario de informa¸c˜ao,

• configurar a gera¸c˜ao de c´odigo m´aquina e o formato das listagens produ- zidas,

• construir e utilizar bibliotecas de fun¸c˜oes, ajudando a programar de forma modular e a reutilizar c´odigo j´a escrito emassemblyou noutras linguagens.

(8)

Existem actualmente in´umeros assembladores comerciais e de dom´ınio p´ublico para a fam´ılia 51. Para o sistema operativo Windows um dos melhores ´e o

daKEIL Software (www.keil.com), dispon´ıvel em vers˜ao de demonstra¸c˜ao, mas

90% funcional, no CD que acompanha o livro recomendado. Este assemblador est´a integrado num ambiente gr´afico, oµVision-51, que inclui tamb´em um com- pilador de C e facilita muito o trabalho de edi¸c˜ao dos programas. Um assembla- dor t˜ao bom como o anterior mas de dom´ınio p´ublico, dispon´ıvel em fonte para Windows e para Linux, ´e o AS8051 (shop-pdp.kent.edu/ashtml/asxxxx.htm) utilizado no pacote SDCC – Small Device C Compiler – um compilador de C tamb´em de dom´ınio p´ublico (scdd.sourceforge.net). Nas aulas ser˜ao utilizadas as vers˜oes de demonstra¸c˜ao dos produtos da KEIL.

5.6.2 Alguns comandos do assemblador da KEIL

Indica¸c˜oes gerais

N˜ao h´a distin¸c˜ao entre mai´usculas e min´usculas. Qualquer texto precedido do car´acter ‘;’ ´e considerado coment´ario; um coment´ario prolonga-se sempre at´e ao fim da linha. O fim do c´odigo fonte ´e indicado pelo comandoEND; qualquer texto que apare¸cadepois desse comando ´e ignorado pelo assemblador.

Nomes simb´olicos e operadores simples

Uma das grandes vantagens de utilizar um assemblador ´e a possibilidade de poder definir nomes simb´olicos. Para as constantes essa defini¸c˜ao faz-se com os comandos EQU e DB e para as vari´aveis com o comando DS cuja sintaxe se depreende dos exemplos apresentados de seguida, adaptados de um programa para controlo de uma m´aquina de encher e empacotar garrafas:

; === Defini¸c~ao de Constantes =========================================

Garrafas EQU 12 ; N´umero de garrafas por caixa tempo equ 250 ; Tempo de engarrafamento (ms) V1 equ 8000h ; Endere¸co de E/S da v´alvula 1 V2 EQU V1+1 ; Endere¸co de E/S da v´alvula 2 V3 EQU V1+2 ; Endere¸co de E/S da v´alvula 3 init equ 10011010b ; Comando de inicializa¸c~ao

prompt equ ’>’ ; C´odigo ASCII do prompt do sistema CR EQU 0Ah ; Carriage return (ASCII)

LF EQU 0Dh ; Line feed (ASCII)

; === Mensagens do sistema ============================================

Pin: DB CR,LF,"Introduza o seu PIN: " ; Reserva e preenche MP

; === Vari´aveis =======================================================

Contador: DS 1 ; Reserva um byte em MD Total: DS 2 ; Reserva dois bytes em MD

(9)

5.6. O ASSEMBLADOR 9 O comando DS apenas reserva espa¸co enquanto que o comando DB reserva e preenche; note-se a necessidade de ‘:’ nestes comandos. A diferen¸ca entre DB eEQU´e que o primeiro n˜ao gera qualquer c´odigo m´aquina enquanto o segundo preenche a mem´oria com os valores indicados.

A defini¸c˜ao de nomes simb´olicos para endere¸cos de programa ´e feita implicita- mente ao colocar uma etiqueta antes da instru¸c˜ao que se quer referenciar:

mov cont,#100 ; Valor inicial do contador loop: dec cont ; Decrementa

mov a,cont

jnz loop ; Repete enquanto A n~ao for zero

Segmentos

Ao programar emassembly o programador pode escolher os endere¸cos onde fi- car´a o programa e onde ficar˜ao os dados. Para isso ´e necess´ario definir segmentos de mem´oria. Os segmentos podem ser absolutos ou recoloc´aveis. Os primeiros ser˜ao utilizados desde j´a enquanto que os segundos s´o nas pr´oximas aulas.

Um segmento absoluto ´e uma zona de mem´oria com endere¸co inicial fixo. S˜ao definidos recorrendo, entre outros, aos comandosCSEG(para segmentos em me- m´oria de programa) e DSEG(para segmentos em mem´oria de dados interna). A sintaxe destes comandos depreende-se do exemplo apresentado:

; === Vari´aveis ========================================================

DSEG AT 40h ; Segmento em MDI com in´ıcio em 40h total: DS 2 ; Reserva dois bytes

contador: DS 1 ; Reserva um byte

; === Programa principal ===============================================

CSEG AT 0000h ; Segmento em MP com in´ıcio em 0000h .

. .

; --- Rotinas de E/S --- CSEG AT 007Fh ; Segmento em MP com in´ıcio em 007Fh .

. .

; === Mensagens do sistema =============================================

CSEG AT 0100h ; Segmento no endere¸co 0100h da MP Pin: DB CR,LF,"Introduza o seu PIN: " ; Preenche 23 bytes

No exemplo apresentado, a vari´aveltotal ocupar´a os endere¸cos 40h e 41h da mem´oria de dados e a vari´avelcontadorocupar´a o endere¸co 42h. O programa principal come¸ca no endere¸co 0000h da mem´oria de programas e h´a um conjunto de rotinas que ocupam uma zona com in´ıcio em 007Fh da mem´oria de programas.

No endere¸co 0100h da mem´oria de programas come¸cam as mensagens do sistema.

(10)

5.6.3 Formato das listagens

O assemblador da KEIL permite definir v´arios parˆametros de formata¸c˜ao para as listagens que gera. Se nada for dito em contr´ario, as listagens s˜ao formatadas de modo a evidenciar o endere¸co de mem´oria em que cada instru¸c˜ao come¸ca e os c´odigos gerados para cada instru¸c˜ao. Mais uma vez um exemplo ´e elucidativo:

LOC OBJ LINE SOURCE

---- 1 dseg at 40h

0040 2 cont: ds 1

3

---- 4 cseg at 0

0000 754064 5 mov cont,#100

0003 1540 6 loop: dec cont

0005 E540 7 mov a,cont

0007 70FA 8 jnz loop

9

10 end

Examinando a 1a coluna da listagem (endere¸cos) facilmente se percebe que a vari´avelcont(linha 2) ficou colocada no endere¸co 40h e examinando a 2acoluna (c´odigos gerados) facilmente se vˆe que a primeira instru¸c˜ao (linha 5) gerou trˆes bytes – o primeiro ´e o c´odigo da instru¸c˜ao propriamente dita, o segundo o endere¸co da vari´avel (40h) e o terceiro o valor que nela ´e colocado (64h=100).

5.7 Problemas

A ´unica maneira de aprender a programar em assembly ´e escrever programas em assembly! Apresentam-se de seguida alguns problemas b´asicos que podem ser resolvidos recorrendo a instru¸c˜oes aritm´eticas, l´ogicas e de movimenta¸c˜ao de dados. Dever´a ter sempre `a m˜ao o resumo das instru¸c˜oes.

1. Quais as sequˆencias de instru¸c˜oes necess´arias para efectuar as seguintes opera¸c˜oes:

(a) Copiar o conte´udo do registoR5 paraR3. ( e qu arar rep

´ ei mp oss´ı ve lc opiar dire cta me ntede um reg isto par aou

tro )

(b) Trocar entre si os conte´udos dos registosR5 eR3 sem estragar mais nenhum registo. ( h xc ¸ c˜ao tru ins ara liz uti )

2. Apresente programas que, de dois modos diferentes, neguem o conte´udo da vari´avelmontante guardada em mem´oria de dados interna no endere¸co 50. Em ambos os casos o resultado deve ficar na vari´aveljusante guar- dada no endere¸co seguinte. Para cada caso considere duas alternativas:

(a) ´E necess´ario preservar a vari´avelmontante.

(b) N˜ao ´e necess´ario preservar a vari´avelmontante.

(11)

5.7. PROBLEMAS 11

( om Rc XO a¸ c˜ao oper ma ru aze uf oro val eo ntar-s me ple com pode

am

´ asc ara FF

h )

3. Traduza `a m˜ao, para c´odigo m´aquina, as solu¸c˜oes do problema anterior.

4. Apresente trˆes modos diferentes de multiplicar por 2 o valor da vari´avelve- locidadeguardada em mem´oria de dados interna num endere¸co `a escolha.

( it mb deu ota¸ c˜ao ar um er faz s, ordoi arp plic lti mu ia, ´ opr ipr as ionar adic

` ae sq ue

rda. )

5. Considerando quemem[ ]representa a mem´oria de dados interna, escreva programas para efectuar as seguintes opera¸c˜oes:

(a) mem[22] = mem[21] – mem[20].

(b) mem[21] = 3 ×mem[20], supondo quemem[20] ´e inferior a 86.

Porquˆe?

6. Sabendo que a vari´avel minutos pode variar entre 0 e 200, escreva um programa para efectuar a opera¸c˜aosegundos =60 × minutos, consi- derando que as vari´aveis:

(a) est˜ao guardadas em endere¸cos de mem´oria de dados interna `a escolha;

(b) est˜ao guardadas em endere¸cos de mem´oria de dados externa:

i. inferiores a 100h;

ii. superiores ou iguais a 100h.

Nos problemas seguintes, as vari´aveis s˜ao guardadas em endere¸cos de mem´oria de dados interna `a escolha.

7. Escreva um programa que calcule x = x + y para vari´aveis de 16 bits.

8. Escreva um programa que calculex = x2 considerando um valor inicial dex inferior a 256.

9. Escreva um programa que calculex = – x (complemento para 2) consi- derando que:

(a) x ´e de 8 bits (b) x ´e de 16 bits

10. Escreva um programa que copie os 4 bits mais significativos dex para os 4 bits menos significativos de y, considerando que s˜ao vari´aveis de 8 bits.

Os 4 bits mais significativos dey devem ser colocados a zero.

11. Considere quetemptotcont´em a soma das medi¸c˜oes de temperatura efec- tuadas em 16 pontos diferentes de uma estufa. Apresente 3 modos diferen- tes de calcular a temperatura m´edia no interior da estufa. Suponha que est´a a trabalhar com vari´aveis de 8 bits e o resultado ´e guardado emtemp- med. ( s etade asm ocar outr its ob uatr taq rei ` adi rodar or16, rp idi div ).

(12)

5.8 Algumas resolu¸ c˜ oes

A t´ıtulo excepcional, por ser a primeira vez que se resolvem problemas deste tipo, apresentam-se algumas solu¸c˜oes completas.

LOC OBJ LINE SOURCE

1 ;======================================================================

2 ; Poss´ıveis resolu¸c~oes para alguns dos problemas

3 ;======================================================================

8

9 ;-[1.b]---

0002 CD 10 xch a,r5 ; Estraga acc mas acaba

0003 CB 11 xch a,r3 ; por recuperar o

0004 CD 12 xch a,r5 ; seu valor inicial

15

16 ;-[2.a]--- 00FF 17 mask equ 11111111b ; Negar todos os bits...

18

---- 19 dseg at 50

0032 20 montante: ds 1

0033 21 jusante: ds 1

22

---- 23 cseg at 0

0000 E532 24 mov a,montante ; Extrai valor

0002 F4 25 cpl a ; Complementa

0003 F533 26 mov jusante,a ; Guarda resultado

27

0005 853233 28 mov jusante,montante ; Copia

0008 6333FF 29 xrl jusante,#mask ; Complementa

31

32 ;-[4 (parcial)]---

---- 33 dseg at 60

003C 34 velocidade: ds 1

35

---- 36 cseg at 100h

0100 E53C 37 mov a,velocidade

0102 253C 38 add a,velocidade

0104 F53C 39 mov velocidade,a

40

0106 E53C 41 mov a,velocidade

0108 C3 42 clr c

0109 33 43 rlc a

010A F53C 44 mov velocidade,a

46

47 ;-[5.a]---

010C E515 48 mov a,21

010E C3 49 clr c

010F 9514 50 subb a,20

0111 F516 51 mov 22,a

52

53 ;-[5.b]---

0113 E514 54 mov a,20

0115 75F003 55 mov b,#3

0118 A4 56 mul ab

0119 F515 57 mov 21,a

58 59

60 ;-[6 (parcial)]---

---- 61 dseg at 70

0046 62 segundos: ds 2

0048 63 minutos: ds 1

64

---- 65 cseg at 200h

0200 E548 66 mov a,minutos

0202 75F03C 67 mov b,#60

0205 A4 68 mul ab

0206 F546 69 mov segundos,a

0208 85F047 70 mov segundos+1,b

72

73 ;-[7]---

(13)

5.8. ALGUMAS RESOLU ¸C ˜OES 13

74 vars segment data 75 prog segment code 76

---- 77 rseg vars

0000 78 x: ds 2

0002 79 y: ds 2

80

---- 81 rseg prog

0000 E500 F 82 mov a,x

0002 2500 F 83 add a,y

0004 F500 F 84 mov x,a

0006 E500 F 85 mov a,x+1

0008 3500 F 86 addc a,y+1

000A F500 F 87 mov x+1,a

88

89 ;-[8]---

000C E500 F 90 mov a,x

000E 8500F0 F 91 mov b,x

0011 A4 92 mul ab

0012 F500 F 93 mov x,a

0014 85F000 F 94 mov x+1,b

96

97 ;-[9.a]---

0017 E500 F 98 mov a,x

0019 F4 99 cpl a

001A 2401 100 add a,#1

001C F500 F 101 mov x,a

103

104 ;-[9.b]---

001E E500 F 105 mov a,x

0020 F4 106 cpl a

0021 2401 107 add a,#1

0023 F500 F 108 mov x,a

0025 E500 F 109 mov a,x+1

0027 F4 110 cpl a

0028 3400 111 addc a,#0

002A F500 F 112 mov x+1,a

114

115 ;-[10]---

002C E500 F 116 mov a,x

002E C4 117 swap a

002F 540F 118 anl a,#00001111b

0031 F500 F 119 mov y,a

121

122 ;-[11]--- 123 valores segment data

124 rotinas segment code 125

---- 126 rseg valores

0000 127 temptot: ds 1

0001 128 tempmed: ds 1

129

---- 130 rseg rotinas

0000 E500 F 131 mov a,temptot

0002 75F010 132 mov b,#16

0005 84 133 div ab

0006 F500 F 134 mov tempmed,a

135

0008 E500 F 136 mov a,temptot

000A 54F0 137 anl a,#11110000b

000C 03 138 rr a

000D 03 139 rr a

000E 03 140 rr a

000F 03 141 rr a

0010 F500 F 142 mov tempmed,a

143

0012 E500 F 144 mov a,temptot

0014 C4 145 swap a

0015 540F 146 anl a,#00001111b

0017 F500 F 147 mov tempmed,a

148

149 end

(14)
(15)

Referˆ encias

[1] Philips semiconductors; 80C51 family programmer’s guide and instruction set; Setembro de 1997.

[2] Ferreira, Jos´e Manuel;Resumo das instru¸c˜oes do 80C51; FEUP, Setembro de 2000.

[3] Atmel Wireless and Microcontrollers;89C51 data sheet; Setembro de 1999.

[4] Ferreira, Jos´e Manuel;Introdu¸c˜ao ao Projecto com Sistemas Digitais e Mi-

crocontroladores; FEUP Edi¸c˜oes, 1998, ISBM 972-752-032-4.

15

Referências

Documentos relacionados

resultou em uma investigação sobre a legislação vigente no que diz respeito aos direitos e garantias de homossexuais, para verificar se o país é considerado tolerante ou não e se

Tipo, se você está casado lá nos Estados Unidos, isso quer dizer que você já teve casamento na igreja, que é casamento para a vida, com certeza, você tem super ações e

Chora Peito Chora Joao Bosco e Vinicius 000 / 001.. Chão De Giz Camila e

Estas taxas de crescimento estão entre os maiores valores encontrados para esta espécie, evidenciando a potencialidade que a população apresenta para desenvolver

Equipamentos de emergência imediatamente acessíveis, com instruções de utilização. Assegurar-se que os lava- olhos e os chuveiros de segurança estejam próximos ao local de

Após retirar, da maré observada, o valor da maré teórica, aplicou-se uma linha de tendência aos dados resultantes, a qual representa a variação do nível médio das águas no

Como irá trabalhar com JavaServer Faces voltado para um container compatível com a tecnologia Java EE 5, você deverá baixar a versão JSF 1.2, a utilizada nesse tutorial.. Ao baixar

2. Assim, e competindo aos Serviços de Fiscalização no âmbito de análise interna ou externa o controlo da matéria colectável, determinada com base em declaração