Você está na página 1de 8

Detalhando o Computador Simplificado A Linguagem de Mquina

1. Linguagem de Mquina Simplificada Um "detalhe" importante foi esquecido: tanto a CPU como as vrias memrias somente comprendem, ou melhor, armazenam dados e instrues em linguagem de mquina (linguagem de zeros e uns). Portanto, as 12 instrues do nosso computador simplificado, bem como os endereos de memria, devem ser todos escritos na linguagem que ele entende e opera, a binria. Vejamos como fazer isso. Abaixo temos uma proposta de linguagem de mquina, simplificada, para o computador simplificado analisado em aula. Digamos que cada posio de memria do computador tenha 15 bits. Considere ainda a seguinte conveno para codificar as nossas 12 instrues da linguagem de montagem para a linguagem de mquina, exibida na Tabela 1:
LG Ei 111 00000000 IIII (Leia Carto e guarde em Ei)

COP Ei Ej V Ei IMP Ei PARE execuo) SOM Ei Ej Ek guarde em Ek) SUB Ei Ej Ek guarde em Ek) MUL Ei Ej Ek guarde em Ek) DIV Ei Ej Ek guarde em Ek) Onde: some subtraia multipl. divida SE Ei > Ej Ek v para Ek) SE Ei < Ej Ek v para Ek) SE Ei = Ej Ek

111 111 111 111

0001 IIII JJJJ 00000001 IIII 00000010 IIII 00000011 0000

(Copie Ei em Ej) (V para Ei) (Imprima Ei) (Interrompa (Some Ei e Ej e (Subt Ei e Ej e (Mult Ei e Ej e (Div Ei e Ej e

yyy IIII JJJJ KKKK yyy IIII JJJJ KKKK yyy IIII JJJJ KKKK yyy IIII JJJJ KKKK yyy=000 yyy=001 yyy=010 yyy=011 yyy IIII JJJJ KKKK yyy IIII JJJJ KKKK yyy IIII JJJJ KKKK

(Se Ei > Ej ento (Se Ei < Ej ento (Se Ei = Ej ento

v para Ek) Onde: maior yyy=100 igual yyy=101 menor yyy=110

Tabela 1 Cdigos Binrios das 12 Instrues do Computador Simplificado

Observe o detalhe de que todos as instrues tm 15 bits, os quais esto subdivididos numa parte para a instruo (os bits iniciais) e nas outras (se existem) para os endereos IIII, JJJJ e KKKK (com 4 bits), que so os operandos da instruo.

2. Codificando em Linguagem de Mquina Resolvendo um Problema Considere o seguinte problema: com a linguagem de mquina simplificada, proposta acima, tentemos codificar o programa abaixo (j previamente armazenado na "memria" dos escaninhos):

E0 LG E15

E1 LG E14

E2 SE E15 = E12 E6

E3 SOM E14 E13 E13

E4 SOM E11 E12 E12 E8 ?

E5 V E2 E9 ?

E6 IMP E13 E10 ?

E7 PARE E11 1

E12 0

E13 0

E14 ?

E15 ?

O primeiro ponto importante a ser notado que, para este computador simplificado, a posio 'i' do endereo de memria Ei tem 4 bits (o mesmo pode ser dito de Ej e Ek). Observe que os endereos (operandos da instruo) esto especificados como IIII, JJJJ ou KKKK, isto , quatro posies, significando 4 bits. Como conseqncia, este computador consegue enderear somente 16 posies de memria. Mas porque isso? Por causa da forma como os nmeros so codificados no sistema binrio.

2.1 Sistema Binrio O sistema binrio ou sistema de base 2, um sistema numrico em que todos os nmeros so representados por apenas dois algarismos, o zero e o um, que correspondem aos dois estados possveis de uma chave eletrnica, o '0' representando a posio desligada, e o '1' a posio ligada. Exemplos: 00010001 da base binria corresponde ao 17 da base decimal 10001011 da base binria corresponde ao 139 da base decimal

A tcnica para converter o cdigo decimal para o binrio a seguinte: faz-se divises sucessivas do nmero por 2, at quando no for mais possvel dividir, anotando-se o resto de cada diviso. Quando as divises terminam, escrevemos os restos (sempre 0 ou 1), de trs para diante. Seja, por exemplo, o nmero 457 expresso na base decimal, qual o cdigo binrio correspondente ao 457?
457 |__2

228 |__2 0 114 |__2 0 57 |__2 1 28 |__2 0 14 |__2 0 7 |__2 1 3 |__2 1 1 |__2

1 Invertendo a ordem dos restos, temos o No 457 na base binria: 111001001

Para fazer a converso de um nmero binrio para decimal utilizamos uma outra tcnica: multiplicamos cada bit, a partir da direita para esquerda, respectivamente com: primeiro 20, depois 21, depois 22, depois 23, e assim por diante at terminar os bits do nmero binrio, e por fim soma-se todos os produtos, obtendo-se o resultado na notao decimal. Seja, o nmero binrio obtido acima, 111001001, como reconvert-lo para a base decimal? 1*20 + 0*21 + 0*22 + 1*23 + 0*24 + 0*25 + 1*26 + 1*27 + 1*28 = 1 + 0 + 0 + 8 + 0 + 0 + 64 + 128 + 256 = 457

Exerccios: 1. 2. 3. 4. 5. 6. Converta 179 e 65 para a base binria Converta 1110 e 10110 para a base decimal Converta os seguintes nmeros para a base binria: 1, 3, 7, 15 e 31 Converta os seguintes nmeros para a base binria: 2, 4, 8, 16 e 32 Monte uma tabela com todos os nmeros binrios de 2 bits possveis Monte uma tabela com todos os nmeros binrios de 3 bits possveis

2.2 Solucionando o Problema Como havamos dito, o endereo Ei do nosso problema tem apenas 4 bits, pois o endereo, na proposta de linguagem de mquina simplificada, est representado por 4 posies: IIII, JJJJ ou KKKK (ver incio da Seo 2). Com 4 bits, podemos ento enderear at 24posies de memria, ou seja, at 16 endereos de memria.

O aluno deve notar que a memria do nosso computador simplificado (os escaninhos) j est com o nmero mximo possvel de endereos, de E0 at E15. Portanto, o endereo E0 codificado como 0000, E1 como 0001, E2 como 0010, assim por diante, at o ltimo endereo, E15, codificado como 1111. Identifiquemos ento os cdigos corretos das instrues:
111 111 111 111 00000000 00000001 00000010 00000011 0000 para para para para LG V IMP PARE

Enfim, o aluno deve observar que a instruo yyy (3 bits) das operaes aritmticas so diferentes para cada uma delas (adio, subtrao, etc). Como utilizamos a soma no programa acima, o cdigo binrio utilizado foi 000 (os outros bits so para os seus 3 operandos, Ei, Ej e Ek). Do mesmo modo, como utilizamos a operao condicional 'SE Ei = Ej Ek', o cdigo binrio usado foi 101. Confira estes cdigos antes de ver a soluo do problema. O cdigo binrio do problema apresentado ficaria ento assim: Endereo Cdigo da Instruo Mnemnico da Instruo

0000 0001 0010 E12 E6) 0011 E13 E13) 0100 E12 E12) 0101 0110 0111 1000 1001 1010

: 111 00000000 1111 (LG E15) : 111 00000000 1110 (LG E14) : 101 1111 1100 0110 (SE E15 = : 000 1110 1101 1101 (SOM E14 : 000 1011 1100 1100 (SOM E11 : : : : : : 111 00000001 0010 111 00000010 1101 111 00000011 0000 ? ? ? (V E2) (IMP E13) (PARE)

1011 1100 1101 1110 1111

: : : : :

000 00000000 0001 000 00000000 0000 000 00000000 0000 ? ?

(Valor 1) (Valor 0) (Valor 0)

Podemos agora j ter uma idia bem clara do quo difcil foi programar no tempo dos primeiros computadores, que funcionavam apenas com linguagem de mquina. Os programadores mexiam diretamente nos bits, sem teclado e sem monitor de vdeo!

Exerccios:
1. Faa uma anlise passo-a-passo da execuo do programa quando o

valor do 1o e do 2o carto forem 1, e descubra o valor impresso no final. 2. Faa o mesmo passo-a-passo do exerccio anterior, porm com o valor do 1o carto sendo 3, e do 2o carto, 1. Descubra o valor que ser impresso. 3. Explique como armazenado os valores (dados) do programa. 4. Qual o valor mximo que pode ser armazenado como dado do programa? 5. Explique por que a instruo 'SE Ei Ej Ek' s tem at trs opes de comparao (maior, igual, menor) e no pode ter mais (por exemplo maior ou igual, menor ou igual, diferente). 6. Quantas instrues especificando dois operandos podemos criar sem problemas de ambigidade? 7. Quantas instrues de um operando podemos criar sem problemas de ambigidade? 8. Quantas instrues sem operandos (do tipo da instruo PARE) podemos criar? 9. Como a CPU poderia diferenciar uma instruo sem operandos de uma constante armazenada? 10.Considere um computador simplificado que possua um registrador "acumulador", e que tenha 32 clulas de memria. Considere tambm que cada clula tem 10 bits, e as instrues so assim codificadas: Leia carto (valor do carto guardado no acumulador) : 00000 00000 Carregue Ei (contedo de Ei guardado no acumulador) : 00001 IIIII Armazene Ei (contedo do acumulador guardado em Ei) : 00010 IIIII

Some (subtraia, multiplique,...) Ei (contedo do acumulador somado com o contedo de Ei e guardado no acumulador) : 110 yy IIIII Onde: some yy=00; subtraia yy=01; multiplique yy=10; divida yy=11; V para Ei : 00011 IIIII Se acumulador maior(menor, igual,...) que 0 (zero) v para Ej: 111 yy IIIII Onde: maior yy=00; menor yy=01; igual yy=10; Imprima (imprime o valor do acumulador) : 00000 00001 Pare : 00000 00010 Codifique ento um programa em linguagem assembly e de mquina que implementa a seguinte especificao: o programa deve ler dois valores em carto e imprimir o produto destes dois valores, a implementao no deve usar a instruo de multiplicao e sim somas sucessivas. Resoluo do 1o exerccio: Lembrando sempre que o valor da posio E12 e E13 0 (ver o programa), podemos resumir a seqncia de execuo numa tabela:

Passo E0 E1 E2 E3 E4 E5 E2 E6 E7

Instruo LG E15 LG E14 SE E15 = E12 E6 SOM E14 E13 E13 SOM E11 E12 E12 V E2 SE E15 = E12 E6 IMP E13 PARE

Resultado E15 = 1 E14 = 1 Segue normalmente para E3 E13 = 1 E12 = 1 Retorna para E2 Desvia para E6 Imprime 1 Encerra programa

Resoluo do 3o exerccio: Como no h instrues para serem divididas entre os 15 bits de cada clula da memria (o nosso escaninho), ento todos os quinze bits podem ser usados para codificar a constante armazenada.

Resoluo do 4o exerccio: Como os 15 bits so usados para armazenar um valor numrico, eles podem representar 215 valores diferentes. Porm, como um desses valores o nmero 0, ento o valor mximo seria 215-1 = 32767.

Você também pode gostar