Manual do Simulador do Processador P3

download Manual do Simulador do Processador P3

of 41

description

Manual de utilização do simulador de P3 - simulador de assembly

Transcript of Manual do Simulador do Processador P3

  • Manual do Simulador do Processador P3

    Guilherme ArrozJos Monteiro

    Arlindo Oliveira

    Instituto Superior TcnicoLisboa, Portugal

    Fevereiro 2005

  • Contedo1 Introduo 3

    2 Arquitectura do Processador P3 32.1 Registos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Bits de Estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.3 Memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.4 Entradas/Sadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.5 Interrupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    3 Assembler 63.1 Evocao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 Conjunto de Instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.4 Modos de Endereamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.5 Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.6 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.7 Pseudo-Instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.8 Instrues Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    4 Simulador 184.1 Evocao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.2 Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    4.2.1 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.2.2 Contadores de Instruo e Ciclos de Relgio . . . . . . . . . . . . . . . 214.2.3 Registos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.2.4 Contedo da Memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.2.5 Programa Desassemblado . . . . . . . . . . . . . . . . . . . . . . . . . . 224.2.6 Comandos de Execuo e Interrupo . . . . . . . . . . . . . . . . . . . 22

    4.3 Depurao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.4 Unidade de Controlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    4.4.1 Registos Internos Unidade de Controlo . . . . . . . . . . . . . . . . . 234.4.2 Boto Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    4.5 Micro-Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.6 Dispositivos de Entrada e Sada . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4.6.1 Janela Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.6.2 Janela Placa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.6.3 Temporizador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.6.4 Mscara de Interrupes . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    A Formatos das Instrues Assembly 31

    B Contedo das ROMs de Controlo 35

    2

  • 1 IntroduoEste documento descreve a operao do simulador para o processador P3 . Este programapermite simular a nvel funcional o processador descrito nos Captulos 11 e 12 do livro:

    Introduo aos Sistemas Digitais e MicroprocessadoresG. Arroz, J. Monteiro e A. OliveiraIST Press, 1a Edio, 2005

    O simulador P3 constitudo por dois programas, pelo simulador propriamente dito,p3sim , e por um assembler, p3as . O programa p3as converte programas descritos na lin-guagem assembly daquele processador para um ficheiro objecto. Uma vez convertido paraeste formato objecto, o programa pode ser carregado para o simulador p3sim . O simuladorp3sim permite no s a execuo normal e passo-a-passo do programa, mas tambm a exe-cuo de apenas um ciclo de relgio. Este modo de funcionamento til para se observar aevoluo passo-a-passo do micro-cdigo. De forma a tornar mais interessante a interacocom o micro-processador, foram definidos um conjunto de dispositivos de entrada e sada.Em particular, este simulador emula todas as entradas e sadas da placa DIO5 da Digilent,Inc, utilizada nas aulas de laboratrio da disciplina de Arquitectura de Computadores daLicenciatura em Engenharia Informtica e de Computadores do Instituto Superior Tcnico.

    Este documento est dividido em trs partes. Na primeira parte introduz-se a arquitec-tura do processador P3 . Na segunda parte, descreve-se a utilizao do assembler p3as . Naterceira parte, apresentado o simulador p3sim .

    2 Arquitectura do Processador P32.1 RegistosO processador P3 contm os seguintes registos visveis ao programador:

    R0-R7 : registos de uso genrico. O registo R0 no pode ser alterado e tem sempre o valor0.

    PC : program counter, contm o endereo da prxima instruo a executar. No pode seracedido directamente com instrues assembly, sendo alterado apenas com instru-es de controlo da sequncia de execuo.

    SP : stack pointer, apontador para o topo da pilha. utilizado tambm de forma in-directa, podendo apenas ser manipulado directamente (para a sua inicializao)atravs de uma instruo MOV SP, R[1-7] .

    RE : registo de estado, registo onde esto guardados os bits de estado (flags) do processa-dor, descritos na seco seguinte. Tambm no existem instrues para manipulareste registo directamente.

    Todos estes registos so inicializados a 0 aps um reset do processador.

    3

  • 2.2 Bits de EstadoDo ponto de vista do programador, existem 5 bits de estado, ou flags, neste processador. Osbits de estado esto guardados nos 5 bits menos significativos do registo RE , contendo osrestantes bits deste registo o valor 0.

    O significado dos bits de estado, do bit de menor para o de maior peso do registo RE , :

    O: overflow ou excesso, indica que o resultado da ltima operao aritmtica excede acapacidade do operando destino. Por outras palavras, o resultado no pode ser re-presentado em complemento para 2 com o nmero de bits disponveis no operandodestino, ficando este, portanto, com um valor incorrecto.

    N: negative ou sinal, indica que o resultado da ltima operao foi negativo, o que emcomplemento para 2 equivalente a dizer que o bit mais significativo do operandodestino ficou a 1.

    C: carry ou transporte, indica que a ltima operao gerou um bit de transporte para almda ltima posio do operando destino. Tambm pode ser modificado por softwareatravs das instrues STC , CLC e CMC .

    Z: zero, indica que o resultado da ltima operao foi 0.

    E: enable interrupts, habilita ou no as interrupes, conforme for 1 ou 0. Este o nico bitde estado que s alterado por software, atravs das instrues ENI e DSI .

    2.3 MemriaO espao de memria enderevel de 64k palavras (barramento de endereos de 16 bits),em que cada palavra de 16 bits (largura do barramento de dados). O acesso a uma posi-o de memria pode ser feito com qualquer instruo, usando o modo de endereamentoapropriado.

    2.4 Entradas/SadasO espao de entradas e sadas (I/O) memory mapped. Os endereos de memria a partir deFF00h esto reservados para o espao de entradas/sadas. Assim, qualquer instruo podeter acesso a um qualquer dispositivo de entrada/sada que esteja mapeado neste espaosuperior de memria do processador.

    No caso do presente simulador, os dispositivos de entrada/sada disponveis so:

    janela de texto: dispositivo que fornece uma interface com o teclado e monitor docomputador. Tem 4 portos de interface:

    leitura, endereo FFFFh : porto que permite receber caracteres teclados na janelade texto;

    escrita, endereo FFFEh : porto que permite escrever um dado caracter na janelade texto;

    estado, endereo FFFDh : porto que permite testar se houve alguma tecla premidana janela de texto;

    4

  • controlo, endereo FFFCh : porto que permite posicionar o cursor na janela detexto, posio esta onde ser escrito o prximo caracter.

    botes de presso: conjunto de 15 interruptores de presso. A activao de cada umdestes botes gera uma interrupo com o correspondente vector de interrupo.

    interruptores, endereo FFF9h : conjunto de 8 interruptores cujo estado pode ser obtidopor leitura deste endereo.

    LEDs, endereo FFF8h : cada bit da palavra escrita neste porto define quais dos 16LEDs esto ligados.

    display de 7 segmentos, endereos FFF0 , FFF1h , FFF2h e FFF3h : cada um destes por-tos de escrita controla um conjunto de 7 LEDs que formam um display.

    display de cristal lquido ou LCD: display de texto com 16 colunas e duas linhas. Tem 2portos de escrita:

    endereo FFF5h : porto que permite escrever um dado caracter no display; endereo FFF4h : porto que permite posicionar o cursor no display, posio estaonde ser escrito o prximo caracter.

    mscara de interrupes, endereo FFFAh : posio de um filtro que permite seleccio-nar individualmente quais dos 16 primeiros vectores de interrupo (de 0 a 15) estohabilitados. Aps um reset, todos os bits da mscara de interrupo esto a 0.

    temporizador: dispositivo que fornece a gerao de uma interrupo ao fim de umintervalo de tempo real, especificado pelo utilizador. Tem 2 portos de interface:

    controlo, endereo FFF7h : porto que permite arrancar (colocando o bit menossignificativo a 1) ou parar (colocando esse bit a 0) o temporizador.

    valor de contagem, endereo FFF6h : porto que permite indicar o nmero de in-tervalos de 100ms ao fim do qual o temporizador gerar uma interrupo.

    O controlo destes dispositivos explicado em maior detalhe na Seco 4.6.

    2.5 InterrupesO simulador disponibiliza 15 botes para a gerao de interrupes externas (para almdestas, o simulador tem apenas mais uma fonte de interrupes, o temporizador). Qualquerdestas interrupes provoca a activao de um sinal INT , ligado a um dos pinos externosdo processador. No final da execuo de cada instruo, este sinal testado para verificar seexiste alguma interrupo pendente. Nesse caso, so efectuados dois testes:

    o bit de estado E (enable interrupts) tem que estar activo.

    o bit da mscara de interrupes correspondente a este vector de interrupo tem queestar activo.

    5

  • Caso estas duas condies se verifiquem, chamada a rotina de servio dessa interrupo,determinada pelo vector de interrupo, lido do barramento de dados. Os endereos dasrotinas de interrupo encontram-se na Tabela de Vectores de Interrupo, uma tabela com256 posies guardada em memria a partir do endereo FE00h . Assim, o contador deprograma PC carregado com o valor da posio de memria M[FE00h+vector] .

    Por omisso, o vector de interrupo associado a cada um dos 15 botes de interrupo simplesmente o ndice do boto. Porm, este pode ser alterado pelo utilizador atravs dainterface do simulador. Esta interface permite tambm desabilitar individualmente cada umdos botes de interrupo.

    O vector de interrupo associado ao temporizador o 15, e este fixo.A chamada rotina de servio da interrupo guarda o registo RE na pilha e desabilita as

    interrupes (E=0). da responsabilidade do programador salvaguardar qualquer registoque seja modificado nesta rotina. A rotina deve ser terminada com a instruo RTI que repeo valor de RE a partir da pilha.

    3 Assembler3.1 EvocaoOmodo de evocao do assembler p3as simplesmente:

    $ p3as .as

    O nome do ficheiro assembly tem que ter extenso .as . Caso no haja erros de assembly, sogerados dois ficheiros:

    .exe : ficheiro com o cdigo binrio, pronto a ser executado no simulador p3sim .

    .lis : ficheiro com o valor atribudo s referncias usadas no programa assembly.

    3.2 Conjunto de InstruesAs instrues assembly aceites pelo assembler p3as so as apresentadas na Tabela 11.4 dolivro. Para alm destas instrues, o assembler reconhece um conjunto de comandos (cha-mados de pseudo-instrues, Tabela 11.16 do livro) que, embora no gerem cdigo binrio,permitem reservar espao para variveis ou tornar o cdigo mais legvel. O total de instru-es reconhecidas pelo p3as encontram-se na Tabela 1, agrupadas por classes.

    A condio .cond nas instrues de salto condicional (BR. cond, JMP. cond e CALL. cond)pode ser uma de:

    O, NO : bit de estado excesso (overflow)

    N, NN : bit de estado sinal (negative)

    C, NC : bit de estado transporte (carry)

    Z, NZ : bit de estado zero so atendidas (enable)

    I, NI : bit que indica se existe alguma interrupo pendente

    P, NP : resultado positivo (Z N)

    6

  • Pseudo Aritmticas Lgicas Deslocamento Controlo Transfer. GenricasORIG NEG COM SHR BR MOV NOPEQU INC AND SHL BR. cond MVBH ENIWORD DEC OR SHRA JMP MVBL DSISTR ADD XOR SHLA JMP. cond XCH STCTAB ADDC TEST ROR CALL PUSH CLC

    SUB ROL CALL. cond POP CMCSUBB RORC RETCMP ROLC RETNMUL RTIDIV INT

    Tabela 1: Conjunto de instrues do P3 .

    Estas combinaes permitem testar cada uma destas condies e realizar o salto caso a con-dio seja a 1 ou a 0, respectivamente.

    As instrues aritmticas assumem os operandos em formato de complemento para 2.As excepes a esta regra so a multiplicao e a diviso que assumem nmeros sem sinal.No caso destas duas operaes, ter que ser o programador a ter o cuidado de manipular osinal parte.

    Neste conjunto, h instrues de 0, 1 e 2 operandos. Nas instrues de 2 operandos, umdeles tem que ser necessariamente um registo. O outro operando pode ter diversos modosde endereamento, como se explica em seguida. Os detalhes do funcionamento de cadainstruo (a operao realizada e os bits de estado alterados) so tambm apresentados maisadiante.

    3.3 ConstantesO facto do processador P3 ser um processador de 16 bits define os valoresmximos possveisde especificar para uma constante. Assim, o intervalo vlido para inteiros positivos ser de0 a 216 1 e para inteiros em complemento para 2 de 215 a +215 1.

    Valores constantes podem ser especificados de trs formas no cdigo assembly:Valor numrico em binrio: para uma constante numrica ser interpretada em binrio deve

    ser terminada com a letra b; so vlidos valores entre -100000000000000b e1111111111111111b .

    Valor numrico em octal: para uma constante numrica ser interpretada em octal deve serterminada com a letra o; so vlidos valores entre -100000o e 177777o .

    Valor numrico em decimal: qualquer valor inteiro entre -32768 e 65535 . Pode opcional-mente ser terminada com a letra d, embora tal seja assumido quando nenhuma outrabase for indicada;

    Valor numrico em hexadecimal: para uma constante numrica ser interpretada em hexa-decimal deve ser terminada com a letra h; so vlidos valores entre -8000h e FFFFh .

    Caracter alfanumrico: um caracter entre plicas, por exemplo, g , convertido para o seucdigo ASCII.

    7

  • Notar, no entanto, que o uso de constantes no meio do cdigo assembly (ou de qualqueroutra linguagem de programao) extremamente desaconselhvel. Em vez disso, deve-seusar o comando EQU para definir constantes (ver Seco 3.7). Esta prtica, por um lado, tornao cdigo mais legvel, pois o smbolo associado constante, se convenientemente escolhido,d uma pista sobre a aco que se est a tomar, e, por outro lado, permite uma actualizaomais fcil do cdigo, pois constantes que esto associadas no tm que ser alteradas emvrios stios dentro do cdigo (porventura falhando-se alguma), mas simplesmente na linhado comando EQU .

    3.4 Modos de EndereamentoOs operandos usados nas instrues assembly podem ter 7modos de endereamento, a seguirindicados. O significado dos smbolos usados nesta seco :

    op: operando;Rx : registo Rx . O processador tem 8 registos visveis para o programador,

    portanto 0 x 7, em que R0 sempre igual a 0;W: constante de valor W (de 16 bits);M[y] : referncia posio de memria com endereo y;PC : registo contador de programa (program counter);SP : registo do apontador para o topo da pilha (stack pointer)

    Endereamento por Registo op = RxO valor do operando o contedo do registo Rx .

    Endereamento por Registo Indirecto op = M[Rx]O valor do operando o contedo da posio de memria cujo endereo o contedo doregisto Rx .

    Endereamento Imediato op = WO valor do operando W. Naturalmente, este modo no pode ser usado como operandodestino.

    Endereamento Directo op = M[W]O valor do operando o contedo da posio de memria com o endereo W.

    Endereamento Indexado op = M[Rx+W]O valor do operando o contedo da posio de memria com o endereo resultante dasoma de W com o contedo de Rx , Rx+W . Nota: a verso W+Rx no aceite pelo assembler.

    Endereamento Relativo op = M[PC+W]O valor do operando o contedo da posio de memria com o endereo resultante dasoma de W com o contedo de PC , PC+W . Nota: a verso W+PC no aceite pelo assembler.

    8

  • Endereamento Baseado op = M[SP+W]O valor do operando o contedo da posio de memria com o endereo resultante dasoma de W com o contedo de SP , SP+W . Nota: a verso W+SP no aceite pelo assembler.

    Na utilizao destes modos de endereamento, h as seguintes restries:

    - no caso das instrues com 2 operandos, para um deles tem que ser necessariamenteusado o endereamento por registo.

    - o modo imediato no pode ser usado como operando destino, por razes bvias.- as instrues MUL e DIV , por usarem como destino ambos os operandos (ver descrioadiante), no podem usar o modo imediato em nenhum dos operandos. Alm disso,os dois operandos no devem ser o mesmo devido a limitaes na arquitectura doprocessador que provoca que parte do resultado se perca.

    3.5 EtiquetasPara referenciar uma dada posio dememria, pode-se colocar uma etiqueta (label) antes dainstruo que vai ficar nessa posio. A etiqueta consiste num nome (conjunto de caracteresalfanumricos, mais o caracter _, em que o primeiro no pode ser um algarismo) seguidade :. Por exemplo,

    VoltaAqui: INC R1

    Se agora se quiser fazer um salto para esta instruo, pode-se usar:

    BR VoltaAqui

    em vez de se calcular o endereo em que a instruo INC R1 ficar depois da assemblagem.Para facilitar a leitura do cdigo assembly, convenciona-se que estas etiquetas so pala-

    vras capitalizadas todas juntas: primeira letra de cada palavra emmaisculas e restantes emminsculas, como no exemplo anterior VoltaAqui .

    O valor atribudo s etiquetas pode ser consultado no ficheiro com a extenso .lis ,gerado quando da execuo do p3as .

    3.6 ComentriosUm comentrio comea com o caracter ;, que indica ao assembler que todo o texto que sesegue nessa linha dever ser ignorado no processo de traduo do cdigo assembly.

    3.7 Pseudo-InstruesChama-se pseudo-instrues ao conjunto de comandos reconhecidos pelo assembler que noso instrues assembly, mas que permitem dar ao assembler um conjunto de informaes edirectivas necessrias para a sua correcta execuo ou para simplificar a sua utilizao. Afuno das pseudo-instrues , por um lado, controlar a forma como o cdigo gerado(por exemplo, indicando as posies de memria onde colocar o executvel ou reservandoposies de memria para dados), por outro lado, permitir definir smbolos (constantes ouposies de memria) que tornam o cdigo mais legvel e mais fcil de programar. Nestaseco descrevem-se as pseudo-instrues usadas pelo assembler p3as .

    9

  • ORIGFormato: ORIG Funo: o comando ORIG permite especificar no campo a primeira posio dememria em que um bloco de programa ou dados carregado em memria. Este comandopode aparecer vrias vezes no cdigo, permitindo que se definam blocos em diferentes zonasde memria.

    EQUFormato: EQU Funo: o comando EQU permite associar um valor const a um smbolo . Convenciona-seque estes smbolos so palavras todas em maisculas, com uso possvel do caracter de sepa-rao _, por exemplo, NUM_LINHAS .

    Nota: Este comando associa um nome a uma constante. Isto permite que, no cdigo assembly,em vez de um valor numrico que em geral no d muita informao, se use um nome quepode indicar que tipo de aco se est a tomar nesse ponto do cdigo. Adicionalmente, per-mite que numa posterior alterao baste alterar a linha do comando EQU para que a alteraose propague pelo cdigo todo.

    WORDFormato: WORD Funo: o comando WORD permite reservar uma posio de memria para conter uma vari-vel do programa assembly, associando a essa posio o nome especificado em .O campo const indica o valor a que essa posio de memria deve ser inicializada. Con-venciona-se que estas etiquetas so palavras capitalizadas todas juntas: primeira letra decada palavra em maisculas e restantes em minsculas, por exemplo CicloInterno .

    STRFormato: STR |[,|]Funo: o comando STR coloca em posies de memria consecutivas o texto que estiverentre plicas ou o valor de . No caso de , o cdigo ASCII de cada caracterentre plicas fica numa posio de memria (portanto usa tantas posies de memria quan-tos os caracteres em ). Podem-se usar mais do que um parmetro, separados porvrgulas, sendo feita a sua concatenao em memria. fica com o endereo doprimeiro caracter. A conveno para os nomes destas etiquetas o mesmo que para WORD .

    TABFormato: TAB Funo: o comando TAB reserva o nmero de posies de memria especificados no campo sem as inicializar com qualquer valor. fica com o endereo da pri-meira posio. A conveno para os nomes destas etiquetas o mesmo que para WORD eSTR .

    10

  • 3.8 Instrues AssemblyAs instrues assembly vlidas para o micro-processador P3 so apresentadas em seguidapor ordem alfabtica. indicado o formato da instruo, a funo realizada e as flags altera-das (Z, zero; C, carry ou transporte; N, negative ou sinal; O, overflow ou excesso; E, enable dasinterrupes).

    ADDFormato: ADD op1, op2 Flags: ZCNOAco: op1 op1 + op2, soma a op1 o valor de op2.

    ADDCFormato: ADDC op1, op2 Flags: ZCNOAco: op1 op1 + op2 + C, igual a ADD excepto que soma mais um caso o bit de estadotransporte esteja a 1.

    ANDFormato: AND op1, op2 Flags: ZNAco: op1 op1 op2. Faz o AND lgico bit-a-bit dos dois operandos.

    BRFormato: BR Flags: NenhumaAco: PC PC + , branch, salto relativo incondicional para posies de memria frente (ou atrs, se for ne-gativo) da posio actual. O valor de tem que estar compreendido entre-32 e 31. Normalmente especificado com uma etiqueta.

    BR.condFormato: BR. cond Flags: NenhumaAco: salto relativo condicional baseado no valor de um dada condio. As verses dispo-nveis so:

    Condio Transporte Sinal Excesso Zero Interrupo PositivoVerdade BR.C BR.N BR.O BR.Z BR.I BR.PFalso BR.NC BR.NN BR.NO BR.NZ BR.NI BR.NP

    Caso a condio se verifique, a prxima instruo a ser executada ser a do endereoPC + (PC PC + ). Caso contrrio, funciona como umNOP . O valor de tem que estar compreendido entre -32 e 31. Normal-mente especificado com uma etiqueta.

    11

  • CALLFormato: CALL Flags: NenhumaAco: M[SP] PC, SP SP - 1, PC , chamada a subrotina com incio em . O endereo da instruo seguinte ao CALL colocado na pilha e feito umasalto para a subrotina. Normalmente especificado com uma etiqueta.

    CALL.condFormato: CALL. cond Flags: NenhumaAco: chamada condicional a uma subrotina baseado no valor de um dado bit de estado.As verses disponveis so:

    Condio Transporte Sinal Excesso Zero Interrupo PositivoVerdade CALL.C CALL.N CALL.O CALL.Z CALL.I CALL.PFalso CALL.NC CALL.NN CALL.NO CALL.NZ CALL.NI CALL.NP

    Caso a condio se verifique, comporta-se como uma instruo CALL . Caso contrrio, funci-ona como um NOP . Normalmente especificado com uma etiqueta.

    CLCFormato: CLC Flags: CAco: clear C, coloca o bit de estado transporte a 0.

    CMCFormato: CMC Flags: CAco: complementa o valor do bit de estado transporte.

    CMPFormato: CMP op1, op2 Flags: ZCNOAco: compara os operandos op1 e op2, actualizando os bits de estado. Efectua a mesmaoperao que SUB op1, op2 sem alterar nenhum dos operandos. habitualmente seguidano programa por uma instruo BR. cond, JMP. cond ou CALL. cond

    COMFormato: COM op Flags: ZNAco: op op, faz o complemento bit-a-bit de op.

    DECFormato: DEC op Flags: ZCNOAco: op op - 1, decrementa op em uma unidade.

    12

  • DIVFormato: DIV op1, op2 Flags: ZCNOAco: executa a diviso inteira de op1 por op2, deixando o resultado em op1 e o resto emop2. Assume operandos sem sinal. O bit de estado O fica a 1 no caso de diviso por 0. Osbit de estado C e N ficam sempre a 0. Uma vez que ambos os operandos so usados paraguardar o resultado, nenhum deles pode estar no modo imediato. Pela mesma razo, osdois operandos no devem ser o mesmo pois parte do resultado ser perdido.

    DSIFormato: DSI Flags: EAco: disable interrupts, coloca o bit de estado E a 0, inibindo assim as interrupes.

    ENIFormato: ENI Flags: EAco: enable interrupts, coloca o bit de estado E a 1, permitindo assim as interrupes.

    INCFormato: INC op Flags: ZCNOAco: op op + 1, incrementa op em uma unidade.

    INTFormato: INT const Flags: EZCNOAco: M[SP] RE, SP SP - 1, M[SP] PC, SP SP - 1, RE 0, PCM[FE00h+const],gera uma interrupo com o vector const . Este vector tem que estar compreendido entre0 e 255. Esta interrupo ocorre sempre, independentemente do valor do bit de estado E,enable interrupts.

    JMPFormato: JMP Flags: NenhumaAco: PC, jump, salto absoluto incondicional para a posio de memria como valor . Normalmente especificado com uma etiqueta.

    JMP.condFormato: JMP. cond Flags: NenhumaAco: salto absoluto condicional baseado no valor de um dada condio. As verses dis-ponveis so:

    Condio Transporte Sinal Excesso Zero Interrupo PositivoVerdade JMP.C JMP.N JMP.O JMP.Z JMP.I JMP.PFalso JMP.NC JMP.NN JMP.NO JMP.NZ JMP.NI JMP.NP

    13

  • Caso a condio se verifique, a prxima instruo a ser executada ser a apontada por (PC ). Caso contrrio, funciona como um NOP . Normalmente especificado com uma etiqueta.

    MOVFormato: MOV op1, op2 Flags: NenhumaAco: op1 op2, copia o contedo de op2 para op1 .

    Para alm dosmodos de endereamento comuns a todas as instrues (conforme Seco 3.4),esta instruo permite ler e escrever no registo apontador da pilha SP , mas apenas em con-juno com omodo de endereamento por registo: MOV SP, Rx e MOV Rx, SP . A primeiradestas instrues ser necessria no incio de todos os programas que utilizem a pilha.

    MULFormato: MUL op1, op2 Flags: ZCNOAco: op1|op2 op1 op2, multiplica op1 por op2 , assumindo-os como nmeros sem si-nal. Como o resultado necessita de 32 bits so usados os dois operandos para o guardar:op1 fica com o 16 mais significativos e op2 com os 16 menos significativos. O bit de estadoZ actualizado de acordo com o resultado, os restantes ficam a 0. Uma vez que ambos osoperandos so usados para guardar o resultado, nenhum deles pode estar no modo imedia-to. Pela mesma razo, os dois operandos no devem ser o mesmo pois parte do resultadoser perdido.

    MVBHFormato: MVBH op1, op2 Flags: NenhumaAco: op1 (op1 00FFh) (op2 FF00h), copia o octeto de maior peso de op2 para oocteto de maior peso de op1 .

    MVBLFormato: MVBL op1, op2 Flags: NenhumaAco: op1 (op1 FF00h) (op2 00FFh), copia o octeto de menor peso de op2 para oocteto de menor peso de op1 .

    NEGFormato: NEG op Flags: ZCNOAco: op -op, troca o sinal (complemento para 2) do operando op .

    NOPFormato: NOP Flags: NenhumaAco: no operation, no altera nada.

    14

  • ORFormato: OR op1, op2 Flags: ZNAco: op1 op1 op2, faz o OR lgico bit-a-bit dos dois operandos.

    POPFormato: POP op Flags: NenhumaAco: SP SP + 1, opM[SP], copia o valor do topo da pilha para op e reduz o tamanhodesta.

    PUSHFormato: PUSH op Flags: NenhumaAco: M[SP] op, SP SP - 1, coloca op no topo da pilha.

    RETFormato: RET Flags: NenhumaAco: SP SP + 1, PCM[SP], retorna de uma subrotina. O endereo de retorno obtidodo topo da pilha.

    RETNFormato: RETN const Flags: NenhumaAco: SP SP + 1, PC M[SP], SP SP + const, retorna de uma subrotina libertandoconst posies do topo da pilha. Esta instruo permite retornar de uma subrotina reti-rando automaticamente parmetros que tenham sido passados para essa subrotina atravsda pilha. O valor de const tem que estar compreendido entre 0 e 1023 (10 bits).

    ROLFormato: ROL op, const Flags: ZCNAco: rotate left, faz a rotao esquerda dos bits de op o nmero de vezes indicado porconst . Mesma operao que o deslocamento simples,SHL , mas os bits da esquerda no seperdem, sendo colocados nas posies mais direita de op . O valor de const tem que estarcompreendido entre 1 e 16.

    ROLCFormato: ROLC op, const Flags: ZCNAco: rotate left with carry, mesma operao que ROL , mas envolvendo o bit de estado trans-porte: o valor de C colocado na posio mais direita de op e o bit mais esquerda de op colocado em C. O valor de const tem que estar compreendido entre 1 e 16.

    15

  • RORFormato: ROR op, const Flags: ZCNAco: rotate right, faz a rotao direita dos bits de op o nmero de vezes indicado porconst . Mesma operao que o deslocamento simples, SHR , mas os bits da direita no seperdem, sendo colocados nas posies mais esquerda de op . O valor de const tem queestar compreendido entre 1 e 16.

    RORCFormato: RORC op, const Flags: ZCNAco: rotate right with carry, mesma operao que ROR , mas envolvendo o bit de estadotransporte: o valor de C colocado na posio mais esquerda de op e o bit mais direitade op colocado em C. O valor de const tem que estar compreendido entre 1 e 16.

    RTIFormato: RTI Flags: EZCNOAco: SP SP + 1, PC M[SP], SP SP + 1, RE M[SP], return from interrupt, retornade uma rotina de servio a uma interrupo. O endereo de retorno e os bits de estado soobtidos do topo da pilha, por esta ordem.

    SHLFormato: SHL op, const Flags: ZCNAco: shift left, deslocamento esquerda dos bits de op o nmero de vezes indicado porconst . Os bits mais esquerda de op so perdidos e colocado 0 nas posies mais direi-ta. O bit de estado transporte fica com o valor do ltimo bit perdido. O valor de const temque estar compreendido entre 1 e 16.

    SHLAFormato: SHLA op, const Flags: ZCNOAco: shift left arithmetic, mesma operao que SHL , mas actualizando os bits de estadocorrespondentes s operaes aritmticas. Permite realizar de forma expedita uma multipli-cao de op por 2n. O valor de const tem que estar compreendido entre 1 e 16.

    SHRFormato: SHR op, const Flags: ZCNAco: shift right, deslocamento direita dos bits de op o nmero de vezes indicado porconst . Os bits mais direita de op so perdidos e so colocados 0 nas posies mais es-querda. O bit de estado transporte fica com o valor do ltimo bit perdido. O valor de consttem que estar compreendido entre 1 e 16.

    16

  • SHRAFormato: SHRA op, const Flags: ZCNOAco: shift right arithmetic, deslocamento direita dos bits de op , mas mantendo o bit desinal. Os bits mais direita de op so perdidos, mas os bits mais esquerda mantm o valoranterior. O bit de estado transporte fica com o valor do ltimo bit perdido. Permite realizarde forma expedita uma diviso de op por 2n. const entre 1 e 16.

    STCFormato: STC Flags: CAco: set C, coloca o bit de estado transporte a 1.

    SUBFormato: SUB op1, op2 Flags: ZCNOAco: op1 op1 - op2, subtrai a op1 o valor de op2.

    SUBBFormato: SUBB op1, op2 Flags: ZCNOAco: op1 op1 - op2 - C, igual a SUB excepto que subtrai mais um caso o bit de estadotransporte esteja a 1.

    TESTFormato: TEST op1, op2 Flags: ZNAco: testa o bits dos operandos op1 e op2, actualizando os bits de estado. Efectua a mesmaoperao que AND op1, op2 sem alterar nenhum dos operandos.

    XCHFormato: XCH op1, op2 Flags: NenhumaAco: exchange op1/op2, op1 op2, op2 op1, troca os valores de op1 e op2 .

    XORFormato: XOR op1, op2 Flags: ZNAco: op1 op1 op2. Faz a operao lgica EXCLUSIVE-OR bit-a-bit dos dois operandos.

    17

  • 4 Simulador

    4.1 EvocaoOmodo de evocao do simulador p3sim simplesmente:

    $ p3sim [.exe]

    em que .exe o executvel gerado pelo assembler p3as que se pretende simular.Os parntesis rectos indicam que o ficheiro .exe opcional, o programa a simularpode tambm ser carregado atravs da interface do simulador.

    Para sair do simulador deve-se escolher a opo Sai do menu Ficheiro.

    4.2 AmbienteA evocao do simulador lana uma janela como a representada na Figura 1.

    Figura 1: Interface do simulador.

    Nesta janela existem 6 seces diferentes que se explicam em seguida, no sentido de cimapara baixo na janela.

    18

  • 4.2.1 Menus

    Na parte superior da janela existem 5 menus que se abrem quando seleccionados: Ficheiro,Definies, Comandos, Depurao e Ver. Qualquer destes menus pode ser mantido aberto se-leccionando a primeira linha (a tracejado).

    As opes de cada menu so as seguintes:

    Ficheiro:as opes deste menu esto relacionadas com a manipulao de ficheiros, quer paraleitura quer para escrita.

    Carrega Programa permite carregar para o simulador um novo programa gerado pelop3as .

    Escreve Memria escreve para um ficheiro o contedo actual da memria. O ficheirogerado texto com uma posio de memria por cada linha, com endereo e con-tedo dessa posio. Todos estes valores so de 16 bits e esto em hexadecimal.

    Carrega Memria carrega directamente algumas posies de memria. O ficheiro deentrada deve ser em texto, com o mesmo formato gerado pelo comando EscreveMemria, uma posio dememria por cada linha, com endereo e contedo dessaposio. Podem especificar-se o nmero de posies que se quiser e a sua ordemno importante. Todos estes valores tm que estar em hexadecimal e ser de 16bits.

    Carrega ROM de Controlo permite alterar ao contedo da ROM da unidade de con-trolo. Esta opo til para modificar o micro-programa das instrues. O fi-cheiro de entrada deve ser texto, com uma posio de memria por linha. Emcada linha deve constar o endereo da posio a alterar (a ROM tem um barra-mento de endereos de 9 bits, portanto 512 posies de memria) e o novo valora colocar nessa posio (cada posio desta ROM tem 32 bits), tudo em hexadeci-mal.

    Carrega ROM A permite alterar ao contedo da ROM que faz o mapeamento de ins-trues. A ROM A endereada com o campo do cdigo da instruo assem-bly presente no registo de instruo, colocando sada o endereo de incio damicro-rotina que realiza esta instruo na ROM de Controlo. Esta opo tilpara acrescentar novas instrues ou modificar o micro-programa de instruesj existentes. O ficheiro de entrada deve ser texto, com uma posio de memriapor linha. Em cada linha deve constar o endereo da posio a alterar (esta ROMtem 64 posies) e o novo valor a colocar nessa posio (cada posio desta ROMtem 9 bits), tudo em hexadecimal.

    Carrega ROM B permite alterar ao contedo da ROMque faz omapeamento domodode endereamento. A ROM B endereada com o campo do modo de enderea-mento da instruo assembly presente no registo de instruo, de acordo com aFigura 12.8 do livro, colocando sada o endereo da sub-micro-rotina na ROMde Controlo que l/escreve os operandos de acordo com esse modo. Esta opo til para acrescentar ou modificar os modos de endereamento existentes. Oficheiro de entrada deve ser texto, com uma posio de memria por linha. Em

    19

  • cada linha deve constar o endereo da posio a alterar (esta ROM tem 16 posi-es) e o novo valor a colocar nessa posio (cada posio desta ROM tem 9 bits),tudo em hexadecimal.

    Sai sada do programa, perdendo-se toda a informao sobre o contexto da simulao.

    Definies:menu com opes de configurao do prprio simulador.

    Define IVAD define quais os vectores de interrupo associado a cada um dos botesde interrupo. Permite ainda desabilitar individualmente cada boto de inter-rupo. As alteraes s tm efeito aps se pressionar em Guarda.

    Zona de Memria permite alterar qual a gama de posies de memria visualizadasna seco da memria (ver Seco 4.2.4).

    Zona de Programa permite alterar o nmero de posies de memria visualizadas naseco de programa desassemblado (ver Seco 4.2.5).

    Comandos:os comandos deste menu so os mesmos que os descritos na Seco 4.2.6. A razoda duplicao que por vezes pode ser til ter este menu fixo numa janela pequena eindependente.

    Depurao:neste menu esto um conjunto de opes que facilitam a depurao de programas.

    Pontos de Paragem esta opo lista os pontos de paragem (ou breakpoints, endereosonde a execuo do programa pra) que esto definidos. Para apagar todos ospontos de paragem basta clicar em Apaga Todos. Para apagar um determinadoponto de paragemdeve-se clicar sobre ele (quer nesta janela quer na do programa)e depois clicar em Apaga. Para definir um novo ponto de paragem numa dadalinha do cdigo, deve-se seleccionar essa linha na janela do programa e depoisclicar em Adiciona.

    Escreve Registo permite alterar directamente o contedo dos registos. O valor deveestar em hexadecimal.

    Escreve Memria permite alterar directamente uma posio de memria. Os valoresdo endereo e contedo devem estar em hexadecimal. Importante: se se alteraro contedo de uma posio correspondente ao cdigo, a janela de programa noser actualizada (no h uma nova desassemblagem do programa), e, portanto,haver alguma inconsistncia.

    Ver:este menu tem opes para activar/desactivar janelas ou informao extra no simu-lador.

    Ver Controlo estende ou reduz a interface do simulador, permitindo visualizar infor-mao interna da unidade de controlo. Este modo de funcionamento descritona Seco 4.4.

    20

  • Ver ROMs cria ou elimina uma janela que mostra o contedo de cada posio de me-mria das trs ROMs da unidade de controlo: ROM de mapeamento A, ROM demapeamento B e ROM de Controlo.

    Janela Texto cria ou elimina a janela de entrada e sada de texto. Como descrito naSeco 4.6.1, as entradas/sadas para esta janela esto mapeadas nos endereosFFFCh a FFFFh . Portanto, leituras e escrita para esta gama de endereos contro-lam este dispositivo de acordo com o descrito nessa seco.

    Janela Placa cria ou elimina a janela de entrada e sada que emula a placa DIO5 daDigilent, com: um display LCD, com 16 colunas e duas linhas; 4 displays de 7 segmentos; 16 LEDs individuais; 8 interruptores; 15 botes de presso (na placa DIO5, existe um 16o boto que no est a serutilizado com o P3 ).

    Os endereos de controlo para estes dispositivos esto descritos na Seco 4.6.2.

    4.2.2 Contadores de Instruo e Ciclos de Relgio

    Por baixo dos menus, existe uma seco que mostra o nmero de instrues e o nmero deciclos de relgio que decorreram desde que se efectuou o ltimo reset ao processador.

    4.2.3 Registos

    A seco imediatamente abaixo esquerda indica o valor actual de cada registo da unidadede processamento. So apresentados os registos de uso genrico (R0 a R7 ), o contador deprograma PC (program counter) e o apontador para o topo da pilha SP (stack pointer). Todosos valores esto em hexadecimal, com 16 bits.

    Esto tambm indicados os bits de estado (flags) do sistema (cujo valor , naturalmente,0 ou 1): O, excesso ou overflow; C, transporte ou carry; N, sinal ou negative; Z, zero; e E, enableinterrupt.

    4.2.4 Contedo da Memria

    Nesta seco mostrado o contedo das diferentes posies de memria. Por razes deeficincia, no possvel ter acesso a todas as posies dememria simultaneamente. Assim,optou-se por dar acesso a duas zonas diferentes da memria, o que se traduz na divisriaao meio desta seco. Inicialmente, a parte de cima aponta para a zona de memria ondetipicamente esto os dados e a parte de baixo para a zona da pilha e tabela de interrupo,com os valores:

    incio fim posiesparte de cima: 8000h 81FFh 512parte de baixo: FD00h FEFFh 512

    21

  • Pelo menu Definies, possvel definir o endereo de incio e o nmero de posies dememria a visualizar em cada uma destas zonas. Um aumento do nmero de posies avisualizar torna a execuo do simulador mais lenta.

    Em cada linha so apresentadas 8 posies de memria consecutivas. O endereo da pri-meira destas posies o primeiro nmero da linha. Os seguintes 8 valores so o contedodessas posies. Mais uma vez, todos os valores esto em hexadecimal e so de 16 bits.No final de cada linha esto os 8 caracteres com os cdigos ASCII das posies de memriadessa linha. Caso o valor no corresponda ao cdigo ASCII de um caracter alfa-numrico, usado o caracter ..

    4.2.5 Programa Desassemblado

    Na seco em baixo esquerda apresentado o programa desassemblado. Sempre que umnovo programa carregado para o simulador, feita a sua desassemblagem. Este processoconsiste em interpretar os valores binrios do ficheiro de entrada e imprimir a instruoassembly que lhes corresponde. Notar que no se tem acesso s etiquetas usadas no ficheiroassembly original, logo todos os valores so numricos.

    A barra escura indica a prxima instruo a ser executada. No entanto, esta pode sercolocada em qualquer instruo, clicando em cima dela. Isto permite que seja a colocado umponto de paragem, atravs da opo Pontos de Paragem do menu Depurao. As instruescom pontos de paragem so antecedidas no cdigo com o sinal . Para se remover umponto de paragem pode-se clicar sobre essa instruo e fazer Apaga na mesma opo domenu Depurao.

    Quando o programa se est a executar e pra num dado ponto de paragem, tal assina-lado pela cor vermelha da barra de seleco.

    4.2.6 Comandos de Execuo e Interrupo

    No canto inferior direito esto os comandos que controlam a execuo do programa:

    Instruo executa uma nica instruo assembly.

    Corre reinicia o programa e executa-o indefinidamente ou at parar num ponto de para-gem. O utilizador pode parar o programa em qualquer altura clicando no boto Parar.

    Reinicia faz reset ao processador, colocando todos os registos a 0, excepto o PC que colocado com o valor do endereo de incio do programa.

    Continua continua a execuo do programa a partir da instruo corrente. Este bototransforma-se num boto Parar permitindo ao utilizador parar a execuo do programaem qualquer altura.

    Refresca actualiza a janela do programa sem parar a sua execuo, mostrando o contedoda memria e dos registos na altura em que se clicou neste boto.

    22

  • 4.3 DepuraoTipicamente, as ferramentas disponveis para ajudar na depurao de um programa em as-sembly so muito limitadas. A funcionalidade destas ferramentas replicada no simuladorp3sim .

    Para testar a funcionalidade de uma seco do cdigo, comea-se por colocar um pontode paragem (como indicado atrs) no incio dessa seco e d-se o comando Corre. Aps asua paragem, executa-se o programa passo-a-passo, verificando se o fluxo do programa o previsto e se depois de cada instruo os registos, bits de estado e posies de memriaforam alterados de acordo com o esperado. Caso tal no acontea, possvel que se tenhaque repetir este procedimento para se tentar perceber porque que que o comportamentodo programa diferente do esperado.

    Por vezes desejvel criar artificialmente as condies que se quer testar. Para issopodem-se carregar os registos/posies de memria com os valores necessrios para o testeque se pretende.

    Basicamente, so estes os procedimentos a seguir. Portanto, a no ser que se tenha umaintuio muito apurada para depurao de programas assembly que d uma ideia muito boade onde o erro poder estar a surgir, vivamente recomendado que o teste dos programasseja feito mdulo a mdulo. S depois de os mdulos terem sido testados separadamentesob condies tpicas e se ter bastante confiana no seu correcto funcionamento que se devecomear a junt-los e a test-los em conjunto.

    4.4 Unidade de ControloO simulador p3sim faz simulao ao nvel do micro-cdigo. Para se ter acesso informaointerna da unidade de controlo (portanto informao que no est disponvel a nvel daprogramao assembly) deve-se seleccionar a opo Ver controlo do menu Ver. Aps estaseleco a interface estendida, ficando como mostra a Figura 2.

    Em particular, temos mais uma seco na janela da interface com os registos internos daunidade de controlo e mais um boto (Clock) na seco de comandos de execuo.

    4.4.1 Registos Internos Unidade de Controlo

    A seco que aparece entre os registos e o contedo da memria mostra os valores dos regis-tos internos unidade de controlo. So registos que no so vistos pelo programador, masque so usados pelos micro-programas das instrues do processador.

    Os registos apresentados so:R8-R13 conjunto de 6 registos de 16 bits de uso genrico para osmicro-programas. Destes,

    os 3 ltimos tm significados especiais pela maneira como so usados na estrutura dosmicro-programas do processador:

    R11 : tambm chamado de SD (source data), pois na fase de operand fetch da instruo carregado com o valor do operando origem (source).

    R12 : tambm chamado de EA (effective address), pois na fase de operand fetch da instru-o carregado com o endereo de memria onde eventualmente se vai buscarum dos operandos (aquele que no usado em modo registo) e, na fase de write-back, onde se guarda o resultado caso o operando destino esteja em memria.

    23

  • Figura 2: Interface do simulador estendida com a informao de controlo.

    R13 : tambm chamado de RD (result data), pois na fase de operand fetch da instruo carregado com o valor do operando destino e fica com o valor do resultado, a serusado na fase de write-back.

    R14 de facto, este o registo apontador da pilha, SP , ou seja, o registo SP est no banco deregistos e corresponde ao R14 .

    R15 de igual forma, este o registo contador de programa, PC .

    CAR control address register, contm o endereo da ROM de Controlo com amicro-instruoa executar no prximo ciclo de relgio. Registo de 9 bits.

    SBR subroutine branch register, guarda o endereo de retorno quando se executa uma cha-mada a uma sub-rotina dentro de um micro-programa. Registo de 9 bits.

    uI micro-instruction, micro-instruo a ser executada no prximo ciclo de relgio. Amicro-instruo tem 32 bits.

    IR instruction register, contm a instruo assembly que est a ser executada. Registo de 16bits.

    INT interrupt, indica se existe ou no uma interrupo pendente, tomando os valores 1 ou0 respectivamente.

    24

  • z, c bits de estado zero e transporte sada daULA, invisveis ao programador e, portanto,apenas teis na micro-programao. So actualizados todos os ciclos de relgio, aocontrrio dos bits de estado em assembly cuja actualizao ou no controlada pelomicro-programa. Tomam os valores 0 ou 1.

    4.4.2 Boto Clock

    Este boto extra permite executar apenas um ciclo de relgio de cada vez. A sua utilidade permitir seguir o funcionamento de ummicro-programa, micro-instruo a micro-instruo.Para acabar a execuo da instruo assembly actual pode usar-se o boto Instruo, que exe-cuta os ciclos de relgio necessrios para chegar novamente ao incio do ciclo de fetch.

    Notar que o PC pode ficar momentaneamente numa zona invlida quando se carregano boto Clock, o que indicado pela mensagem A posio apontada pelo PC no contm umainstruo vlida. Isto deve-se a que, nas instrues que ocupam duas posies de memria,o PC possa ficar momentaneamente a apontar para a segunda posio de memria dessainstruo, que no corresponde a uma instruo assembly. Uma vez lida essa posio dememria, o PC de novo incrementado, voltando a uma posio vlida.

    4.5 Micro-ProgramaoO simulador p3sim est desenvolvido de forma a permitir modificar o funcionamento dasinstrues assembly do processador e mesmo introduzir novas instrues. Este processo en-volve modificar algumas posies de memria das ROMs do processador: a ROM de Con-trolo e as ROMs demapeamento, A e B. O contedo destas ROMs apresentado no Anexo B.

    A alterao de uma instruo pode, em princpio, ser feitamodificando certas posies daROMde controlo. Para isso, tem que se analisar omicro-programa da instruo assembly a al-terar e identificar quais as posies domicro-programa que devem ser alteradas. Basta entocriar um ficheiro de texto com uma linha por cada micro-instruo a alterar. Em cada linhadeve constar o endereo da ROM de controlo a alterar seguido do valor desejado para essaposio, todos os valores em hexadecimal. Este ficheiro deve depois ser carregado usando oopo Carrega ROM de Controlo do menu Ficheiro. O formato usado para as micro-instruesest apresentado no Anexo B.

    Para adicionar uma instruo, necessrio:

    1. arranjar um cdigo de instruo (opcode) nico.

    2. desenvolver o micro-programa para essa instruo.

    3. arranjar um espao livre na ROM de Controlo onde esse micro-programa vai ser colo-cado. No caso do p3sim , as posies livres so a partir do endereo 112h , inclusive.

    4. carregar o micro-programa, conforme descrito no pargrafo anterior.

    5. modificar a ROMdemapeamento A, colocando no endereo correspondente ao cdigoda instruo nova o endereo da ROM de Controlo onde se colocou o micro-programa,usando o mesmo procedimento que o usado para a alterao da ROM de controlo.

    O contedo das ROMs do processador pode ser confirmado seleccionando a opo VerROMs do menu Ver.

    25

  • Figura 3: Janela de interface de texto, com 24 linhas e 80 colunas.

    A depurao do micro-programa pode ser feito seguindo passo-a-passo (que a este n-vel equivalente a ciclo de relgio-a-ciclo de relgio) a sua execuo com o boto Clock everificando o fluxo e as alteraes que o micro-programa provoca nos diferentes registos.

    4.6 Dispositivos de Entrada e SadaO simulador disponibiliza um conjunto de dispositivos de entrada e sada atravs de duasjanelas que podem ser abertas atravs do menu Ver. Cada um destes dispositivos poder seracedido por um oumais portos. Sendo o espao de endereamento de IOmapeado no espaode endereamento de memria, a cada porto corresponder um endereo de memria. Estesportos podem ser de leitura, de escrita ou de leitura e escrita. Escritas para portos s deleitura so ignoradas. Leituras de portos de escrita retornam todos os bits a 1, ou seja, FFFFh .

    4.6.1 Janela Texto

    Esta janela, apresentada na Figura 3, permite uma interface a nvel de texto, permitindo lercaracteres do teclado e escrever caracteres para o monitor. Para aceder a este dispositivoesto reservados 4 portos:

    porto de leitura, endereo FFFFh : uma leitura deste porto retorna o cdigo ASCII do ca-racter correspondente ltima tecla premida sobre a janela de texto. Portanto, no casode se premir uma tecla antes da leitura da tecla anterior faz com que esta se perca. possvel testar se existe alguma tecla para ler atravs do porto de estado. Uma leituradeste porto sem que tenha havido uma tecla premida retorna o valor 0.

    porto de escrita, endereo FFFEh : porto que permite escrever um dado caracter na janelade texto. O caracter com o cdigo ASCII igual ao valor escrito para este porto ecoado

    26

  • Figura 4: Janela de interface que emula a placa de entradas/sadas.

    na janela. Esta janela mantm internamente um cursor onde este caracter escrito.Sempre que se faz uma escrita, este cursor avana. possvel posicionar-se o cursorem qualquer ponto da janela atravs do porto de controlo.

    porto de estado, endereo FFFDh : porto que permite testar se existe ou no algum caracterpara ler na janela de texto. Caso no haja, uma leitura deste porto retorna 0. Casoentretanto tenha sido premida uma tecla, este porto retorna 1. Assim que esta tecla forlida atravs do porto de leitura, este porto passa novamente a retornar 0.

    porto de controlo, endereo FFFCh : porto que permite posicionar o cursor na janela detexto, indicando onde ser escrito o prximo caracter. Para tornar possvel este posici-onamento, tem que ser feita a sua inicializao, conseguida atravs da escrita do valorFFFFh para este porto1. Uma vez inicializado, o cursor pode ser posicionado numadada linha e coluna escrevendo para este porto um valor em que os 8 bits mais signi-ficativos indicam a linha (entre 0 e 23) e os 8 menos significativos a coluna (entre 1 e80):

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0Linha Coluna

    4.6.2 Janela Placa

    A Figura 4 apresenta a janela de interface que emula a placa DIO5 da Digilent, utilizada nasaulas prticas da disciplina de Arquitectura de Computadores da Licenciatura em Engenha-ria Informtica e de Computadores do IST. Esta disponibiliza os dispositivos que a seguir seindica:

    8 interruptores, endereo FFF9h : uma leitura deste endereo permite ler em simult-neo o estado do conjunto dos 8 interruptores. A cada interruptor corresponde um bit,correspondendo ao interruptor da direita o bit menos significativo e ao da esquerda ooitavo bit (os oito bits mais significativos vm sempre a 0). Um interruptor para baixocoloca o bit respectivo a 0 e para cima a 1.

    1Um efeito secundrio desta inicializao limpar todo o contedo da janela.

    27

  • LEDs, endereo FFF8h : conjunto de 16 LEDs cujo estado individual, ligado ou desli-gado, definido por uma escrita para este porto. A cada LED correspondem 1 bit dapalavra de dados, sendo o LED da direita controlado pelo bit menos significativo e osrestantes LEDs por cada um dos restantes bits, por ordem.

    display de 7 segmentos, endereos FFF0 , FFF1h , FFF2h e FFF3h : cada um destes por-tos controla, da direita para a esquerda, um conjunto de 7 LEDs que formam um dis-play. Os quatro bits menos significativos do valor escrito no porto determina o caracterhexadecimal (0 a F) que aparece no display respectivo.

    display LCD, endereos FFF4h e FFF5h : display com 16 colunas e 2 linhas de texto.Uma escrita para o porto FFF5h faz ecoar o caracter em cdigo ASCII estendido cor-respondente aos 8 bits menos significativos do valor escrito. O porto FFF4h um portode controlo, em que os diferentes bits activos desencadeiam diferentes operaes:Bit Aco15 liga ou desliga o display LCD;5 limpa o display LCD;4 posiciona na linha 0 ou 1 o cursor (que indica a prxima posio a ser escrita);

    3 a 0 posiciona o cursor na coluna especificada;A escrita de um caracter no altera a posio do cursor, logo entre cada escrita neces-srio actualizar a posio deste.

    15 botes de presso: estes no esto mapeados em memria, clicando num destesbotes gerada uma interrupo no programa com o correspondente vector de in-terrupo. possvel desabilitar estes botes, seleccionando a opo Define IVAD nomenu Definies e clicar na respectiva caixa de seleco. tambm aqui que se poderalterar o vector associado a cada um destes 15 botes de interrupo, que, por omisso,corresponde ao ndice do boto.

    4.6.3 Temporizador

    O simulador p3sim disponibiliza, ainda em conformidade com a placa DIO5, um disposi-tivo temporizador que permite definir intervalos de tempo real. O temporizador contro-lado por dois portos:

    unidades de contagem, endereo FFF6h : uma escrita para este endereo define o n-mero de unidades de contagem, cada com a durao de 100ms. Por exemplo, para seter um intervalo de 1s, deve ser escrito para endereo o valor 10. Uma leitura desteendereo permite obter o valor actual de contagem;

    porto de controlo, endereo FFF7h : este porto permite dar incio ou parar uma con-tagem por escrita, respectivamente, de um 1 ou um 0 no bit menos significativo (osrestantes bits so ignorados). Uma leitura deste endereo indica, no bit menos signifi-cativo, o estado do temporizador, em contagem ou parado.

    A utilizao normal deste dispositivo consiste em escrever no porto FFF6h o nmero de pe-rodos de 100ms correspondente ao intervalo de tempo pretendido, seguido de uma escrita

    28

    Pedro Teixeira_2Highlight

  • do valor 1 no porto FFF7h . Dever ser associada ao vector de interrupo 15 a rotina quedever tratar a indicao do final deste intervalo.

    4.6.4 Mscara de Interrupes

    Um ltimo porto de sada, no endereo FFFAh , est associado mscara de interrupes.Esta mscara permite habilitar ou desabilitar cada um dos 16 primeiros vectores de interrup-o individualmente, definido pela escrita de um padro de bits a 1 e a 0, respectivamente.Por exemplo, para apenas se habilitar as interrupes vindas do temporizador, dever ser es-crito para este endereo o valor 8000h . Uma leitura deste endereo indica a situao actualda mscara.

    A Tabela 2 resume o conjunto de dispositivos de entrada/sada do simulador p3sim .

    29

  • Endereo Dispositivo Descrio AcoFFF0h Display 7 segmentos 0 Permite escrever no display de

    7 segmentos mais direita.S so considerados os 4 bitsmenos significativos escritosno endereo.

    Escrita

    FFF1h Display 7 segmentos 1 Idem para o display es-querda do anterior.

    Escrita

    FFF2h Display 7 segmentos 2 Idem para o display es-querda do anterior.

    Escrita

    FFF3h Display 7 segmentos 3 Idem para o display es-querda do anterior.

    Escrita

    FFF4h LCD Permite enviar sinais de con-trolo para o LCD.

    Escrita

    FFF5h LCD Permite escrever um caracterno LCD cujo cdigo ASCII es-tendido foi escrito no ende-reo.

    Escrita

    FFF6h Temporizador Valor do contador associadoao temporizador.

    Leitura/Escrita

    FFF7h Temporizador Arranca ou pra o temporiza-dor.

    Leitura/Escrita

    FFF8h LEDs Permite acender os LEDs cor-respondentes ao valor em bi-nio que se escreve no ende-reo. O LED da direita corres-ponde ao bit menos significa-tivo.

    Escrita

    FFF9h Interruptores Permite ler, nos 8 bits me-nos significativos, o valor de-finido pela posio dos inter-ruptores. O interruptor da di-reita corresponde ao bit me-nos significativo.

    Leitura

    FFFAh Mscara de interrupes Permite definir os vectores deinterrupo habilitados, umpor cada bit da mscara.

    Leitura/Escrita

    FFFCh Janela de texto Permite colocar o cursornuma dada posio da janela.

    Escrita

    FFFDh Janela de texto Permite testar se houve al-guma tecla primida.

    Leitura

    FFFEh Janela de texto Permite escrever um caracterna janela.

    Escrita

    FFFFh Janela de texto Permite ler a ltima tecla pri-mida.

    Escrita

    Tabela 2: Resumo dos dispositivos de entrada e sada.30

  • A Formatos das Instrues AssemblyInstrues de 0 operandos

    NOP , ENI , DSI , STC , CLC , CMC , RET e RTI

    Opcode6 bits

    16 bits

    Instrues de 0 operandos com constante

    RETN e INT

    Opcode6 bits

    16 bits

    Constante10 bits

    Instrues de 1 operando

    NEG , INC , DEC , COM , PUSH e POP

    Reg_modoOpcode MW

    6 bits 2 bits 4 bits16 bits

    Instrues de 1 operando com constante

    SHR , SHL , SHRA , SHLA , ROR , ROL , RORC , ROLC

    Reg_modoOpcode MW

    6 bits 2 bits4 bits16 bits

    # posies4 bits

    31

  • Instrues de 2 operandos

    CMP , ADD , ADDC , SUB , SUBB , MUL , DIV , TEST , AND , OR , XOR , MOV , MVBL , MVBH e XCH

    Reg_modoReg_regSOpcode MW

    6 bits 2 bits 4 bits1 bit 3 bits16 bits

    Instrues de salto absoluto incondicional

    JMP , CALL

    Reg_modoOpcode MW

    6 bits 2 bits 4 bits16 bits

    Instrues de salto absoluto condicional

    JMP .cond, CALL. cond

    Reg_modoOpcode MW

    6 bits 2 bits4 bits16 bits

    Condio4 bits

    Instruo de salto relativo incondicional

    BR

    Opcode6 bits

    16 bits6 bits

    Deslocamento

    Instruo de salto relativo incondicional

    BR. cond

    Opcode6 bits 4 bits

    16 bits

    Condio6 bits

    Deslocamento

    32

  • Codificao da condio de salto

    Condio Mnemnica CdigoZero Z 0000No zero NZ 0001Transporte C 0010No transporte NC 0011Negativo N 0100No negativo NN 0101Excesso O 0110No excesso NO 0111Positivo P 1000No positivo NP 1001Interrupo I 1010No interrupo NI 1011

    Cdigos de Operao

    Mnemnica Cdigo Mnemnica CdigoNOP 000000 CMP 100000ENI 000001 ADD 100001DSI 000010 ADDC 100010STC 000011 SUB 100011CLC 000100 SUBB 100100CMC 000101 MUL 100101RET 000110 DIV 100110RTI 000111 TEST 100111INT 001000 AND 101000RETN 001001 OR 101001NEG 010000 XOR 101010INC 010001 MOV 101011DEC 010010 MVBH 101100COM 010011 MVBL 101101PUSH 010100 XCH 101110POP 010101 JMP 110000SHR 011000 JMP.cond 110001SHL 011001 CALL 110010SHRA 011010 CALL.cond 110011SHLA 011011 BR 111000ROR 011100 BR.cond 111001ROL 011101RORC 011110ROLC 011111

    33

  • Modos de Endereamento

    M Endereamento Operao00 Por registo op = RX01 Por registo indirecto op = M[RX]10 Imediato op = W11 Indexado, directo, relativo ou baseado op = M[RX+W]

    Seleco do operando com o modo de endereamento

    S Operando0 Destino1 Origem

    34

  • B Contedo das ROMs de ControloEm apndice, inclui-se a listagem do contedo das ROMs da Unidade de Controlo do pro-cessador P3 . Estas ROMs podem ser modificadas conforme descrito na Seco 4.5 de formaa acrescentar uma instruo assembly ou a alterar o comportamento de uma j existente.

    ROM B

    Endereco Conteudo Modo

    0 - 0000 0x00a F1R01 - 0001 0x00b F1RI02 - 0010 0x00d F1IM03 - 0011 0x00f F1IN04 - 0100 0x02d WBR05 - 0101 0x02f WBM06 - 0110 0x02d WBR07 - 0111 0x02f WBM08 - 1000 0x013 F2R09 - 1001 0x017 F2RI010 - 1010 0x01d F2IM011 - 1011 0x023 F2IN012 - 1100 0x015 F2RS013 - 1101 0x01a F2RIS014 - 1110 0x020 F2IMS015 - 1111 0x028 F2INS0

    35

  • ROMA

    Endereco Conteudo Instrucao

    0 - 000000 0x032 NOP1 - 000001 0x033 ENI02 - 000010 0x037 DSI03 - 000011 0x03b STC04 - 000100 0x03e CLC05 - 000101 0x040 CMC06 - 000110 0x044 RET07 - 000111 0x047 RTI08 - 001000 0x04c INT09 - 001001 0x055 RETN010 - 001010 0x0 Livre11 - 001011 0x0 Livre12 - 001100 0x0 Livre13 - 001101 0x0 Livre14 - 001110 0x0 Livre15 - 001111 0x0 Livre16 - 010000 0x05b NEG017 - 010001 0x05e INC018 - 010010 0x060 DEC019 - 010011 0x062 COM020 - 010100 0x064 PUSH021 - 010101 0x067 POP022 - 010110 0x0 Livre23 - 010111 0x0 Livre24 - 011000 0x06a SHR025 - 011001 0x071 SHL026 - 011010 0x078 SHRA027 - 011011 0x07f SHLA028 - 011100 0x08c ROR029 - 011101 0x093 ROL030 - 011110 0x09a RORC031 - 011111 0x0a1 ROLC032 - 100000 0x0c2 CMP033 - 100001 0x0b4 ADD034 - 100010 0x0b6 ADDC035 - 100011 0x0b8 SUB036 - 100100 0x0ba SUBB037 - 100101 0x0cf MUL038 - 100110 0x0dd DIV039 - 100111 0x0c4 TEST040 - 101000 0x0bc AND041 - 101001 0x0be OR042 - 101010 0x0c0 XOR043 - 101011 0x0a8 MOV044 - 101100 0x0af MVBH045 - 101101 0x0aa MVBL046 - 101110 0x0ca XCH047 - 101111 0x0 Livre48 - 110000 0x102 JMP.C049 - 110001 0x105 JMP50 - 110010 0x109 CALL.C051 - 110011 0x10d CALL52 - 110100 0x0 Livre53 - 110101 0x0 Livre54 - 110110 0x0 Livre55 - 110111 0x0 Livre56 - 111000 0x0f9 BR.C057 - 111001 0x0f8 BR58 - 111010 0x0 Livre59 - 111011 0x0 Livre60 - 111100 0x0 Livre61 - 111101 0x0 Livre

    62 - 111110 0x0 Livre63 - 111111 0x0 Livre

    36

  • ROM de Controlo

    SR1

    IAK

    SR1

    SR2

    SR2 B

    MRM5

    M5 LS MCOND

    CALU

    CONST/NA

    MA

    MB

    M

    D

    MAD

    RAD

    RAD

    F

    CC

    LI

    LF

    FM M2

    RB MD

    MD

    RW

    MW

    WR

    A

    1

    0

    01234567810111213141516171819202122232425262728293031 9

    Figura 5: Formato das micro-instrues.

    Endereco Conteudo Etiqueta Operacao

    000 000h 000000000b 0x8060001f IF0 IR

  • 046 02eh 000101110b 0x80000200 WBR1 CAR
  • 112 070h 001110000b 0x70000000 SHR6 CAR
  • 178 0b2h 010110010b 0x00123699 MVBH3 R9
  • 244 0f4h 011110100b 0x80c0ed00 DIV23 !z?CAR