Você está na página 1de 45

Introduo aos Computadores ca Notas e Exerc cios

Ana Paula Toms a Nelma Moreira


Departamento de Cincia de Computadores e Faculdade de Cincias, Universidade do Porto e email: {apt,nam}@ncc.up.pt

1996

Conte do u
1 Linguagem Assembly do MC68000 1.1 MC68000 generalidades . . . . . . . . . . . . . . . . . . . 1.2 Programao do MC68000 . . . . . . . . . . . . . . . . . . . . ca 1.2.1 Registos Programveis do MC68000 . . . . . . . . . . . a 1.2.2 Organizao da Memria . . . . . . . . . . . . . . . . . ca o 1.2.3 Modos de Endereamento . . . . . . . . . . . . . . . . c 1.2.4 Formato das Instrues em Assembly 68000 . . . . . . co 1.3 Instrues do MC68000 . . . . . . . . . . . . . . . . . . . . . . co 1.3.1 Instrues para Transferncia de Dados . . . . . . . . . co e 1.3.2 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Operaes Aritmticas . . . . . . . . . . . . . . . . . . co e 1.3.4 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5 Registo de Condies CCR (Condition Code Register) co 1.3.6 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.7 Instrues de Comparao e Teste . . . . . . . . . . . . co ca 1.3.8 Instrues de Transferncia de Controlo . . . . . . . . . co e 1.3.9 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.10 Instrues Condicionais e Aritmticas . . . . . . . . . . co e 1.3.11 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.12 Subprogramas ou Subrotinas . . . . . . . . . . . . . . . 1.3.13 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.14 Operaes Lgicas e para Manipular um bit . . . . . . co o 1.3.15 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.16 Processos Recursivos . . . . . . . . . . . . . . . . . . . 1.3.17 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.18 Estruturas de Dados . . . . . . . . . . . . . . . . . . . 1.3.19 Exerc cios Vrios . . . . . . . . . . . . . . . . . . . . . a 4 4 7 7 8 10 11 13 13 14 16 21 22 23 24 24 25 27 28 29 31 32 36 37 38 39 41

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

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

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

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

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

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

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

Dep. Cincia de Computadores Introduo aos Computadores e ca

Lista de Figuras
1.1 1.2 1.3 1.4 1.5 1.6 Soma de vectores . . . . . . . . . . . . . . . . . . . . . . . . . Somas parcelares . . . . . . . . . . . . . . . . . . . . . . . . . Rotao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Interlaar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c Uso da Pilha de Sistema durante a chamada a uma subrotina . Operaes de Deslocamento e Rotao . . . . . . . . . . . . . co ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 22 26 26 31 35

Dep. Cincia de Computadores Introduo aos Computadores e ca

Lista de Tabelas
1.1 1.2 1.3 1.4 Registos Programveis do MC68000 . a Instrues de Adico e Subtraco . co ca ca Registos do CCR . . . . . . . . . . . Instrues Condicionais e Aritmticas co e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 19 23 27

Dep. Cincia de Computadores Introduo aos Computadores e ca

Cap tulo 1 Linguagem Assembly do MC68000


1.1 MC68000 generalidades

Bibliograa: T. L. Harman, B. Lawson, The Motorola MC68000 Microprocessor Family - Assembly Language, Interface Design, and System Design, Prentice-Hall, 1985 MC68000 como circuito integrado O microprocessador MC68000 constitu por aproximadamente 68000 componentes e do integradas numa unica pea (chip) de silicone, sendo por isso um produto VLSI (very c large scale integration). O chip tem cerca de 246 280 103 polegadas, ou seja cerca de 68000 106 polegadas2 de rea, e por coincidncia tambm contm cerca de 68000 a e e e trans stores. Um grande rea de ROM no chip usada para guardar microcdigo que controla os a e o circuitos para execuo das instrues mquina. ca co a A tecnologia do MC68000 HMOS (high-density metal-oxide-semiconductor). O tae manho dos elementos reduzido (relativamente ` tecnologia MOS) permitindo aumentar e a a velocidade e reduzir o consumo de energia de cada trans stor no CPU. O processador Como em muitos microprocessadores, no MC68000 as operaes ao n co vel dos circuitos so controladas por uma sequncia de instrues microprogramadas e guardadas em a e co duas seces de ROM no chip do CPU. Quando as instrues em linguagem mquina so co co a a carregadas da memria externa e descodicadas, determinam a execuo dum microproo ca grama. Este microprograma controla toda a actividade nas linhas de sinais e todas as transferncias de dados ou operaes dentro do CPU durante a execuo da instruo. e co ca ca Como o microcdigo no pode ser modicado excepto por criao dum novo chip com o a ca outro microcdigo, o utilizador raramente se interessa pelos detalhes das operaes do proo co cessador a este n vel. No entanto, para determinar exactamente o que o processador est a a fazer em resposta a uma instruo necessrio compreender o microcdigo. ca e a o Microprocessadores como o MC68000 so incorporados em sistemas de computadores a para controlar toda operao do sistema. Este processadores podem gerir a actividade ca

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.1.

MC68000 GENERALIDADES

do sistema, executando programas e as funes de input/output necessrias. Mais ainda, co a separam o processamento em dois modos ou estados supervisor e utilizador, permitem administrao e proteco de memria, e detectam vrios tipos de erros. Os processadores ca ca o a anteriores (classe de 8-bits) no tinham em geral estas capacidades. O MC68000 pertence a a ` classe dos processadores de 16 bits. Do ponto de vista de programao, os processadores de 16 bits oferecem um conjunto ca geral e potente de instrues assim como diversos modos de referir o operando em memria co o (modos de endereamento). Muitos destes processadores suportam tcnicas especiais de c e programao e ajudas ` deteco de erros (debugging). ca a ca A interaco entre o processador e as outras componentes de hardware (equipamento) ca do sistema efectua-se pelo bus do sistema, onde ocorrem transferncias de sinais de cone trolo, endereos e dados. c A capacidade e exibilidade do processador neste aspecto determinada pelas funes e co das linhas de sinal. Por exemplo, capacidades sosticadas de I/O (input/output) e de interrupo obviam a necessidade de bastante hardware especializado, simplicando o sisca tema. Uma interrupo determinada por um sinal exterior ao microcomputador, que ca e causa uma transferncia de controlo do programa em execuo para um programa espee ca cial que responder ao pedido. Depois de processar a interrupo, o controlo regressa ao a ca programa que foi interrompido. Em geral os processadores de 16 bits fornecem o estado do processador e outras informaes aos circuitos externos ` medida que o processador vai trabalhando, caracter co a stica que permite simplicar o hardware. O sistema O designer do sistema preocupa-se com o funcionamento geral do sistema, incluindo a sua performance e abilidade. Determina tambm o uso da memria e a forma como esto e o a protegidas as reas de memria ocupadas pelo sistema de operao. Esta proteco vital a o ca ca e se o sistema for usado para desenvolver software, no qual possam ocorrer por exemplo erros de endereamento, ou programas que saem fora dos limites. c Quando vrios perifricos esto ligados ao sistema, o planeamento da poro de I/O a e a ca e deveras importante para assegurar uma coordenao apropriada entre programas e hardca ware durante as transferncias de dados. O MC68000 dispe de dois modos de execuo e o ca modo supervisor e modo utilizador que permitem evitar que erros de aplicaes co afectem o funcionamento geral do sistema de operao. Como seria de esperar, o sistema ca de operao executado em modo supervisor, incluindo todas as rotinas para efectuar ca e I/O e interrupes. Tipicamente, as aplicaes correm em modo utilizador. Neste modo, co co algumas das instrues e reas de memria sero inacess co a o a veis. A atribuio do modo dos ca vrios programas feita pelo designer de sistema, e as transies entre os dois modos so a e co a cuidadosamente controladas. O designer do sistema especica o nmero e tipo de perifricos necessrios a uma tarefa. u e a O design do subsistema de I/O torna-se complicado quando muitos dispositivos esto a ligados, uma vez que unidades diferentes podem demorar intervalos de tempo diferentes para completar as transferncias de dados pedidas. Devido a estas variaes, o sistema e co

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.1.

MC68000 GENERALIDADES

permite normalmente que os perifricos enviem interrupes atravs de linhas de sinais de e co e controlo da interface para o CPU. Um pedido enviado quando o dispositivo se encontra e preparado para receber ou transmitir dados ou quando uma condio de erro detectada. ca e

Programao em linguagem de Assemblador ca A facilidade do desenvolvimento (escrita, correco e teste) dum programa em linguaca gem de assemblador depende mais das caracter sticas do processador, do que do desenvolvimento de software. Editores, assembladores, e outras ajudas ao desenvolvimento variam em qualidade e ecincia, mas um bom sistema de desenvolvimento no substitui um processador inadee a quado. Os processadores da classe MC68000 so apropriados para a maioria das aplicaes a co por disporem dum conjunto potente de instrues, numerosos modos de endereamento e co c caracter sticas especiais. O termo Arquitectura do Computador por vezes usado para refee rir o conjunto de caracter sticas do computador que so importantes para o programador. a Uma descrio da arquitectura inclui uma denio da organizao global do sistema assim ca ca ca como uma descrio completa das caracter ca sticas de programao do CPU. O conjunto de ca instrues do processador e os modos de endereamento constituem dois dos tpicos mais co c o importantes desta descrio. ca O conjunto de instrues dum microprocessador a coleco de instrues dispon co e ca co veis para o programador. Cada instruo pode ser descrita pela sua operao ou funo, e pelo ca ca ca nmero e tipo dos seus operandos. u O MC68000 tem um conjunto de instrues aritmticas razoavelmente completo. Os co e processadores anteriores (de 8-bits), no tinham instrues de diviso e multiplicao. Isto a co a ca permite simplicar a programao e aumentar a velocidade de execuo dos programas. O ca ca MC68000 pode efectuar operaes sobre operandos considerados com 8 bits, 16 bits ou 32 co bits. Normalmente, os processadores de 8-bits permitiam operandos apenas de 8 bits. Os endereos para operandos guardados em memria podem ser indicados na instruo c o ca por inteiros de 24 bits. Este mtodo de endereamento directo diz-se endereamento absoe c c luto. So poss a veis outras formas de endereamento, designando-se em geral por modos de c endereamento. Por exemplo, no MC68000 existem 14 modos de endereamento distintos. c c Assim, as instrues de MC68000 devem indicar, alm da operao a fazer, o modo de co e ca endereamento usado para referir o endereo do operando. Quando a instruo execuc c ca e tada, o CPU calcula um endereo absoluto, que neste contexto ser designado por endereo c a c efectivo Quando analisado em termos de variedade de modos de endereamento, o sistema c MC68000 mais parecido com um computador grande do que com um microcomputador, e uma vez que os microprocessadores anteriores tinham normalmente poucas capacidades de endereamento. Por exemplo, vrios tipos de estruturas de dados, como listas e vectores, c a podem ser facilmente criadas em memria usando os modos de endereamento do MC68000. o c A modularizao de programas uma boa tcnica de programao que facilita a deca e e ca teco de erros e o teste. Cada mdulo implementa uma subtarefa, e o programa completo ca o junta os diversos mdulos. O MC68000 tem algumas instrues que suportam a proo co

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.2. PROGRAMACAO DO MC68000

gramao modular, incluindo instrues para chamada de subprogramas (mdulos). ca co o O MC68000 tem algumas caracter sticas que ajudam ` deteco de erros em programas. a ca Quando uma instruo que causa um erro executada ocorre um Trap. Por exemplo, ca e uma instruo ilegal, uma tentativa para dividir por zero, causam um trap. Alguns ca erros de endereamento e condies aritmticas podem tambm provocar trap. Nesse caso, c co e e o controlo passa a uma subrotina do sistema de operao que procede de acordo com o ca tipo de erro detectado. E guardada informao sobre o estado do processador e o endereo ca c da instruo ofensiva, para facilitar o diagnstico do problema. ca o As instrues que o processador executa esto em memria codicadas em linguagem co a o mquina. Estas instrues podem ser escritas por um programador que escreve directaa co mente as sequncias em binrio. Em geral um programador de assembler no trabalha e a a directamente com linguagem mquina. No entanto, um conhecimento sobre o formato das a instrues mquina pode ser necessrio para a compreenso das capacidades do processaco a a a dor.

1.2
1.2.1

Programao do MC68000 ca
Registos Programveis do MC68000 a

O CPU contm um grande nmero de posies de memria especiais registos formadas e u co o por um ou mais elementos (cada um dos quais podendo guardar um bit de informao). A ca capacidade (length) de um registo o nmero de bits que podem ser lidos ou guardae u dos simultaneamente no registo. A maior parte dos registos do CPU guardam informao ca espec ca necessria ` execuo de instrues no estando dispon a a ca co a veis para o programador. Existem registos (em nmero reduzido) que podem ser programados registos prou gramveis. a No MC68000 os registos programveis dividem-se em registos de uso geral (utilizados a para guardar endereos ou dados manipulados por uma instruo), registo de sequncia c ca e do programa (program counter; 32 bits; guarda o endereo da prxima instruo a ser c o ca executada), registo estado (status register; 16 bits; indica o estado do processador e d a informao sobre resultados de operaes aritmticas ou similares). ca co e No MC68000 existem 17 registos de uso geral: 8 registos de dados (data registers) e 9 registos de endereo (address registers). A velocidade de execuo de um programa c ca aumenta se se usar os registos como operandos pois o acesso a posies de memria ou a co o perifricos normalmente mais demorado. e e Registos de Dados Podem ser usados para guardar (e aceder a) 8 bits, 16 bits, ou 32 bits de informao, ca podendo ainda manipular-se apenas um bit. So, por exemplo, operandos em algumas a instrues aritmticas. Quando o seu contedo o operando efectivo numa dada instruo, co e u e ca toma-se o byte menos signicativo (bits 0 a 7; bit 7 indica o sinal do valor) para operando

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.2. PROGRAMACAO DO MC68000

de 8 bits, os 2 bytes menos signicativos (bits 0 a 15; bit 15 indica sinal) para operando de 16 bits, e o valor completo (bits 0 a 32) quando de 32 bits. e

Registos de Endereo c Contm endereos de posies de memria. Pode-se aceder aos 16 bits menos signicativos e c co o ou ao contedo integral (32 bits) do registo. Apenas os 24 bits menos signicativos so u a usados para representar um endereo (por restrio do nmero de linhas de endereo no c ca u c BUS). O registo A7 contm o endereo do topo da pilha do sistema. Como o processador e c pode funcionar em dois modos distintos (user e supervisor) o registo A7 (por vezes tambm e denotado por SP) pode apontar duas pilhas: em modo utilizador ser USP (user stack a pointer) e em modo supervisor SSP (supervisor stack pointer). Os elementos da pilha do sistema no MC68000 so de 16 bits. O registo A7 aponta o ultimo elemento colocado. a Pode-se retirar ou colocar um elemento no topo da pilha (processo LIFO last in rst out). Os elementos esto colocados em posies de endereos decrescentes (topo o elemento de a co c e menor endereo). c A Tabela 1.1 sumariza os registos programveis do MC68000. a

1.2.2

Organizao da Memria ca o

A memria um conjunto de posies de 8 bits organizadas em palavras. No sentido o e co usado na bibliograa do MC68000 uma palavra um conjunto de 16 bits com endereo e c par. O processador pode aceder a cada uma das posies (8 bits). Cada instruo em co ca memria sempre um grupo destas palavras, assim como os operandos de 16 bits e de 32 o e bits, tendo por isso endereos pares. c Dos 16 MB endereveis (000000 a FFFFFF), 1024 (1KB) bytes esto reservados ca a contendo endereos de instrues iniciais de subprogramas do sistema de operao. c co ca Quando um valor de 16 bits guardado em memria (numa palavra) o byte mais e o signicativo do valor guardado na posio de endereo menor. Do mesmo modo, se um e ca c valor de 32 bits guardado como palavra longa a partir de uma posio de endereo E, e ca c ento o byte mais signicativo ocupa a posio E e o menos signicativo a posio E + 3 a ca ca .

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.2. PROGRAMACAO DO MC68000

31 16

31 16

31 0

Tabela 1.1: Registos Programveis do MC68000 a 15 7 8 0 D0 D1 D2 D3 D4 8 data registers D5 D6 D7 15 0 A0 A1 A2 7 address registers A3 A4 A5 A6 A7(USP) user stack pointer A7(SSP) supervisor stack pointer PC CCR SR program counter status register

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.2. PROGRAMACAO DO MC68000

10

LongWord 000000

LongWord 000004

Word 000000 Byte 000000 Byte Word 000002 Byte 000002 Byte Word 000004 Byte 000004 Byte Word 000006 Byte 000006 Byte . . . . . .

000001 LongWord 000002 000003 000005 LongWord 000006 000007

Word FFFFFE Byte FFFFFE Byte FFFFFF

Long Word x

Byte x Byte x + 2

Byte x + 1 Byte x + 3

Word x palavra mais signicativa Word x + 2 palavra menos signicativa

1.2.3

Modos de Endereamento c

O microprocessador MC68000 permite 14 modos de endereamento diferentes: c 1. Literal (ou Imediato) (Immediate Data Addressing): O operando efectivo o e operando codicado. Sintaxe: #n. Exemplo: MOVE.B #3,D0 2. Directo com Registo (Register Direct Addressing): O operando efectivo o contedo e u do registo de dados ou de endereo indicado (tomado com o tamanho especicado c na operao). Sintaxe: Dn ou An. Exemplos: CLR.B D3 ou o segundo operando em ca MOVE.B #3,D0. 3. Directo dando o endereo efectivo (Absolute data Addressing): O operando c codicado o endereo da palavra de memria que contm o operando efectivo. O e c o e operando codicado um endereo em 16 (endereo curto; absolute short) ou 32 e c c bits (endereo longo; absolute long). Um endereo curto sempre extendido (a 24 c c e bits, prolongando o sinal) antes de ser usado: endereos 0 a 7FFF correspondem `s c a posies 000000 a 007FFF; mas os endereos 8000 a FFFF so interpretados como co c a FF8000 a FFFFFF. Uma instruo mquina em que se usou endereo curto ocupa ca a c menos 16 bits do que uma idntica mas que usa o longo. e NB: O prolongamento do sinal signica que o bit mais signicativo da representao ca (16 bits) do endereo curto usado para obter a representao em 24 bits. Os c e ca endereos so valores sem sinal. Exemplos: CLR.B $1001 (Como se descreve mais ` c a a frente $ indica ao assemblador que a constante 1001 um hexadecimal). e 4. Indirecto (Indirect Addressing): Sempre com registo de endereo. c

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.2. PROGRAMACAO DO MC68000

11

(a) Indirecto com registo de endereo (Address Register Indirect). Sintaxe: c (An). O operando efectivo encontra-se na posio apontada por An (ou seja, na ca posio de memria cujo endereo o contedo de An). Exemplo: CLR.B (A0) ca o c e u (b) Indirecto com ps-incremento do conte do do registo de endereo o u c (Indirect with postincrement). Sintaxe: (An)+. O operando efectivo encontrase na posio apontada por An, e o valor de An depois incrementado de ca e 1, 2 ou 4 unidades conforme o operando seja byte, palavra ou palavra longa, respectivamente. Exemplo: CLR.B (A0)+ (c) Indirecto com pr-decremento do conte do do registo de endereo e u c (Indirect with predecrement). Sintaxe: -(An). O contedo do registo An decreu mentado de 1, 2 ou 4 unidades conforme o operando seja byte, palavra ou palavra longa. O novo contedo de An o endereo do operando efectivo. Exemplo: u e c CLR.B -(A2) (d) Indirecto com deslocamento (Indirect with displacement). Sintaxe: d16 (An) onde d16 um inteiro com sinal e em 16 bits. O endereo efectivo obtido e c e somando o contedo em An com o valor d16 depois de prolongar esse valor a 32 u bits. O contedo de An no alterado. Exemplo: CLR.B 2(A0). u a e (e) Indirecto com ndice (Indirect with index). Sintaxe: d8 (An,Ri) em que Ri designa um registo de endereo ou de dados, e d8 um inteiro com sinal e em c e 8 bits. O endereo efectivo obtido somando o contedo em An com o valor c e u d8 depois de prolongar esse valor a 32 bits, e com o contedo do registo Ri. Os u contedos de An e Ri no so alterados. Exemplos: em CLR.B -2(A0,D0.W) u a a apenas a palavra menos signicativa de D0 tomada; em CLR.B -2(A0,D0.L) e adicionado o valor correspondente aos 32 bits para determinar o endereo e c operando efectivo. 5. Relativo(Relative Addressing): Modo indirecto utilizando o registo de sequncia do e programa. Sintaxe: d16 (PC) e d8 (PC,Ri). 6. Impl cito (Implied Addressing): uso impl cito de registos SR, USP, SP, ou PC por certas instrues (exemplos: saltos, chamadas de subprogramas). co

1.2.4

Formato das Instrues em Assembly 68000 co

Qualquer instruo constitu por 4 campos: endereo de instruo (label), mnemnica ca e da c ca o de operao, operandos e comentrios. Estes campos so separados por espaos e podem ca a a c estar vazios. Por exemplo, inicio MOVE.W D1,D2 ;guardar valor de D1 endereo mnemnica e c o operandos comentrio a tamanho do(s) operando(s)

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.2. PROGRAMACAO DO MC68000

12

O primeiro campo, que contm o endereo da instruo, na maior parte das inse c ca e trues opcional; muitas vezes um endereo simblico (label), como por exemplo co e c o inicio. O segundo campo tem que conter a mnemnica de uma instruo ou para o processao ca dor ou para o assemblador, como por exemplo MOVE. Se a instruo tiver operandos ca que possam ser tomados com vrios comprimentos (Byte, Word, ou Long word), o a considerado ser indicado a seguir ` mnemnica estando separado dela por um ponto, a a o como em MOVE.W. A instruo pode ter zero, um ou dois operandos, sendo no ultimo caso separados ca por uma v rgula, sem qualquer espao de separao. c ca Quaisquer caracteres que ocorram depois dos operandos (separados deles por um espao ou ;) no so traduzidos pelo assemblador, constituindo um comentrio. Se c a a a uma instruo tiver na primeira coluna o caracter *, interpretada como uma linha ca e de comentrio. a Expresses (avaliadas pelo Assemblador) o Uma expresso uma combinao de s a e ca mbolos, constantes, operadores algbricos e e parentesis que pode ocorrer no campo de operandos da instruo e que avaliada pelo e ca e assemblador para determinar o endereo ou o valor de um operando. c Uma constante pode representar um nmero ou um caracter (ASCII). Uma constante u nmerica pode representar um valor inteiro decimal ou hexadecimal de 8 bits, 16 bits ou u 32 bits. Um hexadecimal precedido de um simbolo $. Para alguns assembladores, as e constantes octais so precedidas por @ e as binrias por %. Assim, %100, $64, @144, e a a %01100100 so representaes do mesmo inteiro em decimal, hexadecimal, octal e binrio a co a respectivamente. Um literal ASCII uma sequncia de caracteres (no mximo 4) entre , a qual e e a e reconhecida pelo assemblador e convertida no seu cdigo ASCII. Por exemplo, ao literal o ESTE so associados 4 bytes correspondendo a $45535445. a Os operadores +, -, *, / correspondendo a adio, subtraco, multiplicao e diviso ca ca ca a podem ser usados em expresses. O resultado de qualquer operao aritmtica um inteiro o ca e e de 32-bits. O operador - pode ser usado como operador unrio para denir nmeros negativos, como a u por exemplo na instruo MOVE.W #-1,D1. Esta equivalente a MOVE.W #$FFFF,D1 ca e sendo $FFFF a representao hexadecimal em complemento para 2 do valor -1 (tomado ca com 16 bits). Essa representao calculada pelo assemblador e guardada com a instruo ca e ca mquina. a Comandos para o Assemblador (Assembler Directives) No so instrues para o processador (isto , instrues executveis) mas para o asa a co e co a semblador. Podem servir para controlar o cdigo gerado, para denir s o mbolos, dados (constantes) e reservar espao na memria. Alguns exemplos: c o

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 END indica ao assemblador o m de texto do programa; no obrigatria a e o

13

DC.t (Dene Constant) t pode ser B, W, ou L; permite atribuir certos valores a posies co de memria. Exemplo: pela instruo dados DC.B 5,2,2,3 guarda-se os valores o ca 5, 2, 2, e 3 em quatro bytes cont guos na memria a partir da posio de endereo o ca c dados DS.t (Data Storage) t B, W, ou L; permite reservar posies de memria sendo os e co o seus contedos inicializados com zero. Por exemplo, qualquer das instrues seguintes u co reserva 8 bytes a partir da posio mem ca mem DS.B 8 mem DS.W 4 mem DS.L 2 EQU (Equate) Atribui o valor de uma certa expresso a um identicador ou s a mbolo (label). Por exemplo, pela instruo maxval EQU 100 qualquer ocorrncia no ca e programa do s mbolo maxval substituida pelo inteiro 100. Se uma constante e ocorre muitas vezes num programa, deve ser substituida por um s mbolo, pois se pretender alterar o valor da constante basta atribuir um novo valor ao s mbolo que a representa.

Est prevista a utilizao dum interpretador de Assembly 68000 e68k. a ca Aconselha-se a consulta do manual para informaes relativas ao formato das instrues, co co e directivas.

1.3
1.3.1

Instruoes do MC68000 c
Instrues para Transferncia de Dados co e

CLR (Clear an Operand) Coloca zero no operando efectivo EXG (Exchange Registers) Troca os contedos de dois registos u SWAP (Swap Register Halves) Troca os 16 bits menos signicativos de um registo de dados com os seus 16 bits mais signicativos MOVE (Move Data) Copia o contedo do operando origem para o operando destino u MOVEQ (Move Data Quick) Copia um dado imediato de at 8 bits para um registo e Dn, afectando os 32 bits do registo

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

14

MOVEM (Move Multiple Registers) Se o operando destino for o endereo de uma c posio de memria, copia os contedos de uma lista de registos (Dn e An) para ca o u posies de memria cont co o guas a partir da indicada. Se o operando destino for uma lista de registos, estes so carregados com os contedos de posies de memria a u co o cont guas sendo o endereo da primeira dado no primeiro operando. c E uma transferncia ordenada: comea pelos registos de dados D0 a D7 (se ocorrerem e c na lista) e termina com os de endereo A0 a A7 (se ocorrerem). Os elementos da c lista so separados por / como por exemplo em D0/A0. Quando se pretende referir a uma sequncia de registos do mesmo tipo e com nmeros consecutivos pode-se usar e u uma notao abreviada Ri-Rj por exemplo D4-D6. ca Exemplos: MOVEM.L D1/D4-D6/A4,(A7)
copia os contedos de D1, D4, D5, D6, e A4 para posies consecutivas a partir da u co de endereo dado em A7; Se em A7 tiver x, ento D1 colocado a partir de x, D4 de c a e x + 4, D5 de x + 8, . . . , A4 de x + 16. O valor em A7 no alterado. a e

MOVEM.L D1/D4-D6/A4,-(A7)
se em A7 tiver x, ento copia A4 para x 4, D6 para x 8, D5 para x 12, D4 para a x 16, e D1 para x 20. O valor em A7 passa a ser x 20. Quando o modo de endereamento indirecto com pr-decremento a ordem dos registos invertida. c e e e

MOVEM.L (A7)+, D1/D4-D6/A4


se em A7 tiver x, ento copia (x) para D1, (x + 4) para D4, (x + 8) para D5, (x + 12) a para D6, e (x + 16) para A4. Em A7 ca x + 20.

1.3.2

Exerc cios
(a) atribuir o valor 15 ao byte menos signicativo do registo D2; (b) atribuir o valor -35 ao byte menos signicativo do registo D2; (c) colocar o endereo longo aqui em A6; c (d) colocar o contedo da posio dado no byte menos signicativo de D6; u ca (e) Trocar o contedo dos registos D0 e D1 (.L) usando apenas uma posio de u ca memria auxiliar (p.ex.: $F110). o (f) Trocar as palavras (.W) nas posies de memria $E00 e $F00 usando apenas co o um registo temporrio. a (g) Inicializar 5 posies de memria (.W) com o valor $0 apartir do endereo co o c $F110. (h) colocar o contedo da palavra cujo endereo o contedo de A1, na palavra de u c e u endereo aqui; c

1. Escrever instrues assembly para: co

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

15

(i) colocar o contedo da palavra longa cujo endereo o contedo de A1 menos 4, u c e u na palavra longa de endereo aqui; c (j) copiar o contedo do byte menos signicativo de D3 para a posio de memria u ca o cujo endereo o contedo de A3 menos 11; c e u (k) copiar o contedo da palavra longa cujo endereo a soma do contedo de A3 u c e u com 250 para a posio cujo endereo dado por A5, incrementando A5 de ca c e forma a apontar a palavra longa seguinte; (l) colocar os valores de D3, D4, D5, A2, e A4 em cinco palavras longas cont guas supondo que o endereo da primeira dado por A6; c e (m) copiar os valores de 5 palavras longas cont guas para D3, D4, D5, A2, e A4 sendo o endereo da primeira dado por A6; c (n) copiar a palavra mais signicativa de D2 para a menos signicativa de D3; (o) copiar um valor de 64 bits que est colocado a partir do endereo VALOR1 a c para outro endereo VALOR2; c (p) colocar a sequncia de caracteres FIM a partir da posio mensg e ca 2. Rodar os contedos (.L) dos registos D1,D2, D3, D4 e D5 usando: u (a) apenas um registo auxiliar (p.ex.: D6). (b) usando a instruo EXG. ca 3. Copiar os ultimos 16 bits do registo D2 para os ultimos 16 bits do registo D5 sem alterar os primeiros 16 bits de nenhum deles. 4. Dadas duas posies de memria BYTE e PALAVRA, contendo, respectivamente, inteiros co o de 1 e 2 bytes, pretende-se copiar: (a) o inteiro em BYTE para PALAVRA; (b) o inteiro em PALAVRA para BYTE (eventualmente truncando o tamanho); (c) resolva o mesmo exerc cio, comeando por colocar os endereos BYTE e PALAVRA c c em A0 e A1, respectivamente. 5. Para cada um dos seguintes extractos de programa indique o signicado de cada instruo e (sempre oportuno!) simplique o programa. ca

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 a) MOVE.W #$FFFF,D0 SWAP D0 MOVE.W #$FFFF,D0 c) ah DS.B 6 MOVEM.L D0-D1,-(A7) MOVE.L #$41534349,D0 MOVE.W #$4921,D1 MOVE.L D0,ah MOVE.W D1,ah+4 MOVEM.L (A7)+,D0-D1 b) MOVE.B #$D0,D0 MOVEA.L #1000,A0 MOVE.B D0,(A0)

16

1.3.3

Operaes Aritmticas co e

Representao de inteiros Algumas notas ca Seja x um inteiro positivo que pode ser representado por m bits. Por denio, o compleca m mento para 2 de x o inteiro 2 x. A representao (em computador) mais comum para e ca um inteiro negativo x o complemento para 2 de x. Assim, por exemplo, numa repree sentao em 8 bits usando complemento para 2 o inteiro 3 o binrio correspondente a ca e a 8 2 3, ou seja 253 = 11111101. Num sistema de representao em m bits que permite denotar inteiros negativos (em ca complemento para 2) e no negativos metade das representaes so entendidas como a co a nmeros positivos e a outra metade como nmeros negativos. Assim, de 0 a 2m1 1 u u tem-se nmeros no negativos e de 2m1 a 2m 1 nmeros negativos. Usando a denio u a u ca m de complemento para 2, pode-se concluir que 2 1 representa 1 em complemento para 2, e que 2m1 representa 2m1 , pelo que os valores poss veis dos inteiros representveis a variam de 2m1 a 2m1 1. Exerc cio: Quais os inteiros que podem ser representados num sistema de complemento para 2 em 8, 16, e 32 bits? Uma vez que 2m x = (2m 1) x + 1, pode-se usar a seguinte regra prtica para a calcular o complemento para 2 de um inteiro positivo x: toma-se a representao em binrio ca a de x em m bits; troca-se nessa representao cada 1 por 0 e cada 0 por 1 (o que equivale a ca subtrair x de 2m 1) e ao resultado soma-se 1. (Nota: (2m 1) x diz-se o complemento para 1 de x) Por exemplo, para representar o inteiro 3 em 8 bits e complemento para 2, tomase 00000011 (binrio 3); efectua-se a troca indicada obtendo-se 11111100 e soma-se 1 a resultando 11111101. Exerc cio: Quais os inteiros representados em 8-bits e complemento para 2 por $F2, $4F, $A3, 10010000, 00000000, 10000000, $7F?

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 Adio e Subtraco binria de Inteiros no negativos ca ca a a

17

Adio: Segue algoritmo habitual de adio binria; se se tiver uma representao ca ca a ca m de m bits e a soma for superior a 2 1 (o maior inteiro positivo com m bits) diz-se que h transporte (carry); no MC68000 isso assinalado pelo registo C (toma valor a e 1) do registo de condies CCR, sendo uma indicao de que o valor calculado est co ca a errado. Por exemplo: o valor de C 1 depois de efectuar a soma em 8-bits dos e inteiros positivos 10010000 e 11111101, e o resultado 10001101 e Subtraco: Segue algoritmo habitual de subtraco binria; se o valor da diferena ca ca a c for inferior a zero, diz-se que h transporte (borrow); no MC68000 isso assinalado a e pelo registo C (toma valor 1) do registo de condies CCR, sendo indicao de que o co ca valor obtido est errado. Por exemplo: a diferena em 8-bits 10010000 11111101 = a c 10010011 (resultado errado) afecta o registo C colocando-o em 1. O resultado da soma ou diferena de inteiros no negativos (colocado no operando c a destino) est correcto se e s se o valor do registo C depois da operao for 0. a o ca Adio de Inteiros em Complemento para 2 ca Se os inteiros so no negativos, a soma calculada pelo algoritmo habitual. Se a reprea a e sentao tiver m bits e a soma for superior a 2m1 1 (o maior inteiro positivo com m ca bits num sistema de complemento para 2) diz-se que h overow; no MC68000 isso a e assinalado pelo registo V (toma valor 1) do registo de condies CCR, sendo indicao de co ca que o valor obtido est errado. a Por exemplo: a soma em 8-bits e complemento para 2 de 01111111 com 00000001 e 10000000 ou seja, a soma de +127 com +1 128(!). Neste caso, o registo V tomaria o e valor 1. Note-se que no registo C caria 0 pois se essas representaes fossem interpretadas co como inteiros positivos no haveria carry. a Se os inteiros so ambos negativos (em complemento para 2) a soma calculada pelo a e algoritmo habitual desprezando-seo transporte. Se se usa uma representao em m bits, ca m o desprezaro transporte corresponde a subtrair ao resultado obtido 2 . Basta notar que quando se efectua (x) + (y) se pretende obter o complemento para 2 de x + y, isto 2m (x + y). A relao desse nmero com os complementos para 2 de x e y e ca u e 2m (x + y) = (2m x) + (2m y) 2m . Ou seja, para obter a representao em ca complemento para 2 de (x) + (y) adicionam-se as representaes de (x) e (y) e co m subtrai-se 2 . Se a representao tiver m bits e a soma for inferior a 2m1 (o menor inteiro negativo ca com m bits num sistema de complemento para 2) diz-se que h underow; no MC68000 a isso assinalado pelo registo V (toma valor 1), sendo indicao de que o valor obtido est e ca a errado. Por exemplo: a soma em 8-bits e complemento para 2 de 10000000 com 11111111 seria 01111111 ou seja, 128 + (1) = +127 (!). Neste caso, o registo V tomaria o valor 1.

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

18

Note-se que no registo C caria 1 pois se essas representaes fossem interpretadas como co inteiros positivos haveria carry. Analogamente, a soma de um inteiro positivo com um inteiro negativo o binrio e a correspondente ` adio das representaes dos operandos, desprezando-seo transporte a ca co se o houver. No haver overow nem underow. a a O resultado da soma de inteiros em complemento para 2 (colocado no operando destino) est correcto sse o valor do registo V depois da operao for 0. a ca Subtraco de Inteiros em Complemento para 2 ca A subtraco binria de inteiros representados em complemento para 2 pode reduzir-se ` ca a a adio de inteiros. ca
(-x)-(-y) = (-x)+y (-x)-y=(-x)+(-y) y-(-x)=y+x y-x=y+(-x) Exemplos 10010000-11111101=10010000+00000011=10010011 10010000-00000011=10010000+11111101=10001101 00000011-10010000=00000011+ 01110000=01110011 00000011-00010000=00000011+11110000=11110011

Do mesmo modo que para a adio de inteiros, o resultado da diferena de inteiros em ca c complemento para 2 (colocado no operando destino) est correcto sse o valor do registo V a depois da operao for 0. ca Instrues para Adio e Subtraco co ca ca ADD (Add Binary) Adiciona o contedo do primeiro operando (no literal) ao segundo u a (operando destino, no An). O tamanho da operao deve ser especicado, podendo a ca ser byte (8 bits), word (16 bits) ou long word (32 bits). Se o primeiro operando for um dos registos de endereo, o tamanho da operao s pode ser W e L. Afecta c ca o apenas a parte do operando destino correspondente ao tamanho da operao. Altera ca o registo CCR de acordo com o resultado da operao. ca ADDA (Add Address) Anlogo a ADD mas o operando destino um registo de ena e dereo. Afecta os 32 bits do registo de endereo (independente do tamanho dos c c operandos); No afecta CCR. a ADDI (Add Immediate) Anlogo a ADD mas o primeiro operando um literal (Ima e mediate data); afecta CCR. ADDQ (Add Quick): Anlogo a ADD mas o primeiro operando um literal em 3 bits. a e 17 representam valores de 17, e 0 representa 8; afecta CCR se operando destino no for um dos registos de endereo. a c

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

19

ADDX (Add Extended) Adiciona o contedo do primeiro operando, com o segundo e u com X (do registo CCR); Aplica-se em adio em preciso mltipla. Por exemplo, ca a u para efectuar a soma de dois inteiros de 64 bits, somando primeiramente os 32 bits menos signicativos e depois os restantes com X, que representa o carry da primeira adio anterior. ca SUB (Subtract Binary) destino origem SUBA (Subtract Address) SUBI (Subtract Immediate) SUBQ (Subtract Quick) SUBX (Subtract Extended) destino origem X A sintaxe das instrues, os modos de endereamento dos operandos, e os tamanhos co c poss veis de operao so os indicados na Tabela 1.2. ca a Tabela 1.2: Instrues de Adico e Subtraco co ca ca Mnem. Sintaxe Endereamento e Tamanho de Operandos(0) c ADD ADD < ea >,Dn all (B,W,L but An W,L) ADD Dn,< ea > all (B,W,L) but Dn, An, d(PC) to Imm ADDA ADDA < ea >,An all (W,L) ADDI ADDI #< data >,< ea > all (B,W,L) but An, d(PC) to Imm(1) ADDQ ADDQ #< data >,< ea > all (B,W,L but An W,L) but d(PC)Imm(2) ADDX ADDX Dx,Dy B, W, L ADDX -(Ax),-(Ay) B, W, L SUB < ea >,Dn all (B,W,L but An W,L) SUB SUB Dn,< ea > all (B,W,L) but Dn, An, d(PC)Imm SUBA SUBA < ea >,An all (W,L) SUBI SUBI #< data >,< ea > all (B,W,L) but An, d(PC) Imm(1) SUBQ SUBQ #< data >,< ea > all (B,W,L but An W,L) but d(PC)Imm(2) SUBX SUBX Dx,Dy B, W, L SUBX -(Ax),-(Ay) B, W, L (0) Ordem: Dn, An, (An), (An)+, -(An), d16 (An), d8 (An,Xi), Abs.W, Abs.L, d16 (PC), d8 (PC,Xi), Imm (1) immediate data matches the operation size (2) 3 bits; valores entre 1 e 8

O registo de condies CCR afectado consoante o resultado das operaes efectuco e co adas. Para saber se o resultado colocado no operando destino est ou no correcto, o a a utilizador/programador deve testar os registos C ou V de CCR:

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 C se os operandos representam inteiros sem sinal; V se os operandos representam inteiros com sinal (complemento para 2)

20

Por exemplo, sejam 01111111 e 00000001 os valores nos bytes menos signicativos de D0 e D1 respectivamente. Aps a execuo da instruo ADD.BD0, D1 tal byte de D1 o ca ca conteria 10000000 e o estado do registo de condies seria X=0, N=1, Z=0, V=1, C=0. co Como foi visto anteriormente, se se considerar que aqueles valores so representaes com a co sinal de inteiros o resultado em D1 no estaria correcto, facto que se concluiria de V=1. a Se se considerar que os valores representam inteiros positivos (sem sinal) ento o resultado a est correcto (comprovado por C=0). a Exemplos: Em cada um dos exemplos a primeira parcela o contedo do byte menos e u signicativo de D3, e a segunda e o resultado o contedo do byte menos signicativo de e u D2. Supe-se que se executa ADD.BD3, D2. Quais so os valores decimais envolvidos nas o a adies (complemento para 2) seguintes? Quais so as erradas? Quais seriam as erradas co a se se interpretasse as representaes como inteiros sem sinal? co
negativos negativo e positivo positivos

+ 1 X 1

10010000 11111101 10001101 N Z V C 1 0 0 1


positivos

+ 1 X 1

00010000 11111111 00001111 N Z V C 0 0 0 1


negativos

+ 0 X 0

00010000 00111101 01001101 N Z V C 0 0 0 0

01111010 + 01110001 0 11101011 < 0 overow X N Z V C 0 1 0 1 0 Multiplicao e Diviso de Inteiros ca a

10000110 + 10001111 1 00010101 > 0 underow X N Z V C 1 0 0 1 1

O Assembly 68000 tem instrues para efectuar o produto e a diviso inteira de inteiros. co a Tais instrues so diferentes consoante se trate de inteiros representados em complemento co a para 2 (isto , com sinal), ou apenas no negativos (sem sinal): MULU, MULS, DIVU, e a e DIVS. Os suxos U (unsigned) e S (signed) das mnemnicas dessas instrues indicam o co o tipo de multiplicao ou diviso considerado. ca a MULU (Unsigned Multiply) Calcula o produto de dois inteiros (sem sinal) de 16 bits. O resultado tomado com 32 bits, e colocado no segundo operando da instruo, e ca

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

21

o qual um registo de dados. Sintaxe: MULU < ea >,Dn. O primeiro operando e admite todos os modos de endereamento excepto An. c 0 0 X N Z V C
X no alterado a e N = 1 se bit mais signicativo do produto for 1 Z = 1 se produto for zero

MULS (Signed Multiply) Anlogo ao anterior mas os operandos so tomados como a a inteiros em complemento para 2. DIVU (Unsigned Divide) Divide o operando destino (segundo operando) pelo primeiro operando tomando-os como inteiros sem sinal. O segundo operando palavra longa e (32 bits) e o primeiro palavra (16 bits). O resultado ocupa 32 bits: a palavra menos signicativa o quociente, e a mais signicativa o resto. A diviso por zero causa e e a um erro assinalado pelo processador; Se ocorrer overow (quociente no representvel a a 16 em 16 bits, ou seja superior a 2 1) o bit V toma o valor 1 e os operandos no so a a alterados. Sintaxe: DIVU < ea >,Dn. O primeiro operando admite todos os modos de endereamento excepto An. c 0 X N Z V C
X no alterado a e N = 1 se bit mais signicativo do quociente for 1; indenido se overow Z = 1 se quociente for zero; no denido se overow a V = 1 se quociente no for representvel em 16 bits a a

DIVS (Signed Divide): Anlogo ao anterior mas os operandos so tomados como a a inteiros em complemento para 2. O sinal do resto igual ao do dividendo, a menos e que o resto seja zero. Ocorre overow se o quociente for inferior a 215 ou superior a +215 1. 0 X N Z V C
X no alterado a e N = 1 se quociente for negativo; indenido se overow Z = 1 se quociente for zero; no denido se overow a V = 1 se quociente no for representvel em 16 bits a a

1.3.4

Exerc cios

1. Somar o contedo da posio de memria VALOR/ (.W) a todos os registos de u ca o dados (Dn ).

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

22

X: x0 x1 x2

Y: y0 y1 y2

Z:

x0 + y0 x1 + y1 x2 + y2

Figura 1.1: Soma de vectores A0 x0 x1 x2 x3 A0 x0 x0 + x1 x0 + x1 + x2 x0 + x1 + x2 + x3

Figura 1.2: Somas parcelares 2. Somar o contedo de duas posies de memria contidas nos registos A1 e A3 e u co o colocar o resultado em cada um desses endereos. c 3. Calcular em D0 o valor de 2 D0 + 1. 4. Considerem-se 3 vectores de 3 bytes (.B) em memria apontados por X,Y e Z o (constantes). Somar os elementos dos vectores X e Y um a um e colocar os resultados nas posies respectivas em Z (ver gura 1.1). co 5. Considerem-se 4 palavras (.W) na memria apartir da posio apontada por A0 o ca (x0 ,x1 ,x2 e x3 ). Faa um programa que calcule as somas parcelares (x0 ,x0 + x1 ,x0 + c x1 + x2 ,x0 + x1 + x2 + x3 ) e as coloque nas posies de, respectivamente, (x0 ,x1 , x2 co e x3 ) (ver gura 1.2).

1.3.5

Registo de Condies CCR (Condition Code Register) co

E o byte menos signicativo do registo SR (Status Register), e contm os registos de 1 bit e ou ags (bandeiras) apresentados na tabela 1.3.5. Estes registos so alterados de forma consistente, de modo a darem uma informao a ca util sobre o resultado da operao realizada pelo processador. As instrues que so casos ca co a particulares de outras mais gerais afectam o registo CCR da mesma forma que estas. Em qualquer utilizao de uma mesma instruo o registo CCR sempre alterado da mesma ca ca e maneira. Em apndice dada uma tabela que apresenta o modo como cada operao e e ca altera o registo CCR. Por exemplo, a operao MOVE, no afecta X, coloca 1 em N ca a se o resultado for negativo (bit mais signicativo do resultado 1), coloca 1 em Z se o e resultado for zero, e coloca zero nos bits C e V.

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000


C V (Carry) toma valor 1 se houver carrynuma adio, ou ca borrownuma subtraco; Caso contrrio zero. ca a e (Overow) toma valor 1 se houver overownuma operao aritmtica, ca e o que signica que o resultado no representvel com o a e a nmero de bits dos operandos; Caso contrrio zero. u a e (Zero) toma valor 1 se o resultado for zero; Caso contrrio 0. a (Negative) toma valor 1 se o bit mais signicativo do resultado for 1; Caso contrrio zero. a e (Extend) quando afectado toma o mesmo valor que o bit C tomar. e E um dos operandos em clculos em preciso mltipla. a a u

23

Z N X

Tabela 1.3: Registos do CCR Existem instrues condicionais (por exemplo BNE, BCC, BCS,. . . ) que testam co um ou mais bits do registo de condio. A mnemnica duma instruo condicional tem ca o ca como suxo alguma das mnemnicas de condio indicadas numa tabela dada em Apndice. o ca e Na tabela apresentado tambm o teste equivalente a cada condio. Por exemplo, a e e ca condio NE (Not Equal) equivale a testar se Z (isto , se o resultado da operao ca e ca anterior no era zero); a condio CS (Carry Set) equivale a testar C (ou seja, se houve a ca carryna operao anterior) enquanto CC (Carry Clear) testa C. ca

1.3.6

Exerc cios

1. Indique o contedo dos registos e estado das ags C,V,Z,N aps a execuo das u o ca instrues: co (a) CLR.L D0 (b) CLR.L DO MOVE.W #$FFFF,D0 (c) MOVE.L #$FFFF,D0 MOVE.B #0,D0 (d) MOVE.L #$FF,D0 ADDI.L #1,D0 (e) MOVE.L #$FF,D0 ADDI.B #1,D0 (f) MOVE.W #10,D0 SUBI.W #20,D0 (g) MOVE.B #$7F,D0 ADDI.B #$F0,D0 (h) MOVE.B #$7F,D0 ADDI.B #$7F,D0

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

24

2. Suponha que x e y so dois inteiros representados em n d a gitos em complemento para dois. Indique, justicando, em qual dos casos poder obter situaes de transporte a co (carry ou borrow ) e/ou overow ou underow : (a) x 0 e y 0, efectuo x + y; (b) x 0 e y < 0, efectuo x + y; (c) x < 0 e y < 0, efectuo x + y;

1.3.7

Instrues de Comparao e Teste co ca

As instrues CMP (Compare) e TST (Test) modicam CCR de acordo com o valor dos co seus operandos, sendo usadas antes de instrues condicionais. Convm notar que por vezes co e (por exemplo, aps uma adio) no necessrio, nem desejvel, usar instrues CMP o ca a e a a co e TST antes de instrues condicionais atendendo-se antes ao modo como cada operao co ca altera o registo CCR. As instrues de comparao tm dois operandos e calculam a diferena entre o segundo co ca e c operando e o primeiro operando, alterando o registo CCR de acordo com essa diferena. c Tm as mnemnicas seguintes: e o
Mnemnica o CMP CMPI CMPM Nome compare compare immediate compare memory

A instruo de teste (TST) tem apenas um operando e calcula a diferena entre esse ca c operando e zero, modicando o registo CCR conforme o resultado. Os modos de endereamento, os tamanhos dos operandos e o modo como as alteraes do registo CCR c co so calculadas esto descritos nas tabelas apresentadas em anexo. a a

1.3.8

Instrues de Transferncia de Controlo co e

Instrues Incondicionais co As instrues JMP (JuMP) e BRA (BRanch Always) permitem alterar sempre o valor co do registo de sequncia do programa. O novo endereo de instruo deve ser ser par, e c ca isto um endereo de palavra. A instruo jumppermite saltar (salto absoluto) para e c ca uma qualquer instruo na memria. A instruo branchs permite efectuar um salto ca o ca o relativo com amplitude limitada. Essa amplitude dada por um inteiro em complemento e para 2 representvel em 8 ou 16 bits. Convm notar que o valor do registo PC quando a a e instruo de branchest a ser executada igual ao endereo da instruo dessa instruo ca a e c ca ca mais 2 (uma vez que PC aponta a prxima instruo a ser executada). o ca

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 Instrues Condicionais co

25

A instruo Bcc (BRanch conditionally), em que cc substitu por a mnemnica da ca e do o condio desejada (por exemplo BNE, BCS, ldots), s altera o valor do registo PC se o ca o contedo do registo CCR satiszer a condio cc. u ca Uma outra instruo condicional que por vezes pode ser util para implementar algoca ritmos iterativos DBcc (Test Condition, Decrement, and Branch). Consultar as tabelas e dadas para mais detalhes.

1.3.9

Exerc cios

1. Diga como se pode traduzir para Assembly 68000 as seguintes formas gerais de instrues (da linguagem P): co a) b) c) x constante xy Se (condio) ento ca a {instrues}; co instruo seguinte; ca Se (condio) ento ca a {instrues1}; co seno {instrues2}; a co enquanto (condio) faa ca c {instrues}; co instruo seguinte; ca repita {instrues}; co at (condio); e ca instruo seguinte; ca

d)

e)

f)

2. Copiar o nmero de palavras (.W) indicado pelo primeiro byte (.B) do registo D2 u da posio de memria ORIGEM para DESTINO. ca o 3. Inverter a ordem dos bytes (.B) colocados entre as posies de memria INICIO e co o FIM. 4. Inverter a posio dos bytes (.B) de cada uma de N palavras (.W) colocadas apartir ca da posio de memria INICIO. ca o 5. Rodar por uma posio as palavras longas (.L) colocadas entre as posies de memria ca co o INICIO e FIM (ver gura 1.3). 6. O mesmo problema anterior mas agora rodando M posies. ( i.., M vezes a co e operao anterior ). ca

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

26

x0 x1 x2 . . . xk

xk x0 x1 . . . xk1

Figura 1.3: Rotao ca Z: Y: X: x0 x1 x2 . . . xN 1 y0 y1 y2 . . . yN 1 yN . . . yM 1 x0 y0 x1 y1 . . . xN 1 yN 1 yN . . . yM 1

Figura 1.4: Interlaar c 7. Dado um inteiro com sinal em D0, escreva um programa que calcule o seu valor absoluto em D1. 8. Calcular a soma de todos os nmeros de 1 at uma constante N, dada em D0. u e 9. Somar N palavras (N em D0) (.W) colocados apartir da posio de memria INIca o CIO. 10. O mesmo problema de 1.3.4.4, mas agora com vectores de tamanho N. 11. O mesmo problema de 1.3.4.5, mas agora com N palavras. 12. Dados dois vectores de palavras (.W) nas posies X e Y (constantes) e de tamanhos co respectivamente, N e M (eventualmente diferentes), faa um programa que interlace c os elementos dos dois vectores apartir da posio Z. Caso um dos vectores tenha ca mais elementos que o outro, os elementos restantes devem ser copiados para o m do vector Z (ver gura 1.4).

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

27

13. Considere uma sequncia de caracteres terminada com 0, comeando em PALAVRA. Ese c creva um programa que copie a sequncia pela ordem inversa para a `rea comeando e a c em INVERSA. 14. Dadas duas sequncias de caracteres (apontadas por A0 e A1), escreva um programa e que copie para a `rea de memria comeando em PREFIXO o maior prexo comum `s a o c a duas sequncias. e

1.3.10

Instrues Condicionais e Aritmticas co e

J foi anteriormente mencionado que quando se pretende testar condies depois de operaes a co co aritmticas se deve distinguir entre estar a tomar os operandos sem sinal (positivos ou zero), e ou com sinal (representao em complemento para 2). Assim, por exemplo, as condies ca co a testar para saber se de uma certa operao com sinal resultou overow VS (overow ca e set, equivale a V) ou VC (overow clear, equivale a V). Por exemplo, a instruo BVS ca errado, permite efectuar um desvio para a instruo de endereo errado se o bit V esca c tiver com o valor 1. Na tabela 1.4 ilustra-se transferncias de controlo aps operaes e o co aritmticas. e Tabela 1.4: Instrues Condicionais e Aritmticas co e Branch com Condio ca Instrues co Sem Sinal Com Sinal (Y) = 0 BEQ ADD.t X,Y (Y) = 0 BEQ (Y) = 0 BNE SUB.t X,Y (Y) = 0 BNE (Y) 0 BPL MOVE.t X,Y (Y) < 0 BMI Out of range for C = {1} BCS V = {1} BVS arithmetic instructions C = {0} BCC V = {0} BVC (X) = (Y) BEQ (X) = (Y) BEQ (X) = (Y) BNE (X) = (Y) BNE (X) > (Y) BGT (X) > (Y) BHI CMP X,Y (X) (Y) BGE (X) (Y) BCC (X) < (Y) BLT (X) < (Y) BCS (X) (Y) BLE (X) (Y) BLS (X) = 0 BEQ (X) = 0 BEQ (X) = 0 BNE (X) = 0 BNE (X) > 0 BNE (X) > 0 BGT TST X (X) < 0 (X) < 0 BLT, BMI (X) 0 (X) 0 BGE, BPL (X) 0 BLE (X) 0 MOVE admite ainda BGE, BLT, BGT, e BLE se os operandos tiverem sinal

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

28

1.3.11

Exerc cios

Escrever programas em Assembly 68000 para resolver cada um dos problemas seguintes. 1. Calcular o valor da expresso seguinte, supondo que / denota a diviso inteira a a (40 (152 + 38 85)/6 + 4 62) (152 + 38 85) Se o resultado estiver errado, no byte erro deve car o valor 1; seno zero. a 2. Dado um valor inteiro de 16 bits em x calcular em f o valor f (x) assim denido: f (x) = x5 se x 5 0 (x 5) se x 5 < 0

Se o resultado estiver errado, no byte erro deve car o valor 1; seno zero. a 3. Determinar o valor absoluto de um nmero inteiro X de 16-bits dado em complemento u para 2. O resultado (em 16 bits) deve car em ABS. Para que valor(es) de X ocorre overow? Nessas condies o resultado est errado? co a 4. Dados dois inteiros positivos de 16 bits X e Y calcular por adies sucessivas, e em co 32 bits, o produto de X por Y. O resultado deve car em R. Poder existir carry em a alguma das adies? co 5. Calcular em D0 o quociente e o resto da diviso inteira de um inteiro no negativo a a de 32 bits dado em D0, por um inteiro positivo de 16 bits Y sem utilizar instrues co DIV. A palavra mais signicativa de D0 deve conter o resto da diviso e a menos a signicativa o quociente. Devem ser assinalados dois tipos de erro: overow do quociente D1.B conter 1; e diviso por zero D1.B conter 2; a a a 6. Transferir N bytes de informao de uma sequncia iniciada na posio AQUI para ca e ca uma outra com nicio em ALI. Supor que N um inteiro no negativo em 16 bits, e e a que a sequncia dos endereos dos elementos decrescente. e c e 7. Determinar o nmero de inteiros no negativos de uma sequncia de inteiros de 16 u a e bits, sendo n (inteiro no negativo de 32 bits) o comprimento da sequncia. Suponha a e que os elementos da sequncia esto colocados em memria em posies de endereos e a o co c crescentes sendo o primeiro o contedo (longo) do registo A1. u 8. Calcular a parte inteira da mdia aritmtica de uma sequncia de inteiros no nee e e a gativos de 16 bits guardados em palavras de memria cont o guas (e de endereos c crescentes) a partir da palavra de endereo DADOS. O nmero de elementos da c u sequncia o contedo da palavra de endereo NVAL. O resultado deve ser coloe e u c cado em MEDIA. Poder ocorrer overow na diviso ou carry na soma? a a

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

29

9. Determinar o valor mximo (em MAXINT) de uma sequncia de inteiros (com a e sinal) de 16 bits colocados em memria a partir da posio DADOS, para cada um o ca dos casos seguintes. (a) O nmero de inteiros da sequncia o contedo da palavra de endereo NINT. u e e u c (b) A sequncia termina por $8000, no sendo dado o seu nmero de elementos. e a u 10. Reescrever uma dada sequncia de caracteres (em cdigo ASCII) colocada a partir e o da posio de endereo SEQ, substituindo as letras minsculas por maisculas. ca c u u 11. Compactar uma sequncia de caracteres dada, retirando os caracteres de controlo e (cdigo ASCII inferior a 32), supondo que A0 aponta o primeiro caracter da sequncia. o e 12. Dado um inteiro positivo em 16 bits, Int, determinar a sequncia de caracteres e correspondente ` sua representao decimal, colocando-a a partir da posio DEC. a ca ca Considere tambm o problema inverso: dada uma sequncia de caracteres numricos, e e e a partir da posio DEC e terminada por 0, escrever um programa que calcule o ca nmero decimal correspondente, deixando o resultado em D0.L, ou colocar o valor u 1 no registo D1, se ocorrer um erro. 13. Determinar a sequncia de caracteres da representao com ponto decimal de um e ca nmero racional positivo inferior a 1, supondo uma aproximao de N (inteiro no u ca a negativo de 8 bits) casas decimais. O numerador e denominador do nmero so dados u a nos bytes Num e Den. O resultado deve ser colocado na memria a partir de RAC. o O processo para determinar os d gitos o a seguir ilustrado: e 4/7 = 0.1(40/7) = 0.1(5 + 5/7) = .5 + 0.1(0.1 (50/7)) = .5 + 0.1(0.1 (7 + 1/7)) = .57 + 0.01 1/7 = ...

1.3.12

Subprogramas ou Subrotinas

Um subprograma ou sub-rotina uma sequncia de instrues que pode ser tratada como e e co um mdulo independente de um programa maior. O mesmo subprograma pode ser chao mado vrias vezes, para executar uma tarefa espec a ca, durante a execuo de um proca grama. O uso de subprogramas uma tcnica de programao que facilita a concepo de e e ca ca programas. Em geral, um programa para efectuar uma certa tarefa pode ser partido em blocos independentes (mdulos), cada um deles correspondendo a uma parte (bem determio nada) dessa tarefa. Cada subprograma pode ser testado independentemente do programa que o chama permitindo, por exemplo, detectar erros mais facilmente. Quando um subprograma chamado, as suas instrues so executadas e depois o e co a controlo regressa ` instruo do programa principal imediatamente a seguir ` instruo de a ca a ca chamada da sub-rotina. O endereo da primeira instruo da sub-rotina (endereo inicial) c ca c deve ser conhecido para que esta possa ser chamada. Se uma sub-rotina e o programa que a chama forem traduzidos pelo assemblador ao mesmo tempo, ento o endereo inicial a c

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

30

da sub-rotina pode ser denido por um endereo simblico (label), que ocorrer na sua c o a chamada no programa. Seno, tal endereo tem que ser dado explicitamente na instruo a c ca de chamada. O endereo (longo) da instruo imediatamente a seguir ` da chamada da sub-rotina c ca a e guardado na pilha do sistema (apontada por SP ou A7), quando a instruo de chamada ca executada. Nenhum outro valor automaticamente guardado. da responsabilidade do e e programador guardar os contedos dos registos que contiverem valores relevantes para o u programa. Tais valores podem ser guardados na pilha do sistema antes da chamada da sub-rotina, se se souber quais os registos que a sub-rotina altera, e repostos depois de regressar. No entanto, prefer efectuar essas operaes dentro da sub-rotina, ` entrada e vel co a e imediatamente antes da sa da. Uma mesma sub-rotina pode ser chamada vrias vezes a num programa, e assim pode-se diminuir o cdigo do programa. o Instrues para Chamada de Sub-rotina co As instrues de chamada de uma sub-rotina so instrues de transferncia de controlo co a co e para a instruo inicial da sub-rotina, podendo tais transferncias ser relativas ou absolutas. ca e No primeiro caso, o assemblador calcula o valor a somar ao contedo do registo PC para u que tal registo passe a conter o endereo inicial da sub-rotina. Esse valor guardado como c e um inteiro representado em complemento para 2 em 16 bits, o que limita a amplitude do saltoa efectuar. A instruo de chamada BSR (Branch to Subroutine), e em tudo ca e e anloga a BRA excepto o facto do endereo (32 bits) da instruo seguinte (contedo do a c ca u registo PC) ser guardado na pilha do sistema. Se a transferncia for absoluta o valor do registo PC guardado na pilha do sistema, e e e o seu novo valor passa a ser o endereo da instruo inicial da sub-rotina. A instruo de c ca ca chamada JSR (Jump to Subroutine). e Instrues de Retorno da Sub-rotina co Em geral, a ultima instruo a ser executada num subprograma carrega o registo PC com ca o valor (32 bits) que est no topo da pilha do sistema, que deve ser o endereo da prxima a c o instruo a executar. A instruo de retorno RTS (Return from Subroutine), e no tem ca ca e a operandos. A instruo RTR (Return and Restore Condition Codes) repe o valor do registo CCR ca o anterior ` chamada da sub-rotina (se esse valor tiver sido guardado na pilha do sistema a a seguir ao endereo de retorno) e o valor do registo PC. O valor de 16 bits que estiver c no topo da pilha do sistema usado para repor o valor do registo CCR mas o byte mais e signicativo do registo SR no alterado. A instruo MOVE SR,-(A7) pode ser usada a e ca para colocar na pilha do sistema o valor do registo SR (o qual inclui o registo CCR). A estrutura geral duma chamada a subrotina pode ser:

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 subr MOVE.W MOVEM.L ... ... MOVEM.L RTR SR, -(A7) D0-D7/A0-A6, -(A7) ; guarda as condies co ; guarda valor dos registos

31

(A7)+,D0-D7/A0-A6

; restaura valor dos registos

Na gura 1.5 ilustra-se o uso da pilha de sistema durante a chamada a uma subrotina (neste caso JSR subr). Antes de JSR Aps JSR e MOVEM o livre (A7) (R0) ... (Rn) (SR) (PC){31:16} (PC){15:0} Aps RTR o

livre (A7)

livre (A7)

Figura 1.5: Uso da Pilha de Sistema durante a chamada a uma subrotina

1.3.13

Exerc cios

Escrever subprogramas em Assembly 68000 para resolver cada um dos problemas seguintes: 1. Determinar o inteiro no negativo cuja representao decimal uma sequncia de a ca e e caracteres (cdigo ASCII) dada. A sequncia est colocada a partir da posio REP, o e a ca e o resultado deve car em Val, no devendo exceder uma palavra longa. a 2. Dadas duas sequncias de caracteres vericar se a primeira subsequncia da segunda. e e e As sequncias encontram-se em duas pilhas de endereos crescentes a partir das e c posies SEQ1 e SEQ2, respectivamente. O primeiro caracter de cada sequncia co e est no topo da pilha correspondente. Se a sequncia SEQ1 for subsequncia de a e e 1 SEQ2 , no bit zero da posio SIM deve car o valor 1. ca 3. Dadas duas sequncias de caracteres nas condies do exerc anterior determinar e co cio a maior subpalavra da primeira que subsequncia da segunda. Como resultado e e devem ser indicados em ED os endereos longos do primeiro e ultimo caracter da c subsequncia comum. Se no existir uma subpalavra comum, no bit zero da posio e a ca SIM deve car o valor 0.
1

Existem instrues para manipular apenas um bit de um operando co

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

32

4. Comparar duas sequncias de caracteres usando a ordem lexicogrca.2 As sequncias e a e encontram-se em duas pilhas de endereos crescentes a partir das posies SEQ1 e c co SEQ2, respectivamente. Supor que o primeiro byte de cada sequncia (topo da pilha e respectiva) contm o comprimento dessa sequncia. No m, o bit zero de D0 deve e e ser 1 se a primeira for maior do que a segunda, o bit um deve ser 1 se a segunda for maior, e ambos zero se as sequncias forem iguais. e 5. Vericar se uma dada sequncia de caracteres, em cdigo ASCII, cap e o e cua. A sequncia encontra-se numa pilha de endereos crescentes. O topo da pilha (prie c meira posio vazia) apontado por A2 e a posio anterior contm o nmero de ca e ca e u caracteres da sequncia. Se a sequncia for cap e e cua, o bit menos signicativo de D0 deve car com o valor 1. 6. Dada uma base b (inteiro positivo em 8 bits) da forma 2k , em que k 4, e a sequncia de carateres da representao em binrio de um inteiro (no negativo), e ca a a reescrever tal sequncia de forma a obter a representao base b. A sequncia de e ca e caracteres encontra-se a partir da posio rep2 devendo ser substitu pelo resultado ca da (libertando posies desnecessrias). O registo A1 deve apontar o 1 caracter do co a resultado. 7. Considerar uma estrutura de dados em que cada elemento const e tuido por 3 campos: o primeiro uma palavra chave e ocupa 2 bytes, o segundo contm um nome e e e ocupa 20 bytes, e o terceiro indica um grupo e ocupa 1 byte. Os elementos esto coloa cados em posies de memria cont co o guas de endereos crescentes. A primeira chave c e apontada por A0, e o ultimo elemento da sequncia tem chave zero. Dada uma chave e em D0 (16 bits menos signicativos) pretende-se encontrar o grupo correspondente a essa chave. O resultado deve ser colocado em D0. Se no existir nenhum elemento a com a chave dada, o valor do grupo ser zero. a

1.3.14

Operaes Lgicas e para Manipular um bit co o

Em geral, uma varivel lgica uma varivel que toma apenas dois valores. Tais variveis a o e a a so usadas quando se pretende indicar o resultado de uma operao se tal resultado s a ca o puder ser um de dois valores. So por vezes designadas por ags. Por exemplo, o registo a de condies CCR um conjunto de ags que indica resultados de operaes aritmticas. co e co e Em certas aplicaes, pode ser conveniente tratar cada bitde um operando como uma co varivel lgica. Um operando pode ser visto como um conjunto de variveis lgicas. a o a o Existem instrues em Assembly 68000 que permitem trabalhar com 8, 16 e 32 variveis co a lgicas em simultneo, e instrues para manipular apenas uma (um bit). o a co
Um caracter a inferior a um caracter b sse o cdigo de a inferior ao de b. Uma sequncia caracteres e o e e s1 inferior (lexicogracamente) a uma sequncia caracteres s2 sse para o primeiro par de caracteres em e e que diferem, seja (c1 , c2 ), se tem c1 inferior a c2 ; ou se tal par no existir e s2 tiver mais caracteres. Por a exemplo, esta < este, estas < este, est < este.
2

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 Operaes Lgicas co o

33

AND (And Logical) Calcula no operando destino o e-lgico desse operando com o o primeiro. Sintaxe: AND.t < ea >,Dn ou AND.t Dn,< ea >. O tamanho da operao ca deve ser especicado, podendo ser 8, 16, ou 32 bits. Nenhum dos operandos pode ser um registo de endereo (ver nas tabelas os modos de endereamento permitidos). c c Altera o registo CCR de acordo com o resultado da operao. ca ANDI (And Immediate) Anlogo a AND mas o primeiro operando literal. Sintaxe: a e ANDI.t #< data >,< ea >. Em geral, os assembladores traduzem automaticamente a instruo AND.t #< data >,Dn como se fosse ANDI.t #< data >,Dn. ca ANDI (And Immediate to CCR) O segundo operando CCR. Sintaxe: ANDI.B #< e data >,CCR OR (Inclusive Or Logical) Calcula ou-inclusivo dos operandos. Anlogo a AND. a ORI Sintaxe: ORI.t #< data >,< ea > ORI Sintaxe: ORI.B #< data >,CCR EOR (Exclusive Or Logical): Calcula ou-exclusivo dos operandos. Anlogo a AND, a mas o primeiro operando sempre um registo de dados. e EORI Sintaxe: ORI.t #< data >,< ea > EORI Sintaxe: ORI.B #< data >,CCR NOT (Logical Complement) Determina o complemento para 1. E a negao lgica do ca o valor de cada varivel que constitui o operando. Sintaxe: NOT.t < ea > a Mscaras a As operaes lgicas podem ser usadas para efectuar certas operaes de um modo mais co o co eciente. Por exemplo, para saber se algum dos bits 0, 1, ou 5 do registo D1 tem valor 1, pode-se colocar $23 no byte menos signicativo de D2 e determinar se o resultado de AND.B D1,D2 zero. O valor $23 corresponde ` congurao 0010 0011. Ou seja, os bits e a ca 0, 1, e 5 tm o valor 1, e os restantes so zero pelo que o resultado de AND.B D1,D2 e a e zero sse nenhum dos bits 0, 1, e 5 do registo D1 for 1. Tal valor designa-se por mscara. a Operaes de Deslocamento e Rotao co ca Estas operaes deslocamos bits de um operando um certo nmero de posies para a esco u co querda ou para a direita, e incluem: deslocamentos aritmticos (que correspondem ` diviso e a a ou produto do operando em complemento para 2 por uma potncia de 2), deslocamentos e lgicos, e deslocamentos cclicos ou rotaes. o co Exemplos:

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000


deslocamento aritmtico de uma posio ` esquerda (ASL) e ca a dado 00011111 10011111 resultado 00111110 00111110 efeito sobre X N Z 0 0 0 X N Z 1 0 0 CCR V 0 V 1 C 0 C 1

34

deslocamento aritmtico de uma posio ` direita (ASR) e ca a dado 00011111 10011111 resultado 00001111 11001111 efeito sobre X N Z 1 0 0 X N Z 1 1 0 CCR V 0 V 0 C 1 C 1

deslocamento lgico de uma posio ` esquerda (LSL); registo V ca sempre zero o ca a dado 00011111 10011111 resultado 00111110 00111110 efeito sobre X N Z 0 0 0 X N Z 1 0 0 CCR V 0 V 0 C 0 C 1

deslocamento lgico de uma posio ` direita (LSR); registo V ca sempre zero o ca a dado 00011111 10011111 resultado 00001111 01001111 efeito sobre X N Z 1 0 0 X N Z 1 0 0 CCR V 0 V 0 C 1 C 1

A gura 1.6 contm as mnemnicas de cada uma das instrues e uma descrio do e o co ca efeito de cada uma. A sintaxe das instrues, os modos de endereamento dos operandos, e os tamanhos co c poss veis de operandos so os indicados na tabela seguinte. a

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

35

Figura 1.6: Operaes de Deslocamento e Rotao co ca Deslocamento Artimtico ` esquerda: ASL e a 0


 

X/C 

Deslocamento Aritmetico a direita: ASR

X/C

Deslocamento Logico a esquerda: LSL 0


 

X/C 

Deslocamento Logico a esquerda: LSL 0


-

X/C

Rotac{c}ao a esquerda: ROL

0
  

Rotac{c}ao a direita: ROR

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

36

M N E uma das ASL, ASR, LSL, LSR, ROR, ROL, ROXR, ROXL e Sintaxe M N E Dm,Dn M N E #< data >,Dn M N E < ea > Endereamento e Tamanho de Operandos(0) c B,W,L B,W,L(2) all (W) but Dn,An,d(PC) to Imm

(0) Ordem: Dn, An, (An), (An)+, -(An), d16 (An), d8 (An,Xi), Abs.W, Abs.L, d16 (PC), d8 (PC,Xi), Imm (2) 3 bits; valores entre 1 e 8

O primeiro operando indica o nmero de posies do deslocamento a efectuar sobre o u co segundo operando, excepto para M N E < ea > em que o deslocamento apenas de uma e posio. Para M N E Dm,Dn o deslocamento de 0 a 63 posies sendo dado por Dm ca e co mdulo 64 (isto , resto da diviso de Dm por 64). o e a Operaes para Manipular apenas 1 bit co Existem instrues que permitem alterar (bit change), atribuir valor 0 (bit clear), atribuir co valor 1 (bit set), e testar (bit test) apenas um bit do operando destino. Tm uma forma e geral M N E Dn,< ea > ou M N E #< bn >,< ea >. O primeiro operando indica o nmero do bit de < ea > a alterar ou testar. No quadro seguinte indica-se a operao u ca correspondente a cada uma das instrues, supondo-se que bn representa o bit a manipular: co
Instruo ca BCHG BCHG BCLR BCLR BSET BSET BTST BTST Efeito Dn,< ea > #< bn >,< ea > Dn,< ea > #< bn >,< ea > Dn,< ea > #< bn >,< ea > Dn,< ea > #< bn >,< ea > Z = bn e bn bn Z = bn e bn 0 Z = bn e bn 1 Z = bn

O operando destino pode ser tomado com 32 bits se for um dos registos de dados; caso contrrio ser apenas um byte. O primeiro operando contm um inteiro que tomado a a e e como o nmero do bit a manipular (o bit menos signicativo o bit zero). Consultar as u e tabelas gerais para mais detalhes.

1.3.15

Exerc cios

Escrever um subprograma em Assembly 68000 para resolver cada um dos problemas seguintes. 1. Calcular o produto de dois inteiros no negativos de 16 bits usando operaes de a co deslocamento e soma. Os dois inteiros so dados em DO (16 bits mais signicativos a

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

37

e 16 bits menos signicativos), e o resultado deve ser colocado em D0 em 32 bits. 2. Anlogo ao anterior mas os valores so inteiros (no necessariamente positivos) rea a a presentados em complemento para 2. 3. Ordenar por ordem crescente uma sequncia de inteiros em 16 bits, e (a) pelo Mtodo da Bolha; e (b) por Insero. ca A sequncia encontra-se em posies de memria a partir da posio apontada por e co o ca AO (endereo 32 bits), sendo a sequncia de endereos decrescente. O nmero de c e c u elementos da sequncia um inteiro no negativo de 32 bits dado em DO. O resultado e e a deve ser apontado por A0 e ocupar a posio da sequncia dada. ca e 4. Determinar a posio de um inteiro de 16 bits numa dada sequncia de inteiros no ca e a negativos de 16 bits, sem repeties para cada um dos casos seguintes. co (a) a sequncia pode no estar ordenada; e a (b) a sequncia est ordenada por ordem crescente. e a A sequncia encontra-se em posies de memria a partir da posio apontada por AO e co o ca (endereo 32 bits), sendo a sequncia de endereos crescente. O nmero de elementos c e c u da sequncia um inteiro no negativo de 32 bits dado em DO. Como resultado, D0 e e a deve conter a ordem do elemento. Se o elemento no ocorrer na sequncia o bit 1 de a e D1 conter o valor 1. a 5. Dadas duas sequncias de inteiros positivos SEQ1 e SEQ2 respectivamente, sem e repeties e ordenadas por ordem crescente, construir a sequncia ordenada e sem reco e peties MERGE obtida por juno dos elementos dessas sequncias. Cada sequncia co ca e e encontra-se em posies de memria de endereos decrescentes. Os endereos (32 co o c c bits) do primeiro elemento de cada uma SEQ1, SEQ2, e MERGE esto colocaa dos por esta ordem em posies contguas da pilha do sistema, e SEQ1 o topo da co e pilha imediatamente antes da chamada da sub-rotina. O primeiro elemento de cada sequncia o seu nmero de elementos. e e u

1.3.16

Processos Recursivos

Recorde que o factorial de um inteiro no negativo pode ser denido como a denio 1 ca 0! = 1! = 1 n! = n(n 1)! se n 2 denio 2 ca 0! = 1! = 1 n! = n(n 1) . . . 2.1 se n 2

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

38

A primeira denio diz-se por recorrncia e determina um processo recursivo para ca e calcular n!, enquanto que a segunda determina um processo iterativo. A sub-rotina seguinte permite calcular, usando recurso, o factorial de um inteiro no a a negativo dado em D0 em 16 bits. O resultado calculado em D0 e tomado com 16 bits. Se e o valor calculado exceder 216 1, o bit 0 de D1 assinala o erro.
fact CMPI.W BLS MOVE.W SUBQ.W BSR MULU CMPI.L BLS BSET RTS MOVE.W RTS #1,D0 zero D0,-(SP) #1,DO fact (SP)+,DO #$0000FFFF,D0 pronto #0,D1 #1,D0

;assinala erro em D1

pronto zero

Exerc cio: Siga o programa supondo que o contedo inicial de DO 5 (e tambm u e e quando 9). Qual o menor inteiro cujo factorial no pode ser calculado? e e a Como a sub-rotina se chama a si prpria, a pilha do sistema usada para o e guardar os valores dos registos que so alterados na chamada se esses valores a forem importantes (ou seja, necessrios quando se retorna). a

1.3.17

Exerc cios

Escrever um subprograma em Assembly 68000 para resolver cada um dos problemas seguintes. 1. Dados dois inteiros no negativos de 16 bits x e y em D1 e D2 respectivamente, a calcular recursivamente, com 32 bits, e em D1 o valor de f (x, y) assim denido f (x, y) = y se x = 1 yf (x 1, y) + 4 se x = 1

Se ocorrer algum erro aritmtico o bit 16 de D2 deve tomar valor 1. e 2. Anlogo ao anterior mas o resultado deve ser dado em D2, e o erro indicado por D1. a 3. Calcular recursivamente o valor de Ack(m, n), sendo m e n inteiros no negativos a dados em D0 e D2 em 8 bits, e Ack a funo de Ackermann assim denida: ca Ack(0, n) = n + 1, se n = 0 Ack(m, 0) = Ack(m 1, 1) se m = 0 Ack(m, n) = Ack(m 1, Ack(m, n 1)) se n = 0 e m = 0

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

39

O resultado deve ser calculado com 16 bits em D3; se ocorrer algum erro aritmtico e o valor do bit 16 de D3 deve ser 1. 4. Dado um inteiro no negativo, seja N , calcular o termo de ordem N da sucesso de a a Fibonnacci denida por f ib(0) = f ib(1) = 1 f ib(n) = f ib(n 1) + f ib(n 2) se n 2 Como deve ser dado o valor de N ? Onde colocado o resultado? Qual o parmetro e a que indica erros aritmticos? e 5. Escreva uma rotina recursiva que calcule o valor da funo f (x, y) dados x e y, ca inteiros no negativos, nos registos D0 e D1 (em 16 bits), a f (0, y) = 4y f (x + 1, 0) = f (x, x) + 1 f (x + 1, y + 1) = f (x, y) + f (x + 1, 0) 6. Escreva uma rotina recursiva que calcule o valor da funo f (x, y) dados x e y, ca inteiros no negativos, nos registos D0 e D1 (em 16 bits), a f (x, 0) = x f (0, y) = 2 f (0, y 1) se y > 0 f (x, y) = f (x 1, f (x 1, y)) se y > 0, x > 0 O resultado deve ser calulado com 32 bits no registo D2 e se ocorrer algum erro aritmtico o valor do bit 16 de D0 deve ser 1. e

1.3.18
Exerc cio:

Estruturas de Dados

Estruturas Indexadas (Arrays) vectores e matrizes

Como representar em memria uma matriz de inteiros M [n, m] sendo cada inteiro o representado por um byte (ou 16 bits, 32 bits, 64 bits)? Escrever uma sub-rotina para atribuir um valor ao elemento M [i, j] dados i e j. Escrever uma sub-rotina para determinar a linha e coluna do elemento da matriz que igual a um certo valor dado. e

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

40

Escrever uma sub-rotina para ordenar os elementos da matriz por ordem crescente, supondo que so inteiros em 8 bits e sem sinal. a
uma forma de representar M [3, 9] sendo cada entrada um byte

x + 9

x+29

endereo de M [i, j] = x + (i 1) 9 + (j 1), 1 j 9, 1 i 3 c

Escreva uma subrotina que permita calcular o produto de duas matrizes quadradas n n. Estruturas Ligadas Listas e Arvores Uma lista pode ser denida genericamente como sendo: ou a lista vazia ou um par formado por um elemento de um certo tipo e uma lista. Um tipo formalmente denido como um e conjunto de elementos. Uma lista pode ser implementada como uma estrutura ligada em que cada elemento tem um campo que um apontador para o elemento seguinte, ou seja o endereo do elemento e c seguinte na lista. Pode considerar-se que o ultimo elemento o que tem no campo de e endereo o valor zero (signicando que no aponta nenhum outro). c a Exerc cio Suponha dada em memria uma lista em que cada elemento tem 2 campos sendo o o endereo do primeiro campo sempre par. O primeiro campo de um elemento uma c e sequncia de caracteres 9 bytes e o segundo um endereo em 3 bytes. O registo A1 e c contm o endereo do primeiro elemento da lista. e c
EXEMPLO DE LISTA COM 3 ELEMENTOS (apontador de 3 bytes) 0 $A68 0 0 ... $C00 A1 E A 0 ... $EA0 A 6 8 ...

A1 elemento($C00) elemento($EA0) elemento($A68) 000

1. Determinar o endereo do primeiro elemento cujo contedo igual a uma pac u e lavra de 9 caracteres dada; problema anlogo para o ultimo elemento nessas a condies. co 2. Inserir um elemento numa certa posio da lista. Supondo que o elemento ca a inserir ocupa posies contguas a partir de NEL (endereo longo e par). co c Suponha que os 9 primeiros bytes contm a sequncia dos cdigos dos caracteres e e o desse elemento. O novo elemento deve ocupar a 3 posio na lista (ou a ultima ca se o nmero de elementos na lista for inferior a 3). u

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

41

3. Suponha a lista ordenada por ordem (lexicogrca) crescente. Pretende-se ina serir um elemento nas condies descritas na alnea anterior mantendo a orco denao. ca Uma rvore binria pode ser implementada como uma estrutura ligada em que cada a a n tem dois campos que so apontadores para os seus descendentes directos. Pode-se cono a siderar que cada folha ou tem nesses campos (apontador) o valor zero, ou no tem tais campos. a Exerc cio Suponha dada em memria uma rvore binria em que cada elemento tem 4 campos o a a sendo o endereo do primeiro sempre par: c primeiro campo um inteiro de 16 bits em complemento para 2; segundo campo um caracter; terceiro campo o endereo em 24 bits do descendente ` esquerda; c a quarto campo o endereo em 24 bits do descendente ` direita. c a As folhas e os ns so estruturas idnticas. O registo A1 contm o endereo da ra o a e e c z da rvore. a 1. Dado um caracter determinar o n, mais ` esquerda e mais prximo da ra o a o z, que tem tal caracter no segundo campo. 2. Dado um caracter determinar o n, mais ` direita e mais prximo da ra o a o z, que tem tal caracter no segundo campo e cujo primeiro campo contm o maior e inteiro.

1.3.19

Exerc cios Vrios a

1. (exame) Supondo que x, y, z e w so posies de memria onde esto nmeros de 8 a co o a u bits, avaliar, sem usar instrues nem rotinas de multiplicao, a seguinte expresso: co ca a w= 2y 16z, se x par e y + 2z, se x mpar e

2. (exame)Considere um vector em que cada um dos seus elementos tem dois campos: campo 1: campo 2: um caracter (1 byte) um inteiro positivo (2 bytes)

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

42

Suponha que o primeiro elemento do vector est na posio de memria de endereo a ca o c EL1 e que o nmero de elementos est na posio NEL. Escreva um programa que u a ca dentre os elementos cujo campo 1 um dgito (0 a 9) determine o elemento que tem e no campo 2 o menor inteiro. 3. (exame) Escreva um programa para calcular h(n, m) assim denido h(0, m) h(n, 0) h(n, m) h(n, m) = = = = m + 1, n, h(n m, m), h(n, m n), se se se se m0 n>0 nm>0 m>n>0

supondo n e m posies de memria (1 byte) dadas contendo inteiros (sem sinal). co o O valor de h(n, m) dever car na posio result. a ca 4. Escreva uma rotina recursiva que calcule o valor da funo f (x, y) dados x e y, ca inteiros no negativos, nos registos D0 e D1 (em 16 bits), a f (0, y) = 4y f (x + 1, 0) = f (x, x) + 1 f (x + 1, y + 1) = f (x, y) + f (x + 1, 0) 5. (exame) Dado um vector em que cada elemento de 8 bits, escrever uma sub-rotina e para encontrar o maior elemento do vector e colocar na posio de memria R o ca o valor da soma dos elementos contguos do ultimo mximo (pode apenas existir um se a o mximo ocorrer num dos extremos). Supor que o primeiro elemento e o nmero de a u elementos do vector se encontram na posies AR e LEN, respectivamente. co 6. Escreva um programa que calcule todos os nmeros primos at n, usando o crivo de u e Eratstenes: o comee por construir uma lista com todos nmeros mpares de 3 at n; c u e marque todos os mltiplos de 3 maiores que 3 (i.e. escreva por cima um u cdigo especial ex.: 0); o marque todos os mltiplos de 5 maiores que 5; u proceda da mesma forma para cada nmero na lista ainda no marcado; os u a nmeros que restam so primos. u a Assuma que n est em D0 e que pode construir a lista com os nmeros (.W) num a u espao de memria a partir da posio LISTA. c o ca 7. Escrever uma sub-rotina para efectuar a concatenao de duas sequncias de caracca e teres. Os operandos so apontados por A0 e A1 e o resultado deve car no espao a c apontado por A2 que terminado por 0. Caso o resultado no caiba, D0 deve tomar e a valor 1; seno D0 deve ser 0. Suponha que qualquer das sequncias de caracteres a e dadas termina pelo caracter de cdigo 0. o

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000

43

8. No sistema de numerao BCD (Binary Coded Decimal) cada dgito decimal repreca e sentado em 4 bits, e cada inteiro (sem sinal) representado pela sequncia de bits e e obtida por converso de cada um dos seus dgitos decimais para BCD. Por exemplo, a 3859 = 0011 1000 0101 1001(bcd). Escrever uma sub-rotina para resolver cada um dos problemas seguintes. (a) Dada uma sequncia de bytes, cada um dos quais contendo dois dgitos BCD, e descompact-la (isto , re-escrever a sequncia de forma que cada byte contenha a e e apenas um dgito BCD). Supor que a posio apontada por A1 contm os dgitos ca e mais signicativos da sequncia dada, e que o m da sequncia assinalado por e e e um qualquer valor em 4 bits que no representa nenhum dgito BCD. O resultado a deve car no espao apontado por A2 que terminado por 0. Caso a sequncia c e e descompactada no caiba no espao disponvel o byte menos signicativo de D0 a c deve ser $FF; seno, $00. Sugesto: Utilize a instruo de mnemnica AND a a ca o para descompactar cada byte, e a de mnemnica Scc (Set According to Condio tion) para assinalar o erro.

A1

0 0 1

0 1 1 0 1 0

1 1 1

1 1 0

0 0 0 0 0 0

0 1 0

A1

0 0 1

0 1 1

1 0 0

1 1 1

1 1 0

0 0 0

0 0 0

0 1 0

A2

A2

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 1 0 1 1

0 0 1 0 1

1 0 0 0 0

1 0 1 1 1

nicio

m D0.B = 0

(b) Dada uma sequncia de bytes, cada um dos quais contendo um dgito BCD, come pact-la (isto , reescrever a sequncia de forma que cada byte contenha dois a e e dgitos BCD). Supor que a posio apontada por A1 contm inicialmente os ca e dgito mais signicativo da sequncia dada e que no m contm os dois dgitos e e mais signicativos da sequncia compactada. Supor ainda que o resultado satise faz as condies descritas em 38.1 para a sequncia que dada. co e e 9. (exame) Escreva uma rotina que determine se uma sequncia de caracteres s, com e um comprimento mltiplo de 6, verica as seguintes condies: os dois primeiros u co caracteres so iguais ao sexto; o terceiro igual ao stimo; o stimo igual ao oitavo a e e e e e ao dcimo segundo; o nono igual ao dcimo terceiro... e o padro repete-se e e e a enquanto houver caracteres. A sequncia termina com um caracter de cdigo zero. e o Por exemplo, a sequncia e

Dep. Cincia de Computadores Introduo aos Computadores e ca

1.3. INSTRUCOES DO MC68000 aacfgacc1uuc11B561BBBjkBBBhUUBhhiP0h da forma pretendida. e

44

A sequncia deve ser percorrida uma s vez e no m o registo D0 deve conter o valor e o 1 se a sequncia verica as condies e o valor 0, caso contrrio. e co a Suponha que s est em memria, e que ao entrar na rotina o respectivo endereo a o c est no registo A0. No necessita de vericar o comprimento da sequncia. Indique a a e o signicado dos contudos dos restantes registos que utilizar. e 10. (exame) Considere uma sequncia formada por letras minsculas (de a a z) tere u minada pelo caracter 0. Escreva uma rotina que a transforme do modo seguinte: sempre que um caracter ocorra consecutivamente entre duas e nove vezes, essa subsequncia substituda pelo caracter correspondem ao nmero de ocorrncias see e u e guido do caracter em causa. Por exemplo fflooooopppddddddddddddddadddd0 ser a transformada em 2fl5o3p9d5da4d0. Note que se um caracter ocorrer mais de 9 vezes seguidas, consideram-se subsequncias distintas. e Suponha que a sequncia est em memria e ao entrar na rotina o respectivo endereo e a o c est no registo A0. Descreva brevemente o algoritmo a utilizar e o signicado dos a contedos dos registos que utilizar. u 11. (exame) Escreva uma rotina que dada uma matriz de inteiros (16 bits) M de (n + 1) (n + 1), (n inteiro no negativo, de 8 bits) permita determinar a soma dos a valores da diagonal principal (elementos em posies M [i, i], 0 i n). Deve co indicar explicitamente como que a matriz est guardada em memria (incluindo a e a o sua dimenso) e como guardado o resultado. Se o endereo do primeiro elemento a e c da matriz se encontrar no registo A0, pode considerar que os elementos da matriz esto guardados na memria, da seguinte forma: a o

A0 ... (0,0) (0,1) (0,n) (1,0) ... (1,n) ... ...

Dep. Cincia de Computadores Introduo aos Computadores e ca