Você está na página 1de 25

Programando o computador IAS

Edson Borin e Rafael Auler 21 de maro de 2012 c

Introduo ca

O computador IAS foi um dos primeiros computadores a implementar o conceito do programa armazenado. Neste paradigma, o programa armazenado na memria do computador juntamente com os dados. Desta e o forma, a gerao e a carga de programas pode ser feita de forma automatizada, pelo prprio computador. ca o O IAS foi desenvolvido no Instituto de Estudos Avanados de Princeton e sua construo foi liderada por c ca John von Neumann, um matemtico que contribuiu bastante para o campo da cincia da computao. a e ca Este texto apresenta uma breve descrio histrica do surgimento do IAS, a organizao e o funcionamento ca o ca do computador IAS assim como suas instrues e uma breve introduo ` sua programao. co ca a ca A Seo 2 apresenta o cenrio histrico na poca do surgimento do IAS e a motivao para construo ca a o e ca ca do IAS. A Seo 3 apresenta a organizao geral e a Seo 4 descreve o funcionamento do computador IAS. ca ca ca A Seo 5 descreve as instrues e apresenta uma breve introduo ` programao do computador IAS e a ca co ca a ca Seo 6 apresenta uma linguagem de montagem para o computador IAS. ca

O Surgimento do IAS

Durante a segunda guerra mundial, o laboratrio de pesquisa de bal o stica do exrcito dos Estados Unidos e da Amrica nanciou a construo do ENIAC, um computador eletrnico para auxiliar na computao de e ca o ca tabelas de disparo de artilharia. Terminado em 1946, o ENIAC no cou pronto a tempo de ser utilizado a na guerra, mas por ser um computador programvel, foi utilizado por muitos anos para outros propsitos, a o at sua desativao em 1955. O ENIAC considerado por muitos1 o primeiro computador eletrnico de e ca e o propsito geral. o Durante o projeto do ENIAC, seus desenvolvedores observaram que diversos items do projeto original poderiam ser melhorados. No entanto, para manter o cronograma do projeto, as novas ideias no foram a incorporadas ao projeto do ENIAC. Com o intuito de desenvolver um computador melhor, que incorporasse as melhorias propostas pela equipe, os desenvolvedores do ENIAC comearam a discutir o projeto de um c novo computador, o EDVAC. A programao do ENIAC era feita atravs de cabos e interruptores, o que tornava a programao ca e ca um processo lento e tedioso. Uma das melhoras que no puderam ser incorporadas ao projeto original do a ENIAC foi o conceito do programa armazenado, em que o programa armazenado na memria, junto e o com os dados. A inveno deste conceito, presente em todos os computadores de propsito geral atuais, foi ca o creditada ao matemtico John von Neumann, membro do instituto de estudos avanados de princeton, o a c IAS, que trabalhava como consultor no projeto do EDVAC. Durante este tempo, ele escreveu um rascunho com anotaes das reunies do projeto, que foi distribu por um dos membros da equipe para diversas co o do universidades e rgos do governo. Como o manuscrito tinha apenas o nome de John von Neumann, ele foi o a creditado como sendo o inventor do conceito do programa armazenado. Aps a sua participao no projeto do EDVAC, von Neumann voltou para o instituto de estudos avanados o ca c de Princeton e dirigiu o desenvolvimento de um computador que tinha como propsito servir de modelo para o
1 No a

h um consenso sobre qual foi o primeiro computador eletrnico de propsito geral. a o o

a construo de outros computadores no pa Este computador, o IAS, comeou a ser desenvolvido em 1945 ca s. c e cou pronto em 1951. De acordo com Willis Ware, em maro de 1953, o computador IAS j havia executado um grande nmero c a u de programas para calcular conjuntos de equaes diferenciais parciais no lineares para metereologistas co a interessados em previso do tempo. O IAS tambm foi utilizado para resolver problemas relacionados a a e teoria dos nmeros e astronomia. u Diversos computadores tiveram seus projetos derivados ou inspirados no projeto do IAS. Dentre eles: ILLIAC I, JOHNIAC, MANIAC, SILLIAC e outros.

Organizao do IAS ca

A estrutura do computador IAS possui quatro mdulos principais: A memria principal, a unidade de o o controle, a unidade lgica e aritmtica e o mdulo de entrada e sa o e o da. A Figura 1 mostra a organizao geral ca do IAS. Unidade Lgica e o Aritmtica e Memria o Principal Unidade de Controle Entrada e Sa da

Figura 1: Estrutura geral do IAS A memria principal utilizada para armazenar os dados e as instrues (conceito do programa aro e co mazenado). A unidade lgica e aritmtica realiza operaes com dados binrios. A unidade de controle o e co a e responsvel por buscar e executar, uma a uma, as instrues armazenadas na memria principal e, por m, a co o o mdulo de entrada e sa (E/S) permite a insero e a recuperao de dados do computador. o da ca ca

3.1

Memria Principal o

A memria principal do IAS possui 1024 palavras de 40 bits. Cada palavra est associada a um endereo o a c distinto, um nmero que varia de 0 at 1023. A Figura 2 ilustra a organizao da memria do IAS. Neste u e ca o exemplo, a primeira palavra da memria, no endereo 0 (zero), contm o valor 01 06 90 50 67 e a ultima o c e palavra da memria, no endereo 1023, contm o valor 20 1A F9 10 AB. o c e A memria principal do IAS realiza duas operaes bsicas: escrita e leitura de valores nas o co a palavras da memria. Tanto a escrita quanto a leitura so controladas (iniciadas) pela unidade de controle o a (UC) do IAS. A UC pode solicitar ` memria principal a escrita de um valor em um determinado endereo a o c da memria. Nesta operao, a memria recebe como entrada o endereo e o valor a ser escrito. A UC o ca o c tambm pode solicitar ` memria a leitura de um dado armazenado em uma palavra. Neste caso, a UC e a o envia o endereo da palavra que contm o dado a ser lido e a memria retorna o valor lido. c e o Cada palavra da memria principal do IAS pode armazenar um nmero de 40 bits ou duas instrues de o u co 20 bits 2 . Os nmeros so representados em complemento de dois. As instrues, apresentadas em detalhe u a co
2 Os n meros de 40 bits fazem parte do conjunto de dados do programa, em contraste `s instrues, que compem a lgica de u a co o o um programa. O uso da memria para esses dois propsitos foi a novidade introduzida com o conceito do programa armazenado. o o

40 bits 0 1 2 1022 1023 01 06 90 50 67 00 02 6A 01 25 01 36 AA 04 11 FF 0A FA 0A 1F 20 1A F9 10 AB

Figura 2: Organizao da memria do computador IAS ca o na Seo 5, possuem dois campos, o cdigo da operao, de 8 bits, e o endereo, de 12 bits. A Figura 3 ca o ca c ilustra a representao de nmeros e instrues em uma palavra de memria. ca u co o 0 39

40 bits
(a) Um n mero de 40 bits em uma palavra da memria u o

0 opcode

79 Endereo c

19 20 opcode 40 bits

27 28 Endereo c

39

(b) Duas instrues de 20 bits em uma palavra da memria co o

Figura 3: Representao de (a) nmeros e (b) instrues em palavras da memria principal do IAS ca u co o

3.2

Unidade de Controle

A unidade de controle (UC) do IAS reponsvel por coordenar cada um dos mdulos para que o computador e a o execute as instrues armazenadas na memria. A unidade de controle dispe de um circuito de controle e co o o quatro registradores internos. Registradores so pequenas unidades de memria que se situam tipicamente a o dentro do processador utilizadas para armazenar valores temporrios. A operao de escrita ou leitura de a ca dados em registradores mais rpida do que a escrita ou leitura de dados na memria principal. Entretanto, e a o registradores so fabricados com uma tecnologia que demanda mais rea e de maior custo. Tipicamente, a a associamos palavras da memria a um endereo, entretanto registradores so frequentemente associados a o c a nomes. A unidade de controle do IAS possui os seguintes registradores: PC: o Program Counter, ou contador do programa, armazena um valor que representa o endereo da c memria que possui o prximo par de instrues a serem executadas. No in o o co cio, quando o computador ligado, o contedo deste registrador zerado para que a execuo de instrues se inicie a partir do e u e ca co endereo zero da memria. c o MAR: o Memory Address Register, ou registrador de endereo da memria, armazena um valor que c o representa um endereo de uma palavra da memria. Este endereo ser lido pela memria durante a c o c a o operao de leitura ou escrita de dados. ca

IR: o Instruction Register, ou registrador de instruo, armazena a instruo que est sendo executada ca ca a no momento. O circuito de controle da unidade de controle l e interpreta os bits deste registrador e e envia sinais de controle para o resto do computador para coordenar a execuo da instruo. ca ca IBR: o Instruction Buer Register serve para armazenar temporariamente uma instruo. O IAS ca busca instrues da memria em pares - lembre-se de que uma palavra da memria (de 40 bits) contm co o o e duas instrues (de 20 bits). Dessa forma, quando o IAS busca um par de instrues, a primeira co co instruo armazenada diretamente em IR e a segunda em IBR. Ao trmino da execuo da primeira ca e e ca instruao (em IR), o computador move a segunda instruo (armazenada em IBR) para IR e a executa. c ca A Figura 4 ilustra a organizao interna da unidade de controle. As setas indicam caminhos onde os ca dados podem trafegar. Por exemplo, a seta entre o registrador IR e o circuito de controle indica que os bits armazenados no registrador IR podem ser transferidos para os circuitos de controle. MAR PC

IR

IBR

Circuitos Sinais de de controle Controle Unidade de Controle Figura 4: Organizao da unidade de controle (UC) do IAS ca

3.3

Unidade Lgica e Aritmtica o e

A unidade lgica e aritmtica do IAS, ou ULA, responsvel por realizar operaes aritmticas e lgicas nos o e e a co e o dados armazenados no computador. No IAS, a ULA composta por circuitos lgicos e aritmticos e trs e o e e registradores, descritos a seguir: MBR: o Memory Buer Register, ou registrador temporrio da memria, um registrador utilizado a o e para armazenar temporariamente os dados que foram lidos da memria ou dados que sero escritos o a na memria. Para escrever um dado na memria, o computador deve colocar o dado no registrador o o MBR, o endereo da palavra na qual o dado deve ser armazenado no registrador MAR e, por m, enviar c sinais de controle para a memria realizar a operao de escrita. Assim sendo, os registradores MAR e o ca MBR, juntamente com os sinais de controle enviados pela unidade de controle, formam a interface da memria com o restante do computador. o AC e MQ: O Accumulator, ou acumulador, e o Multiplier Quotient, ou quociente de multiplicao, ca so registradores temporrios utilizados para armazenar operandos e resultados de operaes lgicas a a co o e aritmticas. Por exemplo, a instruo que realiza a soma de dois nmeros (ADD) soma o valor e ca u armazenado no registrador AC com um valor armazenado na memria e grava o resultado da operao o ca no registrador AC. A Figura 5 mostra a organizao detalhada da unidade lgica e aritmtica e sua comunicao com o ca o e ca restante do computador.

Memria Principal o

Entrada e Sa da

MAR

PC MBR

IR

IBR Circuitos Lgicos o e Aritmticos e

Circuitos Sinais de de controle Controle Unidade de Controle

AC

MQ

Unidade Lgica e Aritmtica o e

Figura 5: Organizao detalhada da unidade lgica e aritmtica e sua comunicao com o restante do ca o e ca computador

Operao do IAS ca

O computador IAS executa programas armazenados na memria principal do computador. Os programas o so implementados como uma sequncia de instrues e o IAS executa estas instrues uma a uma. A a e co co execuo das instrues pode envolver o acesso ` memria para leitura ou escrita de dados ou instrues3 . ca co a o co Desta forma, antes de discutirmos o processo de execuo de instrues, vamos estudar em mais detalhes ca co como o computador escreve e l dados da memria principal. e o

4.1

Operaes de Escrita e Leitura na Memria co o

Para ler um dado armazenado em uma palavra da memria necessrio especicar o endereo da palavra na o e a c memria. No IAS, este endereo deve ser gravado no registrador MAR (registrador de endereo da memria) o c c o antes de solicitar a leitura do dado ` memria. Ao nal da operao de leitura, a memria grava o valor lido a o ca o no registrador MBR (registrador temporrio da memria). Os seguintes passos so executados para se ler um a o a dado da memria: o 1. O endereo da palavra a ser lida escrito no registrador MAR; c e 2. Os circuitos de controle da unidade de controle (UC) enviam um sinal de controle atravs de um canal e de comunicao de controle4 ` memria principal, solicitando a leitura do dado; ca a o 3. A memria principal l o endereo do registrador MAR atravs do canal de comunicao de endereos o e c e ca c e, de posse do endereo, l o valor armazenado da palavra de memria associada a este endereo; c e o c 4. Por m, a memria principal grava o valor lido no registrador MBR atravs do canal de comunicao de o e ca dados. A operaao de escrita parecida mas, neste caso, alm do endereo em MAR, devemos colocar o valor a c e e c ser armazenado em MBR. Os seguintes passos so executados para se escrever um dado da memria. a o
que instrues tambm podem ser escritas na memria co e o canal de comunicao implementados geralmente por meio de os e os sinais ou dados trafegam em forma de pulsos ca e eltricos. e
4O 3 Note

1. O endereo da palavra que armazenar o dado escrito no registrador MAR; c a e 2. O dado a ser armazenado gravado no registrador MBR; e 3. Os circuitos de controle da unidade de controle (UC) enviam um sinal de controle ` memria principal, a o solicitando a escrita do dado; 4. A memria principal l o endereo do registrador MAR atravs de canal de comunicao de dados, l o o e c e ca e dado do registrador MBR e armazena este valor na palavra de memria associada ao endereo lido de o c MAR; A Figura 6 ilustra os canais de comunicao de dados (azul), endereos (vermelho) e sinais de controle ca c (verde) utilizados na comunicao com a memria. ca o

Memria Principal o

Entrada e Sa da

MAR

PC MBR

IR Circuitos de controle

IBR Circuitos Lgicos o e Aritmticos e Sinais de Controle AC MQ

Unidade de Controle

Unidade Lgica e Aritmtica o e

Figura 6: Canais de comunicao de dados (azul), endereos (vermelho) e sinais de controle (verde) na ca c comunicao com a memria. ca o A prxima seo descreve o processo de execuo de instrues no computador IAS. o ca ca co

4.2

Execuo de Instrues ca co

As instrues do IAS so executadas uma a uma atravs de uma sequncia de operaes orquestradas pela co a e e co unidade de controle. Inicialmente, quando ligado, o computador executa a instruo ` esquerda da primeira ca a palavra da memria (endereo 0) e depois a instruo ` direita da primeira palavra da memria. Em seguida, o c ca a o o computador prossegue executando a instruo ` esquerda da segunda palavra da memria (endereo 1) e ca a o c assim por diante, uma aps a outra. o a E vlido lembrar que algumas instrues do computador podem desviar o uxo de execuo das insco ca trues, fazendo com que a prxima instruo a ser executada no seja a instruo subsequente na memria. co o ca a ca o Mas antes de discutirmos instrues que podem desviar o uxo de execuo, vamos supor que as instrues co ca co so executadas em sequncia, na ordem em que aparecem na memria. a e o A execuo de uma instruo realizada em dois ciclos: o ciclo de busca e o ciclo de execuo. O ca ca e ca ciclo de busca consiste em buscar a instruo da memria (ou do registrador IBR) e armazenar no IR. O ca o ciclo de execuo, por sua vez, consiste em interpretar a instruo armazenada no registrador IR e realizar ca ca as operaes necessrias para execuo da mesma. co a ca

Ciclo de Busca No ciclo de busca, a instruo a ser executada buscada e armazenada no registrador ca e de instruo, ou IR. O registrador PC contm o endereo da prxima instruo que deve ser executada. ca e c o ca Quando o computador ligado, o registrador PC iniciado com o valor zero, indicando que a execuo deve e e ca ser iniciada a partir da instruo armazenada na primeira palavra da memria. Assim sendo, no in da ca o cio execuo, o computador utiliza o endereo armazenado em PC (zero neste caso) para buscar a instruo a ser ca c ca executada na memria. Como a memria do IAS armazena palavras de 40 bits, a leitura do endereo zero o o c da memria retornar duas instrues (cada instruo tem 20 bits). A m de preservar a segunda instruo, o a co ca ca o computador armazena a instruo ` direita no registrador IBR, enquanto que a instruo ` esquerda ca a ca a e transferida para o IR. Ao executar a prxima instruo, o computador transferir o contedo do registrador o ca a u IBR para o registrador IR e no precisar fazer a busca da instruo na memria. Dessa forma, o ciclo de a a ca o busca pode ser dividido em duas partes: ciclo de busca de instrues ` esquerda e ciclo de busca de instrues co a co a ` direita. O ciclo de busca de instrues ` esquerda consiste basicamente nos seguintes passos: co a 1. A UC move o endereo em PC para MAR; c 2. A UC envia um sinal de controle para a memria fazer uma operao de leitura; o ca 3. A memria l a palavra de memria e transfere o contedo para o registrador MBR; o e o u 4. A UC copia a segunda metade (bits 20 a 39) do registrador MBR e salva no registrador IBR. Estes bits correspondem ` instruo ` direita da palavra de memria. a ca a o 5. A UC copia os 8 bits ` esquerda do registrador MBR para o registrador IR. Estes bits correspondem ao a campo de operao da instruo ` esquerda da palavra de memria. ca ca a o 6. A UC copia os 12 bits subsequentes ao campo de operao (bits 8 a 19) e os transfere para o registrador ca MAR. Estes bits correspondem ao campo endereo da instruo e devem estar no registrador MAR caso a c ca instruao precise acessar a memria durante o ciclo de execuo. c o ca 7. A UC incrementa o valor no registrador PC, indicando que o prximo par de instrues a ser lido da o co memria deve ser lido do endereo PC + 1. o c A leitura da memria pode no ser necessria no ciclo de busca de instrues ` direita, pois a instruo o a a co a ca pode estar armazenada no registrador IBR caso a ultima instruo executada tenha sido a instruo ` esquerda ca ca a na mesma palavra de memria. Note, no entanto, que instrues que desviam o uxo de controle podem o co fazer com que uma instruo ` direita seja executada sem que a instruo ` esquerda da mesma palavra de ca a ca a memria seja executada. Neste caso, o ciclo de execuo da instruo ` direita precisa buscar a instruo o ca ca a ca da memria, visto que a instruo presente no registrador IBR no corresponde ` instruo a ser executada. o ca a a ca Os seguintes passos descreve o ciclo de busca de instrues ` direita: co a 1. Se a ultima instruo executada foi a instruo ` esquerda (no houve desvio no uxo de controle), ca ca a a ento: a (a) A UC copia os 8 bits ` esquerda do registrador IBR para o registrador IR. Estes bits correspondem a ao campo de operao da instruo armazenada em IBR. ca ca (b) A UC copia os 12 bits subsequentes ao campo de operao (bits 8 a 19) e os transfere para ca o registrador MAR. Estes bits correspondem ao campo endereo da instruo e devem estar no c ca registrador MAR caso a instruo precise acessar a memria durante o ciclo de execuo. ca o ca 2. Seno: a (a) A UC move o endereo em PC para MAR; c (b) A UC envia um sinal de controle para a memria fazer uma operao de leitura; o ca (c) A memria l a palavra de memria e transfere o contedo para o registrador MBR; o e o u 7

(d) A UC copia os bits 20 a 27 do registrador MBR para o registrador IR. Estes bits correspondem ao campo de operao da instruo ` direita da palavra de memria lida. ca ca a o (e) A UC copia os 12 bits subsequentes ao campo de operao (bits 28 a 39) e os transfere para o ca registrador MAR. Estes bits correspondem ao campo endereo da instruo ` direita da palavra de c ca a memria. o (f) A UC incrementa o valor no registrador PC, pois a instruo ` esquerda no foi executada e o ca a a mesmo no foi incrementado anteriormente. a Ciclo de Execuo Cada instruo executa passos distintos durante sua execuo, caso contrrio, elas ca ca ca a teriam a mesma funcionalidade. Cabe aos circuitos de controle identicar a instruo armazenada no regisca trador IR e orquestrar a execuo dos passos apropriados para a execuo da instruo. Os seguintes passos ca ca ca mostram o ciclo de execuo de uma instruo: ca ca 1. Interpretao dos bits do campo operao da instruo, armazenados em IR. Esta operao tambm ca ca ca ca e e chamada de decodicao, pois a operao a ser realizada se encontra codicada, em forma de nmeros, ca ca u dentro do campo operao. ca 2. Aps a identicao da instruo, a UC verica se a instruo requer a busca de operandos da memria. o ca ca ca o Se a busca for necessria, ento: a a (a) A UC envia um sinal para a memria realizar uma operao de leitura. Note que o endereo do o ca c operando j foi transferido para o registrador MAR durante o ciclo de busca. a (b) A memria l a palavra de memria e transfere o contedo para o registrador MBR; o e o u 3. Se a instruo envolve a realizao de uma operao lgica ou aritmtica: ca ca ca o e (a) A UC envia sinais de controle para a unidade lgica aritmtica realizar a operao associada com a o e ca instruo. Note que neste ponto todos os operandos da operao j se encontram em registradores ca ca a na unidade lgica e aritmtica. o e (b) A ULA realiza a operao lgica ou aritmtica de acordo com os sinais enviados pela UC. Estas ca o e operaes incluem transferncia de dados entre registradores da ULA, soma, subtrao, multico e ca plicao, diviso e outras. ca a (c) A ULA grava o resultado da operao em seus registradores: AC, MQ ou MBR. ca 4. Se a instruo envolve a gravao do resultado na memria: ca ca o (a) A UC envia um sinal para a memria realizar uma operao de escrita. Note que o endereo o ca c do operando j foi transferido para o registrador MAR durante o ciclo de busca e o dado j foi a a transferido de AC para MBR no passo anterior. (b) A memria l o dado de MBR e o grava na palavra de memria associada ao endereo lido de MAR. o e o c 5. Se a execuo da instruo implica no desvio do uxo de controle, ou seja, se a instruo salta para ca ca ca uma outra instruo: ca (a) A UC move o contedo do registrador MAR para PC. Note que o registrador MAR contm o valor u e do campo endereo da instruo sendo executada. No caso de instrues de salto, este campo c ca co contm o endereo da instruo para o qual o uxo de execuo deve ser desviado. e c ca ca (b) Caso a execuo corresponda a um salto para a instruo ` esquerda da palavra de memria ca ca a o selecionada, d-se in a cio ao ciclo de busca de instruo ` esquerda. Caso o salto seja para a ca a instruo ` direita, o ciclo de busca de instruo ` direita com desvio de uxo iniciado. ca a ca a e

Como veremos na Seo 5, a instruo ADD M(X) uma instruo que soma o contedo do registrador ca ca e ca u AC ao contedo da palavra de memria armazenada no endereo X e grava o resultado no registrador AC. A u o c t tulo de exemplo, os seguintes passos mostram o ciclo de execuo da instruo: ca ca 1. A UC interpreta os bits armazenados em IR (0000 0101 no caso da instruo ADD M(X)) e identica a ca instruao como sendo uma soma. c 2. Aps a identicao da instruo, o UC sabe que a instruo requer a busca de operandos da memria. o ca ca ca o Dessa forma: (a) A UC envia um sinal para a memria realizar uma operao de leitura. Relembrando que o o ca endereo do operando j foi transferido para o registrador MAR durante o ciclo de busca. c a (b) A memria l a palavra de memria e transfere o contedo para o registrador MBR; o e o u 3. A UC sabe que a instruo ADD envolve a realizao de uma operao de soma na ULA, ento: ca ca ca a (a) A UC envia sinais para a unidade lgica e aritmtica (ULA) solicitando a realizao da soma dos o e ca valores armazenados em AC e MBR. Note que neste ponto todos os operandos da operao j se ca a encontram em AC e MBR. (b) A ULA realiza a operao de soma. ca (c) A ULA grava o resultado da soma no registrador AC. ULA: AC, MQ ou MBR. Note que os passos 4 (armazenamento do resultado na memria) e 5 (desvio do uxo de controle) no o a so necessrios nesta instruo. a a ca

Instrues e Programao do IAS co ca

O conjunto de instrues do computador IAS possui 20 instrues. As instrues podem ser classicadas em co co co 4 tipos distintos: Transferncia de dados: instrues para mover dados entre a memria e os registradores; e co o Salto: instrues para desviar o uxo da execuo das instrues. co ca co Aritmtica: instrues para realizao de operaes aritmticas. e co ca co e Modicao de endereo: instrues para alterar o campo endereo de outras instrues. ca c co c co Todas as instrues do IAS possuem 20 bits. Alm disso, todas as instrues so organizadas em um co e co a unico formato, com dois campos: cdigo da operao e endereo. O campo cdigo da operao, ou opcode, o ca c o ca possui 8 bits, enquanto que o campo endereo possui 12 bits. A Figura 3b ilustra o formato das instrues c co do computador IAS.

5.1

Instrues de Transferncia de Dados co e

As instrues de transferncia de dados so utilizadas para mover dados entre os registradores e a memria. co e a o Por exemplo, a instruo LOAD M(X) uma instruo de transferncia de dados que transfere o dado ca e ca e armazenado na palavra da memria associada ao endereo X para o registrador AC. A instruo LOAD MQ, o c ca no entanto, uma instruo de transferncia de dados que transfere o dado armazenado no registrador MQ e ca e para o registrador AC. Como veremos mais adiante, a unidade lgica e aritmtica realiza operaes com valores armazenados na o e co memria e nos registradores AC e MQ. Para inicializar os valores de AC e MQ antes de executar uma instruo o ca aritmtica ou lgica, podemos executar um instruo de transferncia de dados para transferir um dado da e o ca e 9

Sintaxe LOAD M(X)

Operao ca AC := Mem[X]

Codicao ca 00001010 X

Transfere o valor armazenado no endereo X da memria para o regisc o trador MQ. Figura 7: Instruo LOAD M(X) ca memria para AC ou MQ. Para transferir um dado armazenado na memria para o registrador AC, podemos o o utilizar a instruo LOAD M(X) descrita na Figura 7. ca Podemos utilizar a instruo LOAD MQ,M(X), descrita na Figura 8, para transferir um dado armazenado ca na memria para o registrador MQ. o Sintaxe LOAD MQ,M(X) Operao ca MQ := Mem[X] Codicao ca 00001001 X

Transfere o valor armazenado no endereo X da memria para o regisc o trador MQ. Figura 8: Instruo LOAD MQ,M(X) ca Os resultados de operaes lgicas e aritmticas no computador IAS so armazenados nos registradores co o e a AC e MQ. Aps a execuo de uma operao lgica ou aritmtica, pode ser interessante armazenar o resultado o ca ca o e da operao na memria. Para transferir um dado armazenado no registrador AC para a memria podemos ca o o utilizar a instruo apresentada na Figura 9, o STOR M(X). ca Sintaxe STOR M(X) Operao ca Mem[X] := AC Codicao ca 00100001 X

Transfere o contedo do registrador AC para a palavra da memria no u o endereo X. c Figura 9: Instruo STOR M(X) ca O computador IAS no possui uma instruo capaz de transferir diretamente um dado armazenado no a ca registrador MQ para a memria. No entanto, a instruo LOAD MQ, descrita na Figura 10, pode ser utilizada o ca para transferir o dado armazenado em MQ para o registrador AC. Assim sendo, basta executarmos a instruo ca LOAD MQ e a instruo STOR M(X) na sequncia para armazenarmos o dado do registrador MQ na memria. ca e o Sintaxe LOAD MQ AC := MQ Operao ca Codicao ca 00001010

Transfere o contedo do registrador MQ para o registrador AC. u Figura 10: Instruo LOAD MQ ca

10

O computador IAS possui ainda duas instrues especiais para transferir dados da memria para o regisco o trador AC: LOAD |M(X)| e LOAD -|M(X)|. A instruo LOAD |M(X)| (Figura 11) carrega o valor absoluto ca do nmero armazenado no endereo X da memria, enquanto que a instruo LOAD -M(X) (Figura 12) carrega u c o ca o negativo do nmero armazenado no endereo X da memria. u c o Sintaxe LOAD |M(X)| Operao ca AC := |Mem[X]| Codicao ca 00000011 X

Transfere o absoluto do valor armazenado no endereo X da memria c o para o registrador AC. Figura 11: Instruo LOAD |M(X)| ca

Sintaxe LOAD -M(X)

Operao ca AC := -(Mem[X])

Codicao ca 00000010 X

Transfere o negativo do valor armazenado no endereo X da memria c o para o registrador AC. Figura 12: Instruo LOAD -M(X) ca

5.2

Instrues Aritmticas co e

O computador IAS possui 8 instrues para realizao de operaes lgicas e aritmticas. Estas instrues co ca co o e co so descritas a seguir. a A instruao ADD M(X), descrita na Figura 13, soma dois nmeros e armazena o resultado no registrador c u AC. Sintaxe ADD M(X) Operao ca AC := AC + Mem[X] Codicao ca 00000101 X

Soma o valor armazenado no endereo X da memria com o valor armac o zenado no registrador AC e armazena o resultado no registrador AC. Figura 13: Instruo ADD M(X) ca As instrues aritmticas que precisam de 2 operandos, como a soma, buscam um dos operandos da co e memria e o outro do registrador AC ou MQ, internos ` unidade lgica aritmtica. No caso da soma, se quisero a o e mos adicionar dois nmeros armazenados na memria, necessrio executar uma instruo de transferncia u o e a ca e de dados para transferir um dos operandos da memria para o registrador AC. O exemplo abaixo ilustra um o programa em linguagem de montagem onde os valores armazenados nos endereos 100 e 101 so somados e c a o resultado armazenado no endereo 102 da memria. e c o
1 2 3

LOAD M(100) ADD M(101) STOR M(102)

# AC := Mem[100] # AC := AC + Mem[101] # Mem[102] := AC 11

A instruo ADD |M(X)|, descrita na Figura 14, uma variao da instruo soma onde o valor do ca e ca ca registrador AC somado com o valor absoluto do operando carregado da memria. e o Sintaxe ADD |M(X)| Operao ca AC := AC + |Mem[X]| Codicao ca 00000111 X

Soma o absoluto do valor armazenado no endereo X da memria com c o o valor armazenado no registrador AC e armazena o resultado no registrador AC. Figura 14: Instruo ADD |M(X)| ca O computador IAS tambm possui duas instrues para realizar a subtrao de nmeros: SUB M(X) e e co ca u SUB |M(X)|, descritas nas Figuras 15 e 16, respectivamente. Sintaxe SUB M(X) Operao ca AC := AC - Mem[X] Codicao ca 00000110 X

Subtrai o valor armazenado no endereo X da memria do valor armac o zenado no registrador AC e armazena o resultado no registrador AC. Figura 15: Instruo SUB M(X) ca

Sintaxe SUB |M(X)|

Operao ca AC := AC - |Mem[X]|

Codicao ca 00001000 X

Subtrai o absoluto do valor armazenado no endereo X da memria do c o valor armazenado no registrador AC e armazena o resultado no registrador AC. Figura 16: Instruo SUB |M(X)| ca A instruo MUL M(X) (Figura 17) utilizada para realizar a multiplicao de dois nmeros. Os ca e ca u operandos da multiplicao devem estar armazenados no registrador MQ e no endereo X da memria. A ca c o multiplicao de dois nmeros de 40 bits pode resultar em um nmero de at 80 bits. Como o IAS no ca u u e a possui registradores de 80 bits para armazenar o resultado, o mesmo armazenado em dois registradores: e AC e MQ. A parte baixa do resultado, ou seja, os bits menos signicativos, armazenada no registrador e MQ, enquanto que a parte alta armazenada no registrador AC. e A operao de diviso no IAS realizada pela instruo DIV M(X) (Figura 18). O dividendo deve ca a e ca estar armazenado no registrador AC e o divisor no endereo X da memria principal. Como resultado, a c o diviso produz dois nmeros, o quociente e o resto. O quociente armazenado no registrador MQ e o resto a u e no registrador AC. Alm das operaes aritmticas, o IAS possui duas operaes lgicas: RSH e LSH. A instruo RSH e co e co o ca desloca todos os bits do registrador AC para a direita. Ou seja, o bit 39 recebe o valor do bit 38, o bit 38 recebe o valor do bit 37 e assim por diante. Por m, o bit 0 recebe o valor 0. 12

Sintaxe MUL M(X)

Operao ca AC:MQ := MQ * Mem[X]

Codicao ca 00001011 X

Multiplica o valor no endereo X da memria pelo valor em MQ e armac o zena o resultado em AC e MQ. O resultado um nmero de 80 bits. Os e u 40 bits mais signicativos so armazenados em AC e os 40 bits menos a signicativos so armazenados em MQ. a Figura 17: Instruo MUL M(X) ca Sintaxe DIV M(X) AC:=AC%Mem[X] Divide o valor em AC pelo valor armazenado no endereo X da memria. c o Coloca o quociente em MQ e o resto em AC. Figura 18: Instruo DIV M(X) ca Sintaxe RSH Operao ca AC := AC >> 1 Codicao ca 00010101 X Operao ca MQ:=AC/Mem[X] Codicao ca 00001100 X

Desloca os bits do registrador AC para a direita. Figura 19: Instruo RSH ca Alm de ser uma operao lgica (deslocamento de bits), a instruo RSH pode ser utilizada para realizar a e ca o ca diviso de um nmero por 2. Note que, quando deslocamos os d a u gitos binrios de um nmero na representao a u ca binria para a direita, eliminando o ultimo d a gito, o resultado a metade do nmero. Como podemos ver no e u exemplo abaixo, se deslocarmos5 os d gitos binrios do nmero 5 (0000 01012 ) para a direita, o resultado a u e o nmero 2. Note que o resultado nal corresponde ao quociente da diviso. Como podemos ver no mesmo u a exemplo, o mesmo acontece para o nmero 8. u

0000 01012 (510 ) >> 1 0000 10002 (810 ) >> 1

= =

0000 00102 (210 ) 0000 01002 (410 )

A instruo LSH (Figura 20) realiza a operao inversa ` instruo RSH, ou seja, ela desloca os bits do ca ca a ca valor no registrador AC para a esquerda. Analogamente, o resultado aritmtico a multiplicao do nmero e e ca u por 2.
5 O operador >> utilizado para representar o deslocamento de bits em algumas linguagens de programao de alto n e ca vel, como C.

13

Sintaxe LSH

Operao ca AC := AC << 1

Codicao ca 00010100 X

Desloca os bits do registrador AC para a esquerda. Figura 20: Instruo LSH ca

5.3

Instrues de Salto co

Uma das principais funcionalidades de um computador a capacidade de executar trechos de cdigo de e o um programa repetidas vezes ou sob determinadas condies. Esta funcionalidade permite ao programador co expressar comandos condicionais como if-then-else ou comandos de repetio como for e while. ca A implementao destes comandos feita atravs de saltos no cdigo da aplicao. No caso do IAS, a ca e e o ca instruo JUMP M(X) (Figuras 21 e 22) pode ser utilizada para desviar o uxo de execuo, ou saltar, para ca ca a instruo no endereo X da memria. O programa em linguagem de montagem a seguir mostra como esta ca c o instruo pode ser utilizada para se implementar um lao que adiciona o valor armazenado no endereo 101 ca c c da memria ao valor armazenado no endereo 100 da memria. o c o
1 2 3

Endereo c 000 001

Instru~es co LOAD M(100); STOR M(100);

ADD M(101) JUMP M(000,0:19)

Neste exemplo, as instrues LOAD, ADD e STOR so executadas na sequncia para somar os valores armaco a e zenados nos endereos 100 e 101 e armazenar o resultado no endereo 100. Em seguida, a instruo JUMP c c ca desvia o uxo de execuo, informando ao processador que a prxima instruo a ser executada deve ser ca o ca buscada do endereo 000 da memria. Dessa forma, as instrues LOAD, ADD, STOR e JUMP sero executadas c o co a repetidamente. Note que o IAS armazena duas instruoes em uma mesma palavra da memria: uma ` esquerda e outra c o a a ` direita da palavra. Assim sendo, o IAS possui duas instrues JUMP, uma que salta para a instruo ` co ca a esquerda da palavra no endereo M (X) (Figura 21), e outra que salta para a instruo ` direita da palavra c ca a no endereo M (X) (Figura 22). c Sintaxe JUMP M(X,0:19) Operao ca PC := M(X) e executa instruo ca a ` esquerda. Codicao ca 00001101 X

Salta para a instruo ` esquerda (bits 0 a 19) da palavra de memria ca a o armazenada no endereo M(X). c Figura 21: Instruo JUMP M(X,0:19) ca No exemplo anterior, as instrues LOAD, ADD, STOR e JUMP so executadas repetidamente em um ciclo co a que no tem m, a no ser que o computador seja desligado. Este ciclo sem m, ou lao innito, ocorre a a c porque no h uma condio de parada para o lao. Para criarmos uma condio de parada no lao devemos a a ca c ca c utilizar uma instruo que desvia o uxo de execuo condicionalmente, ou seja, uma instruo de salto ca ca ca condicional. No caso do IAS, esta instruo a JUMP+ M(X) (Figuras 23 e 24). ca e A instruo JUMP+ M(X) salta para a instruo no endereo X da memria somente se o valor armazenado ca ca c o no registrador AC for maior ou igual a 0, ou seja, se AC for no negativo. Caso contrrio (o valor em AC for a a 14

Sintaxe JUMP M(X,20:39)

Operao ca PC := M(X) e executa instruo ca a ` direita.

Codicao ca 00001110 X

Salta para a instruo ` direita (bits 20 a 39) da palavra de memria ca a o armazenada no endereo M(X). c Figura 22: Instruo JUMP M(X,20:39) ca negativo), o uxo de execuo segue normalmente, executando-se a instruo subsequente ` instruo JUMP+. ca ca a ca O exemplo a seguir mostra um programa que executa o mesmo trecho de cdigo do exemplo anterior por 10 o vezes, ou seja, um lao com 10 iteraes. c co Endereo c 000 001 002 003 102 103 Instru~es / Dados co LOAD STOR SUB JUMP+ M(100); M(100); M(103); M(000,0:19); ADD M(0101) LOAD M(0102) STOR M(0102) ...

1 2 3 4 5 6 7 8 9

00 00 00 00 09 # Contador 00 00 00 00 01 # Constante 1

Neste exemplo, o contador armazenado no endereo 102 (inicializado com o valor 9) decrementado c e repetidamente at que o seu valor seja menor do que 0, ou seja, at que o valor seja negativo. Neste caso, e e a instruo JUMP+ no desvia o uxo de execuo para a instruo no endereo 000 da memria, fazendo ca a ca ca c o com que a execuo saia do lao. ca c Sintaxe JUMP+ M(X,0:19) Operao ca Se AC0 ento PC:=M(X) e exea cuta instruo ` esquerda, seno, ca a a executa a prxima instruo. o ca Codicao ca 00001111 X

Salta para a instruo ` esquerda (bits 0 a 19) da palavra de memria ca a o se o valor armazenado em AC for maior ou igual ` zero. a Figura 23: Instruo JUMP+ M(X,0:19) ca Instrues de salto condicional tambm podem ser utilizadas para implementar construes if-then-else. co e co O exemplo a seguir ilustra como estas instrues podem ser utilizadas em conjunto com instrues de salto co co incondicional (JUMP) para implementar construes if-then-else: co Endereo c 000 001 002 Instru~es / Dados co LOAD M(100); SUB M(101) # Se Y > X JUMP+ M(003,0:19); LOAD M(101) # Z = Y STOR M(102); JUMP M(004,0:19) # sen~o a 15

1 2 3 4 5

Sintaxe JUMP+ M(X,20:39)

Operao ca Se AC0 ento PC:=M(X) e exea cuta instruo ` direita, seno, ca a a executa a prxima instruo. o ca

Codicao ca 00010000 X

Salta para a instruo ` direita (bits 20 a 39) da palavra de memria se ca a o o valor armazenado em AC for maior ou igual ` zero. a Figura 24: Instruo JUMP+ M(X,20:39) ca

6 7 8 9 10 11

003 004 100 101 102

LOAD ...

M(100);

STOR M(102)

Z = X

00 00 00 00 01 00 00 00 00 02 00 00 00 00 00

# Varivel X a # Varivel Y a # Varivel Z a

No exemplo anterior, as instrues LOAD M(0100), SUB M(0101) e JUMP+ M(0003,0:19) so utilizadas co a para comparar se Y > X. Note que AC recebe o resultado da subtrao X - Y. Se Y for maior que X, ento ca a o resultado em AC ser um nmero negativo, e o salto condicional (JUMP+) no ser tomado. Do contrrio a u a a a (XY), o resultado em AC ser maior ou igual ` zero, e o salto condicional ser tomado. Caso o salto no a a a a seja tomado (Y > X), as instrues LOAD M(0101), STOR M(0102) e JUMP M(0004,0:19) sero executadas, co a movendo o contedo de Y para Z e desviando o uxo de execuo para a instruo no endereo 004, aps o u ca ca c o if-then-else. Caso o salto condicional seja tomado (XY), as instrues LOAD M(0100) e STOR M(0102) co sero executadas, movendo o valor de X para Z. Note que, neste caso, no h a necessidade de inserir uma a a a instruo para saltar para o endereo da instruo aps o if-then-else, pois a instruo subsequente ao ca c ca o ca STOR (no endereo 004) j a instruo que deve ser executada. c ae ca

5.4

Instrues de Modicao de Endereo co ca c

As instrues de transferncia de dados e aritmticas que acessam dados da memria so anotadas com co e e o a o endereo do dado na memria no campo endereo da instruo. Note que este endereo xo e no c o c ca c e a permite que uma mesma instruo seja usada para acessar dados em endereos distintos da memria. Esta ca c o decincia ca clara quando trabalhamos com vetores. Vetores (arrays) so conjuntos ordenados de dados e a armazenados de forma consecutiva na memria. Tipicamente, programas que processam dados em vetores o utilizam laos que iteram mltiplas vezes acessando um elemento distinto do vetor em cada iterao. Por c u ca exemplo, cdigo da funo soma elementos, a seguir, soma todos os elementos do vetor A. o ca int A[1024]; int soma_elementos() { int i; int soma=0; for (i=0; i<1024; i++) soma = soma + A[i]; return soma; }

1 2 3 4 5 6 7 8 9 10

16

J sabemos como implementar laos com o conjunto de instrues do IAS, entretanto, precisamos fazer a c co com que uma mesma instruo acesse dados em endereos diferentes da memria ` medida em que as iteraes ca c o a co do lao so executadas. Para isso, o IAS dispe de duas instrues que permitem a modicao do campo c a o co ca endereo de outra instruo: STOR M(X,8:19) (Figura 25) e STOR M(X,28:39) (Figura 26). c ca Sintaxe STOR M(X,8:19) Operao ca Mem[X](8:19) := AC(28:39) Codicao ca 00010010 X

Move os 12 bits ` direita do registrador AC para o campo endereo da a c instruo ` esquerda da palavra de memria no endereo X. ca a o c Figura 25: Instruo STOR M(X,8:19) ca

Sintaxe STOR M(X,28:39)

Operao ca Mem[X](28:39) := AC(28:39)

Codicao ca 00010011 X

Move os 12 bits ` direita do registrador AC para o campo endereo da a c instruo ` direita da palavra de memria no endereo X. ca a o c Figura 26: Instruo STOR M(X,28:39) ca A instruo STOR M(X,8:19) modica o campo endereo da instruo ` esquerda da palavra no endereo ca c ca a c X da memria, enquanto que a instruo STOR M(X,28:39) modica o campo endereo da instruo ` direita o ca c ca a da palavra no endereo X da memria. Ambas transferem os 12 bits ` direita do registrador AC (bits 28 a c o a 39) para o campo endereo da instruo alvo. O programa a seguir exemplica o uso destas instrues. O c ca co programa soma os elementos de um vetor de 20 nmeros armazenados a partir do endereo 100. u c Endereo c 000 001 002 003 004 005 0F0 0F1 0F2 0F3 100 ... Instru~es / Dados co LOAD ADD LOAD M(0F2); STOR M(002,28:39) # Modifica o endereo da instru~o ADD c ca M(0F1); STOR M(0F2) # e atualiza o apontador. M(0F3); ADD M(000) # Carrega a varivel e soma com o contedo a u # do vetor apontado pelo apontador. STOR M(0F3); LOAD M(0F0) # Salva a soma e carrega o contador de it. SUB M(0F1); STOR M(0F0) # Atualiza o contador de itera~es. co JUMP+ M(000,0:19); ... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 19 01 00 00 # # # # Contador de itera~es co Constante 1 Apontador varivel soma a

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

00 00 00 00 00 ...

# Primeiro elemento do vetor

O programa armazena um apontador para o in do vetor no endereo 0F2 e a varivel soma no endereo cio c a c 0F3. O primeiro passo carregar o apontador no registrador AC e gravar o endereo no campo endereo da e c c 17

instruo que realiza a soma, ou seja, a instruo ADD do endereo 002. Note que, inicialmente, o campo ca ca c endereo desta instruo possui o endereo 000. No entanto, antes mesmo desta instruo ser executada, c ca c ca o seu campo endereo ser modicado pela instruo STOR M(0002,28:39). Aps modicar a instruo, c a ca o ca o apontador incrementado e o novo valor (o endereo do prximo elemento no vetor) armazenado na e c o e memria. Aps este passo, o programa carrega o contedo da varivel soma no registrador AC e utiliza o o u a a instruo ADD (com o endereo previamente modicado) para somar um elemento do arranjo. O valor ca c resultante da soma armazenado na memria (no endereo da varivel soma) e o programa segue com o e o c a decremento e teste do contador de iteraes, iterando o lao. co c

Linguagem de Montagem do IAS

Um montador uma ferramenta que converte cdigo em linguagem de montagem para cdigo em linguagem e o o de mquina. A Figura 27 mostra um trecho de programa representado na linguagem de montagem (a) e na a linguagem de mquina (b) do computador IAS. a
1 2 3 4 5

LOAD MUL LOAD STOR

M(0x102) M(0x103) MQ M(0x102) (a)

01 10 20 B1 03 0A 00 02 11 02

(b)

Figura 27: Trecho de programa em linguagem de montagem (a) e em linguagem de mquina (b) do IAS. a O trecho de cdigo da Figura 27 carrega o valor armazenado no endereo 0x102 da memria no registrador o c o AC, multiplica pelo valor armazenado no endereo 0x103 da memria e armazena o resultado no endereo c o c 0x102 da memria. Para converter o cdigo em linguagem de montagem acima para o cdigo em linguagem o o o de mquina, o montador pode ler as linhas do programa em linguagem de montagem uma a uma e para cada a linha: mapear o mnemnico da instruo (ex: LOAD M(0x102)) para o cdigo da operao correspondente o ca o ca (ex: 01); ler o parmetro da instruo (ex: 0x102). a ca compor a instruo de 20 bits (ex: 0A 10 2), sendo os 8 primeiros bits da instruo o cdigo da ca ca o operao e os 12 ultimos bits da instruo o parmetro lido. ca ca a adicionar a instruo ao nal do arquivo de sa ca da.

6.1

A diretiva .org

No exemplo da Figura 27 no ca claro onde cada instruo montada ser armazenada na memria. Por a ca a o exemplo, onde deve ser colocada a instruo LOAD M(0x102)? Essa informao pode ser fornecida pelo ca ca programador (ou compilador) no programa em linguagem de montagem atravs da diretiva .org. Esta e diretiva informa ao montador o endereo de memria onde o montador deve iniciar (ou continuar) a gerao c o ca do cdigo. O trecho de cdigo a seguir mostra um exemplo de uso da diretiva .org. Neste trecho, o cdigo o o o aps a diretiva .org 0x000 ser despejado na memria a partir do endereo 0x000, enquanto que o cdigo o a o c o listado aps a diretiva .org 0x020 ser despejado na memria a partir do endereo 0x020. Observe que o o a o c mapa de memria6 possui palavras nos endereos 0x000 e 0x001 e uma palavra no endereo 0x020. o c c
6 Mapa de memria uma lista de pares <endereo,valor> que especica o valor a ser atribuido a cada palavra da memria o e c o na inicializao do simulador. Note que os valores podem representar instrues ou dados. ca co

18

1 2 3 4 5 6 7 8 9 10

.org 0x000 LOAD M(0x102) MUL M(0x103) LOAD MQ JUMP M(0x020,0:19) .org 0x020 STOR M(0x102) Ling. de Montagem

000 001 020

01 10 20 B1 03 0A 00 00 D0 20 21 10 20 00 00

Mapa de memria o

6.2

A diretiva .word

O cdigo da Figura 27 carrega e multiplica os valores armazenados nas palavras de memria associadas aos o o endereos 0x102 e 0x103. O resultado da multiplicao armazenado no endereo 0x102 da memria. Note c ca e c o que o programa da Figura 27 no especica o valor inicial dessas posies de memria. A diretiva .word a co o e uma diretiva que auxilia o programador a adicionar dados ` memria. Para adicionar um dado, basta inserir a o a diretiva .word e um valor de 40 bits no programa. O trecho de cdigo a seguir mostra como esta diretiva o pode ser utilizada para adicionar dados ` memria. a o
1 2 3 4 5 6 7 8 9 10 11

.org 0x102 .word 0x1 .word 10 .org 0x000 LOAD M(0x102) MUL M(0x103) LOAD MQ JUMP M(0x000,0:19) Ling. de Montagem

000 001 102 103

01 10 20 B1 03 0A 00 00 D0 00 00 00 00 00 01 00 00 00 00 0A

Mapa de memria o

Como vimos antes, a diretiva .org 0x102 utilizada para informar ao montador que as instrues e e co dados provenientes de comandos subsequentes a esta diretiva devem ser despejados na memria a partir o do endereo 0x102. No caso do exemplo anterior, a diretiva .word 0x1 o prximo comando, portanto, o c e o montador adicionar o dado 00 00 00 00 01 no endereo 0x102 da memria. A diretiva .word subsequente a c o toma como argumento um nmero na representao decimal (note a ausncia do 0x). Nesse caso, o u ca e montador converte este valor para representao hexadecimal (00 00 00 00 0A) e adiciona o dado ao mapa ca de memria. Note que esta palavra adicionada na prxima palavra da memria, ou seja, no endereo o e o o c 0x103.

6.3

Rtulos o

Rtulos so anotaes no cdigo que sero convertidas em endereos pelo montador. A sintaxe de um rtulo o a co o a c o uma palavra terminada com o caractere : (dois pontos). As seguintes linhas de cdigo mostram exemplos e o de rtulos: o laco: var_x:

1 2

19

Rtulos podem ser utilizados para especicar um local no cdigo para onde uma instruo de desvio deve o o ca saltar. O cdigo abaixo utiliza um rtulo (laco:) para representar o alvo de uma instruo de salto. o o ca
1 2 3 4

laco: LOAD M(0x100) SUB M(0x200) JUMP M(laco) Durante a montagem do programa, o montador associar o rtulo laco: a um endereo de memria e o a o c o campo endereo da instruo JUMP ser preenchido com este endereo. c ca a c Rtulos tambm podem ser utilizados para especicar um local na memria que contenha um dado. Por o e o o exemplo, podemos associar os endereos 0x100 e 0x200 aos rtulos var x e var y e referenciar os rtulos c o em vez dos endereos nas instrues do programa. O exemplo a seguir mostra um trecho de cdigo onde o c co o rtulo var x associado ao endereo 0x100 e o rtulo var y associado ao endereo 0x200. o e c o e c

1 2 3 4 5 6 7 8 9

.org 0x000 laco: LOAD M(var_x) SUB M(var_y) JUMP M(laco) .org 0x100 var_x: .org 0x200 var_y: Observe que os rtulos podem ser utilizados em conjunto com a diretiva .word para declarar variveis o a ou constantes. Em vez de associar um rtulo a um endereo xo de memria, podemos declarar um rtulo o c o o e logo em seguida adicionar um dado neste endereo de memria com a diretiva .word, e o prximo rtulo, c o o o se usado, conter o endereo da prxima palavra da memria. O trecho de cdigo a seguir mostra exemplos a c o o o de declarao de variveis e constantes. Neste caso, o rtulo var x ser associado ao endereo de memria ca a o a c o 0x100 e o rtulo const1 ser associado ao endereo de memria 0x101. o a c o

1 2 3 4 5 6 7 8 9 10 11 12 13

.org 0x000 laco: LOAD M(var_x) SUB M(const1) JUMP M(laco) .org 0x100 var_x: .word 00 00 00 00 09 const1: .word 00 00 00 00 01 Linguagem de Montagem

000 001 100 101

01 10 00 61 01 0D 00 00 00 00 00 00 00 00 01 00 00 00 00 09

Mapa de memria o

Como mencionamos antes, rtulos so convertidos para endereos. Como endereos so nmeros naturais, o a c c a u eles tambm podem ser utilizados em conjunto com a diretiva .word para inicializar posies de memria. e co o O trecho de cdigo a seguir mostra um exemplo onde o rtulo vetor utilizado em conjunto com a diretiva o o e 20

.word para adicionar o endereo base do vetor ` palavra da memria associada com o endereo do rtulo c a o c o base. Em outras palavras, declaramos a varivel base e a inicializamos com o valor 0x100, ou seja, o endereo a c inicial do vetor. .org 0x100 base: .word vetor vetor: .word 00 00 00 00 00 .word 00 00 00 00 01 .word 00 00 00 00 02 fim_vetor: Linguagem de Montagem 100 101 102 103 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 01 02

1 2 3 4 5 6 7 8 9 10

Mapa de memria o

Rtulos e o processamento da entrada em linguagem de montagem em dois passos o No exemplo anterior, ns utilizamos o rtulo vetor na linha 3 no programa antes mesmo de ele ser declarado o o (na linha 4). Durante a montagem, os comandos de montagem so lidos um a um. Ao processar a diretiva a .word vetor o montador teria que adicionar uma entrada ao mapa de memria com o valor do endereo o c associado ao rtulo vetor. Entretanto, como o montador pode inferir o valor do rtulo vetor se ele ainda o o no foi declarado no programa? A resposta : ele no pode! Para resolver este problema, os montadores a e a realizam o processo de montagem em dois passos: 1. No primeiro passo, o montador realiza uma montagem parcial, onde os campos endereos e os dados das c diretivas .word so ignorados, iniciando o mapa de memria com zero. Note que, durante a montagem, a o o montador no precisa colocar os valores corretos no mapa de memria. Basta saber o tamanho do a o dado ou da instruo na memria de forma que os rtulos sejam associados aos endereos corretos. ca o o c 2. No segundo passo, o montador gera um novo mapa de memria, realizando a montagem completa, com o os dados corretos. Neste caso, o montador j possui uma tabela informando para cada rtulo qual o a o endereo da memria. c o

6.4

A diretiva .align

As instrues do IAS possuem 20 bits, entretanto, as palavras de memria principal possuem 40 bits. Durante co o a montagem, o montador adiciona instruoes uma a uma preenchendo as palavras com duas instrues cada. c co Todavia, a diretiva .word solicita ao montador para adicionar um dado de 40 bits a uma palavra da memria. o O que o montador faria ao tentar montar o seguinte programa? .org 0x000 laco: LOAD M(var_x) SUB M(var_y) JUMP M(laco) var_x: .word 0x1 var_y: .word 0x2 Como vimos antes, o montador colocaria as instrues LOAD e SUB na primeira palavra da memria, no co o endereo 0x000 e colocaria a instruo JUMP (de 20 bits) ` esquerda da segunda palavra de memria. Logo c ca a o 21

1 2 3 4 5 6 7

em seguida, o montador tentaria adicionar o dado 00 00 00 00 01 ` memria. Mas onde este dado seria a o colocado? Uma opo adicionar a primeira metade do dado (20 bits) ` direita da instruo JUMP e o ca e a ca restante na parte esquerda da prxima palavra. Alm de ser confusa, esta abordagem divide o dado em duas o e palavras de memria, tornando imposs a leitura do dado pelas instrues do programa. o vel co A outra opo seria escrever zero na parte direita da palavra que j possui a instruo JUMP e adicionar ca a ca o dado de 40 bits na prxima palavra da memria. Neste caso, o mapa de memria caria como a seguir: o o o
1 2 3 4

000 001 002 003

01 0D 00 00

00 00 00 00

20 00 00 00

60 00 00 00

03 00 01 02

Note que a segunda palavra da memria (endereo 0x001) possui a instruo JUMP (operao 0D) ` o c ca ca a esquerda e o valor zero ` direita. Enquanto que os dados 00 00 00 00 01 e 00 00 00 00 02 foram adicioa nados nas palavras seguintes da memria. Esta abordagem funcionaria. o Uma terceira abordagem seria no fazer a montagem, ou seja, ao encontrar uma situao dessas, o a ca montador emitiria um mensagem de erro informando que a diretiva .word est tentando emitir um dado em a uma posio de memria no alinhada a uma palavra da memria. Esta a abordagem que o montador ca o a o e do IAS deve tomar. Mas como fazemos para montar o programa do exemplo anterior? A resposta est a na diretiva .align N. Esta diretiva informa ao montador para continuar a montagem a partir da prxima o palavra com endereo mltiplo de N. O trecho de cdigo a seguir mostra como a diretiva .align pode ser c u o utilizada no programa anterior.
1 2 3 4 5 6 7 8

.org 0x000 laco: LOAD M(var_x) SUB M(var_y) JUMP M(laco) .align 1 var_x: .word 0x1 var_y: .word 0x2

6.5

A diretiva .wfill

Um vetor pode ser declarado e inicializado utilizando-se um rtulo e a diretiva .word para adicionar diversos o valores em posies consecutivas da memria. O exemplo a seguir mostra como um vetor de 3 posies com co o co os valores 4, 0 e 4 pode ser adicionado a um programa em linguagem de montagem:
1 2 3 4 5 6 7 8

.org 0x000 laco: JUMP M(laco) .align 1 vetor: .word 0x4 .word 0x0 .word 0x4 Note que os valores foram adicionados ` memria a partir do endereo 0x001, pois o endereo 0x000 a o c c contm a instruo JUMP. Apesar da diretiva .word nos permitir inicializar o vetor, esta tarefa se torna e ca 22

muito tediosa quando o tamanho do vetor grande (por exemplo, 1000 elementos). Neste caso, para facilitar e a adio de dados ` memria, podemos utilizar a diretiva .wfill N,D. Esta diretiva preenche N palavras ca a o da memria com o dado D. O trecho de cdigo a seguir mostra como podemos declarar um vetor com 1000 o o palavras inicializadas com o valor 00 00 00 00 05. .org 0x000 laco: JUMP M(laco) .align 1 vetor: .wfill 1000, 0x5

1 2 3 4 5 6

6.6

A diretiva .set

Para tornar o cdigo mais claro e mais portvel, muitas linguagens de programao dispem de diretivas que o a ca o permitem ao programador associar valores a s mbolos. Por exemplo, na linguagem C, a diretiva #define NOME VALOR pode ser utilizada para associar um valor a um determinado nome. O cdigo a seguir mostra o um exemplo deste uso: #define TEMP_MAX 60 #define TEMP_MIN 0 ... if (temperatura < TEMP_MIN) error(Temperatura muito baixa\n); else if (temperatura > TEMP_MAX) error(Temperatura muito alta\n); ... Neste exemplo, o valor 60 foi associado ao s mbolo TEMP MAX e o valor 0 foi associado ao s mbolo TEMP MIN. Caso o valor de TEMP MAX ou TEMP MIN seja diferente em um sistema mais novo, o programador no precisa a inspecionar todo o cdigo modicando os valores, pois basta modicar o valor na diretiva que associa o valor o ao s mbolo. A diretiva .set NOME VALOR a diretiva utilizada na linguagem de montagem do IAS para associar e valores a nomes. O trecho de cdigo a seguir mostra um exemplo de uso desta diretiva. o .set CODIGO 0x000 .set DADOS 0x100 .set TAMANHO 200 .org CODIGO laco: JUMP M(laco) .org DADOS vetor: .wfill TAMANHO, 0x5 Ling. de Montagem Mapa de memria o 000 100 101 ... 1C6 1C7 0D 00 00 00 00 00 00 00 00 05 00 00 00 00 05 00 00 00 00 05 00 00 00 00 05

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8 9 10 11 12 13

23

Note que esta diretiva no emite dados ou instrues ao programa gerado, ela apenas associa valores a a co s mbolos. De fato, este programa equivalante ao programa: e .org 0x000 laco: JUMP M(laco) .org 0x100 vetor: .wfill 200, 0x5 Ling. de Montagem 000 100 101 ... 1C6 1C7 0D 00 00 00 00 00 00 00 00 05 00 00 00 00 05 00 00 00 00 05 00 00 00 00 05

1 2 3 4 5 6 7 8 9

Mapa de memria o

24

Apndice A: Lista de instrues do Computador IAS e co Tipo da Instruo ca Transferncia e de Dados Cdigo da o operao ca 00001010 00001001 00100001 00000001 00000010 00000011 Salto incondicional 00001101 00001110 Salto condicional 00001111 Representao ca Simblica o LOAD MQ LOAD MQ,M(X) STOR M(X) LOAD M(X) LOAD -M(X) LOAD |M(X)| JUMP M(X,0:19) JUMP M(X,20:39) JUMP+M(X,0:19)

Descrio ca Transfere o contedo do registrador u MQ para o registrador AC Transfere o contedo da memria no u o endereo X para o registrador MQ c Transfere o contedo do registrador u AC para a memria no endereo X o c Transfere o contedo da memria no u o endereo X para o registrador AC c Transfere o negativo do valor armazenado no endereo X da memria para o registrador AC c o Transfere o absoluto do valor armazenado no endereo X da memria para o registrador AC c o Salta para a instruo da esquerda na ca palavra contida no endereo X da memria c o Salta para a instruo da direita na ca palavra contida no endereo X da memria c o Se o nmero no registrador AC for no negativo u a ento salta para a instruo ` esquerda da a ca a palavra contida no endereo X da memria c o Se o nmero no registrador AC for no negativo u a ento salta para a instruo ` direita da a ca a palavra contida no endereo X da memria c o Soma o valor contido no endereo X da memria c o com o valor em AC e coloca o resultado em AC Soma o absoluto do valor contido no endereo c X da memria com o valor em AC e armazena o o resultado em AC Subtrai o valor contido no endereo X da memria c o do valor em AC e coloca o resultado em AC Subtrai o absoluto do valor contido no endereo c X da memria do valor em AC e armazena o o resultado em AC Multiplica o valor no endereo X da memria pelo c o valor em MQ e armazena o resultado em AC e MQ. AC contm os bits mais signicativos do resultado e Divide o valor em AC pelo valor no endereo X da c memria. Coloca o quociente em MQ e o resto em AC o Desloca os bits do registrador AC para a esquerda. Equivale ` multiplicar o valor em AC por 2 a Desloca os bits do registrador AC para a direita. Equivale ` dividir o valor em AC por 2 a Move os 12 bits ` direita de AC para o campo endereo a c da instruo ` esquerda da palavra X na memria ca a o Move os 12 bits ` direita de AC para o campo endereo a c da instruo ` direita da palavra X na memria ca a o

00010000

JUMP+M(X,20:39)

Aritmtica e

00000101 00000111

ADD M(X) ADD |M(X)|

00000110 00001000

SUB M(X) SUB |M(X)|

00001011

MUL M(X)

00001100 00010100 00010101 Modicao ca de endereo c 00010010 00010011

DIV M(X) LSH RSH STOR M(X,8:19) STOR M(X,28:39)

25

Você também pode gostar