Entсo, agora vamos comeуar a falar sobre as coisas fundamentais dentro de
arquitectura do conjunto de instruушes e o coisas que vocЖ precisa para construir dentro de
arquitetura do conjunto de instruушes. E, vamos comeуar falando
sobre modelos de mрquinas. Entсo, eu tenho uma pergunta aqui.
Onde operandos vem? E, onde operandos, onde fazer resultados
ir? Entсo, quando eu digo, operandos, estes sсo os
valores de dados que vocЖ estр indo para operar em com uma Щnica instruусo do processador
e os resultados sсo em que, e em que os dados que sсo calculadas, e em que
ele vai. E, este ж na verdade um conjunto de instruушes
arquitetЗnico, arquitetura, grande oito preocupaусo.
Fundamentalmente, vocЖ vai ter algum forma de unidade lзgica aritmжtica ou alguma
tipo de unidade de cрlculo. E vocЖ vai ter algum tipo de
armazenamento de memзria. E, em um, num processo provavelmente vocЖ estр
vai querer levar as coisas a partir do armazenamento, movЖ-lo para a ULA, calcular em
, e depois colocр-lo de volta para o armazenamento de alguma forma.
E isto ж, o processador aqui que envolver a ULA, eo modelo de mрquina
ж, o que ж a implementaусo, o que ж a semРntica, ou desculpe-me, nсo os
aplicaусo, o que ж a organizaусo dos registros?
Como vocЖ vai acessar a memзria? Que tipo de instruушes e operaушes
sсo permitidos? E, vamos falar um pouco sobre,
onde os operandos vem? Onde ж que os resultados vсo?
E, modelos de mрquinas diferentes que as pessoas tЖm construьdo.
Entсo, isso ж diferente de conjunto de instruушes arquiteturas e, e atж mesmo mais do que
conjunto de instruушes arquiteturas cuz arquiteturas de conjunto de instruушes falar sobre
como vocЖ codificar instruушes mesmo, este ж atж mesmo um pouco mais fundamental de como
ж que vocЖ vai, o raciocьnio sobre como mover dados da memзria para a ULA e costas.
E, como vocЖ vai fazer e armazenar os dados perto da ULA.
Entсo, vamos comeуar com uma muito simplista exemplo aqui, um processador muito simplista
que as pessoas tЖm realmente construьdo. Acredite ou nсo, vocЖ nсo tem que ter
registra em seu processador, ou vocЖ nсo faz tem que ter registros de nomes na sua
arquitetura do conjunto de instruушes. Em vez disso, vocЖ pode ter uma pilha.
Uma pilha ж apenas um elemento de armazenamento, onde vocЖ coloca as coisas para a pilha, e depois
eles saem na ordem em que foi a um passado que foi colocado em que foi tomada,
que ж levado em primeiro lugar. Em vez disso, em um sentido muito bрsico, sз
tomar as duas melhores coisas na pilha. Nзs buscar os dois, operar sobre elas,
e, em seguida, colocar sobre o que seria a parte superior da a pilha.
Construindo, construindo a partir daь, pode-se pensar em algo como um acumulador
arquitetura. Entсo, tipicamente em acumulador arquitetura,
se vocЖ tem um acumulador, entсo nсo hр apenas um registro, um dos operandos para
cada operaусo que vocЖ faz ж sempre implьcito. Tem que vir do acumulador.
A outra, vamos dizer, pode vir de, a partir da memзria.
Entсo, vocЖ tem que nomear um dos operandos na arquitetura como essa.
Construindo a partir daь, podemos comeуar pensando em talvez registrar a memзria
operaушes em que vocЖ vai nomear, digamos, o oper operando, que ж a fonte,
vamos dizer, vindo de memзria, e vocЖ vai nome, digamos, um operando vindo
seu arquivo de registo. E, opcionalmente, vocЖ pode atж nomear o
destino. Portanto, estes sсo tudo, estes sсo todas as opушes,
e nзs vamos chamar isso de um registro de memзria arquitetura.
Finalmente, temos algo como um registrar, registar arquitetura.
Entсo, ninguжm quer apostar um palpite aqui, como muitos operandos nomeados que temos aqui?
TrЖs. Ok, sim.
E assim, esta foto aqui, vamos ter algo de um registo, algo
de outro registo, e nзs temos que nomear para onde ir colocр-lo.
Entсo, ж isso, ж isso, eu queria salientar aqui, na verdade, o nЩmero de explicitamente
chamado operandos. Para alguns destes, ж, ж um pouco
mais questionрvel do que outros. Entсo, como vocЖ vЖ aqui, temos zero, temos
um pouco de algo mais complicado, onde que tЖm um, dois, ou trЖs.
Agora, como eu, por que eu dizer duas ou trЖs aqui?
Assim, nсo hр, alguns desses arquiteturas ou modelos de arquitetura nсo necessariamente
citar a resultante, ou o resultado localizaусo.
Alguns deles implicitamente nomear o resultar.
Entсo, algo como 86 por exemplo, o operando fonte ж sempre o primeiro
destino. Entсo, tem que apenas citar duas coisas.
Algo como MIPS, ou mais de risco, a maioria arquiteturas realmente o nome de todos
trЖs. E vocЖ pode pensar sobre isso acontecendo para
memзria e um registrador, registar arquitetura.
Entсo, um bom exemplo de um operando trЖs memзria de memзria, que eu nсo tenho desenhado
aqui. Este ж apenas, eu sз tenho a memзria de registo
feita aqui. Mas a memзria de memзria, que basicamente diz:
todos os seus operandos vir da memзria e tudo seus destinos estсo na memзria ж
algo como a arquitetura VAX que era popular nos anos 70.
VocЖ realmente pode ter todos os seus operandos vir da memзria, fazer alguma operaусo em
eles, e armazenр-lo de volta na memзria. Entсo, um comжrcio interessante aqui ж que fora
uma vez que vocЖ comeуar a ter mais operandos que explicitamente nomeado, vocЖ precisa de mais de codificaусo
espaуo para isso. E este ж um dos mais importantes
trade-offs. Okay.
Entсo, vamos, vamos entrar em um pouco de profundidade sobre pilha arquitetura baseada.
Assim, alguns exemplos disso sсo, na verdade, Burrough de 5000.
As mрquinas foram Symbolics baseada em pilha, e estes sсo uma espжcie de mрquinas da
passado. Hр alguns moderno ou mais moderno
exemplos disso. Por exemplo, o Java Virtual Machine ж
na verdade arquitectura de uma pilha. E depois, tambжm, da Intel ponto flutuante de idade
sistema, x87. Desde entсo eles espжcie de, depreciado isso,
mas ainda ж relativamente moderna como um pilha de arquitetura baseada em conjunto de instruушes.
Vamos ter um conjunto de instruушes baseado em pilha arquitetura e olhada em como vocЖ pode ir
sobre a avaliaусo de uma expressсo. Entсo, temos aqui uma expressсo, um b mais
c vezes, todos em parЖnteses, que todo quantidade, dividido por um d mais vezes c
e de menos. Entсo, ж uma matemрtica complexa, em,
operaусo de instruусo, ou matemрtica que precisa fazer.
Aqui, nзs realmente quebrar isso em um analisar desta рrvore.
VocЖ pode ver, este ж preservar SRO operaушes.
Nзs temos uma vantagem, esta quantidade sub-aqui, b c vezes.
E, vocЖ tomar tudo isso e dividi-lo por esta subexpressсo aqui.
E pouco, pouco de um regresso aqui, este ж um caminho que vamos tomar a
operaушes. E, se fizermos essas operaушes em uma pilha
modelo de mрquina, nзs estamos indo para obter o resultado certo.
Entсo, o que isto significa ж, colocar um sobre o empilhar, colocar b na pilha, colocar no c
pilha, e depois multiplicar. B vezes c, e em seguida, adicione as vezes os resultados
um. E, vocЖ pode ver que nзs vamos construir
esta expressсo em uma, sobre uma pilha. Entсo, ж uma espжcie de caminho, diferente para classificar
de, repensar sobre os problemas. E, vamos, vamos percorrer um exemplo
aqui. Entсo, aqui, temos uma pilha de avaliaусo.
E, no topo da pilha serр tudo o que ж em cima aqui neste
imagem. Entсo, primeira coisa, nзs vamos fazer ж
vamos dizer, empurrar um. Assim, mostra-se uma sobre a pilha.
Entсo, nзs estamos indo para empurrar b, vamos para empurrar c, e entсo nзs vamos fazer uma
multiplicar. Entсo, nзs vamos tomar as duas entradas
que estсo no topo da pilha, multiplicar -los e colocр-los em esta entrada no
empilhar. Entсo, vamos dizer, acrescentar, e ж
vai adicionar as duas coisas principais em uma pilha aqui, e colocar o resultado aqui.
E, vocЖ pode ver que se vocЖ executar algo como este, vocЖ pode realmente fazer pleno
cрlculos sobre uma pilha muito pequena. E, o que tambжm ж bom aqui ж que vocЖ nсo
tem que explicitamente nomear qualquer um dos operandos.
Assim, este modelo de equipamento permite, para executar programas reais.
E, uma das coisas que eu quero toda aqui ж que a pilha ж parte do
o estado do processador, e ж normalmente, entсo que ж a instruусo Um grande, grande ou uma
arquitetura, ou o conjunto de instruушes arquitetura.
VocЖ tem uma pilha, e muitas vezes ж ilimitada na arquitetura Um grande.
Mas, na vida real, ele precisa ser limitado de alguma forma, porque vocЖ nсo pode ter infinitamente
longos, pilhas fьsicas em sua mрquina. Entсo, ж conceitualmente ilimitado, mas vocЖ
provavelmente vai querer ter transbordar a principal memзria, se vocЖ colocar muitas coisas no
empilhar. E este ж, este ж um importante
caracterьsticos vezes cuz outros, caso contrрrio, existem certas computaушes VocЖ nсo pode
fazer. Se, por exemplo, a рrvore de anрlise ж demasiado
desde aqui, ou a, a profundidade da рrvore ж muito tempo, o de pilha pode, pode crescer
muito longo. Okay.
Entсo, vamos dizer, nзs temos um micro-arquitetura de implementaусo de um
arquitectura do conjunto de instruушes, o qual ж um baseado em pilha arquitetura.
E, os dois primeiros elementos da pilha sсo mantida em registros, eo resto estр na principal
memзria, e ele derrama e preenchimentos. Bem, cada impulso tem uma referЖncia de memзria.
Entсo, quando vocЖ coloca algo na pilha, ele tem uma referЖncia de memзria.
E, cada pop, tem uma memзria de referЖncia cuz vocЖ sз precisa colocar algo de novo
memзria principal. Mas, mais do que isso, vocЖ pode ter
extras referЖncias de memзria aqui, como a pilha transborda para a memзria principal, e vocЖ
pode ter que puxar algo de volta a partir memзria principal.
Entсo, isso nсo ж, porque nсo ж muito bom vocЖ pode acabar com um empurrсo ter mais de
um nЩmero de referЖncia. Entсo, uma otimizaусo de um
micro-arquitetura perspectiva, vocЖ poderia pensar em ter N elementos do seu
empilhar em registos muito perto do processador, e sз tem que ir de acesso principal
memзria quando a pilha estoura registro e underflows.
Assim, em vez de ter que fazer uma memзria referЖncia, basicamente, a cada momento
vocЖ faz uma operaусo ou a cada momento vocЖ faz um empurrсo ou um pop, vocЖ fazЖ-lo apenas
quando a profundidade da pilha fica muito grande, que vocЖ nсo pode caber tudo no seu stack.
Entсo, vamos, vamos caminhar por um breve exemplo aqui.
Nзs temos a mesma expressсo de cрlculo, que estamos fazendo antes.
E, vocЖ pode ver, o que podemos fazer, empurrar, empurrar, empurrar, multiplicar, somar, empurrar, empurrar, empurrar,
multiplicar, somar, empurrar e, subtrair e fazer todas as divisшes no final.
Mas, se temos uma pilha de dois, o que vai acontecer aqui ж, ao
comeуando, estamos apenas indo, vocЖ sabe, quando fazemos um esforуo, nзs vamos fazer um
carregar de um, empurrar, vamos fazer uma carga a partir de b.
Agora, nзs fazemos um esforуo de carga de c, mas a nossa pilha jр tem duas coisas sobre ele.
Entсo, se estamos a tentar empurrar a terceira coisa, nзs ter de transbordamento na parte inferior da pilha
em algum lugar. Entсo, nзs estamos realmente vai fazer uma pilha
salvar de uma para a memзria principal. Aqui, fazemos isso se multiplicam, e nзs realmente
se buscar uma pilha de um e obtЖ-lo de volta a memзria principal.
Entсo, ж uma sжrie de operaушes de memзria extra. Assim, vocЖ pode querer pensar em um diferente
micro-arquitetura. E se vocЖ espжcie de, caminhar por este
exemplo inteiro aqui, vamos ver que temos quatro lojas e quatro obtжm
a partir da memзria principal, os quais sсo todos implьcita, mais explьcitas as que nзs estamos tentando
a ver com o empurra e pops. Hm, bem que ж oito memзria extra
operaушes. Quando pensamos sobre como construir um
micro-arquitetura que tem menos, mas tem o conjunto de instruушes exatamente o mesmo
arquitetura. Bem, vamos dizer, temos uma mрquina que
tem um tamanho de pilha de quatro. Bem, se o tamanho da pilha ж um quatro, no
pior caso aqui, nзs vamos sempre tem que caber quatro coisas na nossa pilha.
Entсo, nзs nunca temos que, derramar a principal memзria de nossa pilha.
Empurra e aparece ainda tem para acessar memзria, mas isso ж o que eles estсo tentando
fazer. Eles estсo realmente tentando acessar a memзria.
Entсo, para resumir aqui sobre baseada em pilha modelos de mрquinas, eles olham, olham
muito legal. Mas, nсo, nem todas as coisas sсo, sсo em grande
todas as vezes. Entсo, um dos, as coisas interessantes
aqui para ver ж que nзs realmente empurrar, e nзs empurrar um novo.
Entсo, nзs estamos fazendo um trabalho redundante. E nзs empurrar c, e nзs empurrar C novamente.
C e A tЖm o mesmo valor em ambas as vezes nзs empurrр-los.
Entсo, de repente, estamos fazendo extras trabalho e talvez poderьamos ter feito menos
trabalhar se tivжssemos uma arquitetura ou mрquina modelo, uma arquitetura Um grande, o que permite
armazenar vрrias coisas e nome operandos diferentes.
Entсo, o que eu quero passar aqui ж, enquanto uma arquitetura baseada em pilha ж muito
simples, as instruушes sсo muito densa, o, pode nсo ser bom para o desempenho
porque vocЖ pode acabar tendo que recarregar valores vрrias vezes.
Versus, conjunto de instruушes se vocЖ tivesse arquitetura, algo como MIPS, onde
vocЖ realmente tem 32 de uso geral registros e vocЖ pode citar qualquer registro
para qualquer instruусo, que poderia ter carregado a, b, c, d, e e todos no registo
espaуo, uma vez, e em seguida, fez todo o seu operaушes e nunca tive que recarregar.
E, esta ж realmente uma instruусo sett questсo e nсo, ou uma mрquina fundamentais
questсo do modelo, e nсo uma arquitetura de micro- questсo.
Okay. Assim, para resumir modelos de mрquinas diferentes,
temos a nossa pilha, acumulador, registo e memзria, e se inscrever, registrar,
por vezes chamado de arquitetura armazenamento de carga. Se queremos levar alguma expressсo aqui,
gosta, c ж igual a um b mais, podemos olhar para as instruушes que teriam de ser
gerado em uma arquitetura abstrata. Entсo, aqui, nзs vamos ter um empurrar, empurre
b, adicionar, pop c. └ medida que adicionar mais nomes, nзs realmente podemos,
potencialmente, tЖm menos registros, ou menos instruушes, desculpe-me.
Entсo, temos de carregar um, adicione b. Note-se aqui, nсo temos para citar o que
estamos adicionando com cuz estamos adicionando com acumulador.
E entсo, loja c. Comeуam a ficar um pouco mais compacto.
Se temos registar memзria, podemos carregar um dos valores, adicionar, armazenar, ж muito
simples. Se queremos carregar arquitetura loja, nзs
realmente tem que fazer um pouco mais trabalhar.
Temos que carregar, carregar, adicionar, armazenar. Mas, o que, o que parece ser ineficiente, mas
se vocЖ tiver que reutilizar qualquer desses valores a, b, vocЖ nсo tem que ir recarregр-los.
Versus, nestas duas arquiteturas vocЖ tem que ir recarregar o valor.