0% acharam este documento útil (0 voto)
116 visualizações5 páginas

Risc-16 Isat

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1/ 5

O conjunto de instrues da arquitetura RiSC-16 1.

Conjunto de instrues RiSC-16 Este artigo descreve o conjunto de instrues do Computador Ridiculamente Simples (RiSC-16) de 16 bits, um ISA para aprendizagem que baseado no Little Computer (LC896) desenvolvido por Peter Chen na Universidade de Michigan. O RiSC-16 um computador de 16 bits e 6 registradores. Todos os endereos so endereos de palavras curtas (isto , o endereo 0 corresponde aos primeiros dois bytes da memoria principal, endereo 1 corresponde aos segundos dois bytes da memoria principal, etc). Como o conjunto de instrues da arquitetura MIPS, pela conveno de hardware, o registrador 0 sempre conter o valor 0. A maquina refora isso: l o registrador 0 sempre retorna 0, independente do que tenha escrito l. O RiSC-16 muito simples, mas geral o bastante para resolver problemas complexos. H trs formatos de instrues de cdigo de mquina e um total de 8 instrues. Elas esto listadas na figura abaixo:

A seguinte tabela descreve as diferentes operaes de intruo.


Mnemonico add Nome e formato Add RRR-type Add Imediato RRItype Nand RRR-type Load Upper Immediate RItype Opcode (binrio) 000 Formato assembly add rA, rB, rC Ao Adiciona o contedo de regB com regC, armazena o resultado em regA Adiciona o contedo de regB com imm, armazena o resultado em regA Operao nand do contedo de regB com regC, armazena o resultado em regA Coloca os 10 primeiros bits do imm de 16 bits nos 10 primeiros bits de regA, colocando 0 nos 6 bits restantes de regA Armazena o valor de regA na memria. O endereo de memria formado pela adio de imm com o contedo de regB Carrega valor da memria em regA. O endereo de memria formado pela adio de imm com o contedo de regB Se o conteudo de regA e regB so os mesmos, vai para o endereo PC + 1 + imm, onde PC o endereo da instruo beq Vai para o endereo em regB. Armazena PC+1 em regA, onde PC o endereo da instruo jalr.

addi

001

addi rA, rB, imm

nand

010

nand rA, rB, rC

lui

011

lui rA, imm

sw

Store word RRItype

101

sw rA, rB, imm

lw

Load Word RRItype

100

lw rA, rB, imm

beq

Branch if Equal RRI-type

110

beq rA, rB, imm

jalr

Jump And Link Register RRI-type

111

jalr rA, rB

2. Linguagem de montagem RiSC-16 e Assembler A distribuio inclui um simples montador para o RiSC-16 (este o primeiro projeto atribudo aos meus estudantes na turma de Organizao de Computadores). O montador chamando a e vem como um executvel SPARC. Tambm est includo o cdigo fonte do montador caso voc queira recompilar para alguma outra arquitetura (por exemplo, x86). O formato para uma linha de cdigo assembly :
Label:<espao>opcode<espao>field0, field1, filed2<espao># comentrio

O campos mais a esquerda na linha o campo label. Labels RiSC vlidos so qualquer combinao de letras e nmeros seguidos por dois pontos. Os dois pontos no final do label no so opcionais um label sem os dois pontos interpretado como um opcode. Depois do label opcional est o espao em branco (espao(s) ou tab(s)). Ento segue o campo opcode, onde o opcode pode ser qualquer instruo mnemnica da linguagem de montagem listada na tabela acima. Depois de mais um espao vem uma seria de campos separados por virgulas e possivelmente espaos em branco (voc precisa ter ou espaos em branco ou uma virgula ou ambos entre cada campo). Todos os campos para valores de registradores so dados como nmeros decimais, opcionalmente precedidos pela letra r como em r0, r1,r2, etc. Campos para valores imediatos so dados ou na forma decimal, octal ou hexadecimal. Nmeros octais so precedidos pelo caractere 0 (zero). Por exemplo, 032 interpretado como o n mero octal zero-trs-dois que corresponde ao nmero decimal 26. No interpretado como o nmero decimal 32. Nmeros hexadecimais so precedidos por 0x (zero -x). Por exemplo, 0x12 (hex-um-dois) corresponde ao nmero decimal 18, no ao decimal 12. Para aqueles que conhecem a linguagem de programao C, voc se sentir perfeitamente em casa. O nmero de campos depende da instruo. A seguinte tabela descreve as instrues Codigo em formato assembly add regA, regB, regC addi regA, regB, regC nand regA, regB, regC lui regA, immed sw regA, regB, immed lw regA, regB, immed beq regA, regB, immed jalr regA, regB Significado R[regA] <- R[regB] + R[regC] R[regA] <- R[regb] + immed R[regA] <- ~(R[regB] & R[regC]) R[regA] <- immed & 0xFFC0 R[regA] -> Mem[R[regB] + immed] R[regA] <- Mem[R[regB] + immed] If (R[regA] == R[regB]){ PC <- PC + 1 + immed (if label, PC <- label)} PC <- R[regB], R[regA] <- PC + 1

Qualquer coisa depois de uma # considerado como um comentrio e ignorado. O campo de comentrio termina no fim da linha. Comentrios so vitais para a criao de programas em linguagem de montagem compreensveis, por que as instrues em si so bastante crticas. Em adio as instrues do RiSC-16, um programa em linguagem de montagem pode conter diretivas para o montador. Essas so chamadas de pseudo-instrues. As seis diretivas assembler que usaremos so nop, halt, lli, movi, .fill e .space (note os pontos no inicio de .fill e .space, que simplesmente significa que estes representam valores de dados, no instrues executveis).

Cdigo em formato assembly nop halt lli regA, immed movi regA, immed .fill immed .space immed

Significado Faz nada Para a mquina e imprime o estado R[regA] <- R[regB] + (immed & 0x3F) R[regA] <- immed Inicializa dado com o valor immed Array preenchido com 0 (zero) do tamanho de immed

Os seguintes pargrafos descrevem essas pseudo-instrues em mais detalhes: A pseud-instruo nop significa fazer nada neste ciclo e recolocada pela instruo add 0,0,0 (que claramente no faz nada). A pseudo-instruo halt significa parar de executar instrues e imprimir o estado atual da mquina e substituda por jalr 0,0 com um campo imediato no-zero. Esta descrita em mais detalhes nos documentos The pipelined RiSC16 e An out-of order Risc-16, no qual HALT um subconjunto de instrues de chamada de sistema para o proposito de manipular interrupes e excees: qualquer instruo JALR com um valor imediato no-zero usa aquele imediato como um opcode de chamada de sistema. Isto permite tais instrues como chamadas de sistema, halt, retorno de exceo, etc. A pseudo-instruo lli (load-lower-immediate) significa OR dos seis ltimos bits deste nmero para dentro do registrador indicado e substitudo por addi X,X,imm6, onde X o registrador especificado, e imm6 e igual a imm & 0x3F. Esta instruo pode ser usada em conjunto com lui: o lui primeiro move os dez primeiros bits de um dado numero (ou endereo, se um label especificado) para dentro do registrador, colocando os seis ltimos bits em 0; o lli move os seis ltimos bits para dentro. O numero de 6-bits garantido de ser interpretado como um positivo e assim evita extenses de sinal; portanto, o resultado de addi essencialmente a concatenao de dois campos de bits. A pseudo-instruo movi s um atalho para a combinao lui+lli. Note, contudo, que a instruo movi parece que somente representa uma simples instruo, enquanto que de fato representa duas. Isso pode jogar fora sua contagem se voc est esperando uma certar distncia entre instrues. Assim, sempre uma boa ideia usar labels sempre que possvel. A diretiva .fill diz ao montador para colocar um numero no local onde a instruo a seria normalmente armazenada. A diretiva .fill usa um campo, que pode ser ou um valor numrico ou um endereo simblico. Por exemplo, .fill 32 coloca o valor 32 onde a instruo normalmente seria armazenada. Usando .fill com um endereo simblico armazenar o endereo do label. No exemplo abaixo, a linha .fill start armazenar o valor 2, por que o label start refere ao endereo 2.
4

A diretiva .space toma um inteiro n como um argumento e substitudo por n copias de .fill 0 no cdigo; isto , resulta na criao de n palavras de 16bits todas inicializadas com zero.

O seguinte cdigo um programa em linguagem de montagem que decrementa a partir de 5, parando quando chegar em 0. lw lw add beq beq halt .fill .fill .fill 1,0,count 2,1,2 1,1,2 0,1,1 0,0,start 5 -1 Start # carrega reg1 com 5 (usa endereo simbolico) # carrega reg2 com -1 (usa enredeo simblico) # decrementa reg1 poderia ser addi 1,1,-1 # Vai para o fim do programa quando reg1 == 0 # volta para o comeo do loop # fim do programa

start:

done: count: neg1: startAddr:

# conter o endereo do comeo (2)

Em geral, cdigo risc-16 aceitvel uma instruo por linha. Est tudo bem se tem uma linha em branco, se comentada (isto , a linha comea com #) ou no (isto , s uma linha em branco). Contudo, um label no pode aparecer em uma linha sozinho; ele deve ser seguido por uma instruo vlida na mesma linha (uma diretiva .fill ou halt/nop/etc conta como uma instruo). Note que as 8 instrues bsicas da arquitetura risc-16 forma uma ISA completa que pode executar computao arbitraria. Por exemplo: Mover valores constantes para dentro de registradores. O numero 0 pode ser movido para dentro de qualquer registrador em um ciclo (add rX r0 r0). Qualquer nmero entre -64 e 63 pode ser colocado dentro de um registrador em uma operao usando a instruo ADDI (addi rX r0 numero). E, como mencionado, qualquer numero de 16-bits pode ser movido para dentro de um registrador em duas operaes (lui+lli). Subtrair nmeros. Subtrao simplesmente adicionar o numero negativo. Qualquer numero pode ser negativado em duas instrues pela troca dos seus bits e adicionando 1. Troca de bits pode ser feita fazendo um NAND dos valores com eles mesmos; adicionando 1 feito com uma instruo ADDI. Portanto, subtrao um processo de trs instrues. Note que sem um registrador extra, um processo destrutivo. Multiplicar nmeros. Multiplicao facilmente feita por adies repetidas, teste de bit, e deslocando a esquerda um bitmask por um bit (que o mesmo que uma soma consigo mesmo).

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy