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.