Baixe o app para aproveitar ainda mais
Prévia do material em texto
Processadores Estudo de Caso: xComputer Simulador do xComputer Unidade de Controle ULA CPU 1023 0 1 2 3 Memória 16 bits 16 bits 16 bits 16 bits 16 bits 10 bits 10 bits 4 bits 1 PC ADDR IR AC Y X COUNT Flag Dados Endereço Conjunto de instruções completo do xComputer Binário Mnemônico Significado 010000XXXXXXXXXX ADD-C X Adiciona o número X ao AC 000000XXXXXXXXXX ADD X Adiciona o conteúdo do endereço X ao AC 010001XXXXXXXXXX SUB-C X Subtrai o número X de AC 000001XXXXXXXXXX SUB X Subtrai o conteúdo do endereço X de AC 0001110000000000 INC Incrementa AC 011001XXXXXXXXXX LOD-C X Carrega o número X no AC 001001XXXXXXXXXX LOD X Carrega o conteúdo de X no AC 101001XXXXXXXXXX LOD-I X Carrega o conteúdo do endereço m[X] no AC 001010XXXXXXXXXX STO X Armazena o conteúdo de AC no endereço X 001010XXXXXXXXXX STO-I X Armazena o conteúdo de AC no endereço m[X] 001100XXXXXXXXXX JMP X Desvia controle para o endereço X 001101XXXXXXXXXX JMZ X Desvia para o endereço X se AC for zero 001110XXXXXXXXXX JMN X Desvia para o endereço X se AC for negativo 0010110000000000 HLT Finaliza processamento Principais instruções do xComputer Binário Mnemônic o Significado 010000XXXXXXXXXX ADD-C X Adiciona o número X ao AC 000000XXXXXXXXXX ADD X Adiciona o conteúdo do endereço X ao AC 010001XXXXXXXXXX SUB-C X Subtrai o número X de AC 000001XXXXXXXXXX SUB X Subtrai o conteúdo do endereço X de AC 0001110000000000 INC Incrementa AC 011001XXXXXXXXXX LOD-C X Carrega o número X no AC 001001XXXXXXXXXX LOD X Carrega o conteúdo de X no AC 101001XXXXXXXXXX LOD-I X Carrega o conteúdo do endereço m[X] no AC 001010XXXXXXXXXX STO X Armazena o conteúdo de AC no endereço X 001010XXXXXXXXXX STO-I X Armazena o conteúdo de AC no endereço m[X] 001100XXXXXXXXXX JMP X Desvia controle para o endereço X 001101XXXXXXXXXX JMZ X Desvia para o endereço X se AC for zero 001110XXXXXXXXXX JMN X Desvia para o endereço X se AC for negativo 0010110000000000 HLT Finaliza processamento 0 LOD-C 105 1 ADD-C 17 2 STO 5 3 HLT 4 5 Binário Mnemônic o Significado 010000XXXXXXXXXX ADD-C X Adiciona o número X ao AC 000000XXXXXXXXXX ADD X Adiciona o conteúdo do endereço X ao AC 010001XXXXXXXXXX SUB-C X Subtrai o número X de AC 000001XXXXXXXXXX SUB X Subtrai o conteúdo do endereço X de AC 0001110000000000 INC Incrementa AC 011001XXXXXXXXXX LOD-C X Carrega o número X no AC 001001XXXXXXXXXX LOD X Carrega o conteúdo de X no AC 101001XXXXXXXXXX LOD-I X Carrega o conteúdo do endereço m[X] no AC 001010XXXXXXXXXX STO X Armazena o conteúdo de AC no endereço X 001010XXXXXXXXXX STO-I X Armazena o conteúdo de AC no endereço m[X] 001100XXXXXXXXXX JMP X Desvia controle para o endereço X 001101XXXXXXXXXX JMZ X Desvia para o endereço X se AC for zero 001110XXXXXXXXXX JMN X Desvia para o endereço X se AC for negativo 0010110000000000 HLT Finaliza processamento 0 LOD-C 1 1 STO 12 2 LOD 12 3 INC 4 STO 12 5 JMP 2 xComputer Assembly ; Este é um programa simples para contar 1, 2, 3, e assim por diante. ; O valor do contador é armazenado na posição 12. ; Este programa ilustra o uso de rótulos (ex. Laco e Cont). O símbolo @N ; é usado para indicar que a posição N será referenciada pelo rótulo ; declarado na linha seguinte (ex. @12 => Cont referencia a posição 12). LOD-C 1 ; Faz Count igual a 1 STO Cont Laco: LOD Cont ; Adiciona 1 a Count INC STO Cont JMP Laco ; Volte para o início do laço @12 Cont: data ; Posição usada pelo contador Binário Mnemônico Significado 010000XXXXXXXXXX ADD-C X Adiciona o número X ao AC 000000XXXXXXXXXX ADD X Adiciona o conteúdo do endereço X ao AC 010001XXXXXXXXXX SUB-C X Subtrai o número X de AC 000001XXXXXXXXXX SUB X Subtrai o conteúdo do endereço X de AC 0001110000000000 INC Incrementa AC 011001XXXXXXXXXX LOD-C X Carrega o número X no AC 001001XXXXXXXXXX LOD X Carrega o conteúdo de X no AC 101001XXXXXXXXXX LOD-I X Carrega o conteúdo do endereço m[X] no AC 001010XXXXXXXXXX STO X Armazena o conteúdo de AC no endereço X 001010XXXXXXXXXX STO-I X Armazena o conteúdo de AC no endereço m[X] 001100XXXXXXXXXX JMP X Desvia controle para o endereço X 001101XXXXXXXXXX JMZ X Desvia para o endereço X se AC for zero 001110XXXXXXXXXX JMN X Desvia para o endereço X se AC for negativo 0010110000000000 HLT Finaliza processamento 0 LOD-C 0 1 STO 15 2 STO 16 3 LOD 15 4 INC 5 STO 15 6 ADD 16 7 STO 16 8 LOD 15 9 SUB 17 10 JMZ 12 11 JMP 3 12 HLT … … 15 16 17 5 ; soma n primeiros numeros naturais lod-c 0 sto num sto sum volta: lod num inc sto num add sum sto sum lod num sub max jmz fim jmp volta fim: hlt @15 num: data sum: data max: 5 Binário Mnemônico Significado 010000XXXXXXXXXX ADD-C X Adiciona o número X ao AC 000000XXXXXXXXXX ADD X Adiciona o conteúdo do endereço X ao AC 010001XXXXXXXXXX SUB-C X Subtrai o número X de AC 000001XXXXXXXXXX SUB X Subtrai o conteúdo do endereço X de AC 0001110000000000 INC Incrementa AC 011001XXXXXXXXXX LOD-C X Carrega o número X no AC 001001XXXXXXXXXX LOD X Carrega o conteúdo de X no AC 101001XXXXXXXXXX LOD-I X Carrega o conteúdo do endereço m[X] no AC 001010XXXXXXXXXX STO X Armazena o conteúdo de AC no endereço X 001010XXXXXXXXXX STO-I X Armazena o conteúdo de AC no endereço m[X] 001100XXXXXXXXXX JMP X Desvia controle para o endereço X 001101XXXXXXXXXX JMZ X Desvia para o endereço X se AC for zero 001110XXXXXXXXXX JMN X Desvia para o endereço X se AC for negativo 0010110000000000 HLT Finaliza processamento 0 LOD-I 15 1 JMZ 8 2 OR-C 32 3 STO-I 15 4 LOD 15 5 INC 6 STO 15 7 JMP 0 8 HLT … … 15 16 16 A 17 B 18 C 19 0 ; converte string para letra minúscula loop: lod-i ptr jmz stop or-c 32 sto-i ptr lod ptr inc sto ptr jmp loop stop: hlt @15 ptr: string string: "A" "B" "C" 0 Binário Mnemônic o Significado 010000XXXXXXXXXX ADD-C X Adiciona o número X ao AC 000000XXXXXXXXXX ADD X Adiciona o conteúdo do endereço X ao AC 010001XXXXXXXXXX SUB-C X Subtrai o número X de AC 000001XXXXXXXXXX SUB X Subtrai o conteúdo do endereço X de AC 0001110000000000 INC Incrementa AC 011001XXXXXXXXXX LOD-C X Carrega o número X no AC 001001XXXXXXXXXX LOD X Carrega o conteúdo de X no AC 101001XXXXXXXXXX LOD-I X Carrega o conteúdo do endereço m[X] no AC 001010XXXXXXXXXX STO X Armazena o conteúdo de AC no endereço X 001010XXXXXXXXXX STO-I X Armazena o conteúdo de AC no endereço m[X] 001100XXXXXXXXXX JMP X Desvia controle para o endereço X 001101XXXXXXXXXX JMZ X Desvia para o endereço X se AC for zero 001110XXXXXXXXXX JMN X Desvia para o endereço X se AC for negativo 0010110000000000 HLT Finaliza processamento 0 LOD-C 1 1 STO 12 2 LOD 12 3 INC 4 STO 13 5 LOD 2 6 INC 7 STO 2 8 LOD 4 9 INC 10 STO 4 11 JMP 2 ; Preeche a memória com os números 1, 2, 3,..., ; iniciando na posição 12. lod-c 1 ; Inicia com um 1 na posição 12 sto 12 lod 12 ; Esta instrução é armazenada na posição 2 inc sto 13 ; Esta instrução é armazenadana posição 4 lod 2 ; Adiciona 1 ao número na posição 2 inc sto 2 lod 4 ; Adiciona 1 ao número na posição 4 inc sto 4 jmp 2 ; Volta para a instrução na posição 2 Binário Mnemônic o Significado 010000XXXXXXXXXX ADD-C X Adiciona o número X ao AC 000000XXXXXXXXXX ADD X Adiciona o conteúdo do endereço X ao AC 010001XXXXXXXXXX SUB-C X Subtrai o número X de AC 000001XXXXXXXXXX SUB X Subtrai o conteúdo do endereço X de AC 0001110000000000 INC Incrementa AC 011001XXXXXXXXXX LOD-C X Carrega o número X no AC 001001XXXXXXXXXX LOD X Carrega o conteúdo de X no AC 101001XXXXXXXXXX LOD-I X Carrega o conteúdo do endereço m[X] no AC 001010XXXXXXXXXX STO X Armazena o conteúdo de AC no endereço X 001010XXXXXXXXXX STO-I X Armazena o conteúdo de AC no endereço m[X] 001100XXXXXXXXXX JMP X Desvia controle para o endereço X 001101XXXXXXXXXX JMZ X Desvia para o endereço X se AC for zero 001110XXXXXXXXXX JMN X Desvia para o endereço X se AC for negativo 0010110000000000 HLT Finaliza processamento 0 LOD-C 0 1 STO 13 2 LOD-I 14 3 JMZ 12 4 SUB 13 5 JMN 8 6 LOD-I 14 7 STO 13 8 LOD 14 9 INC 10 STO 14 11 JMP 2 12 HLT 13 0 14 15 15 12 16 35 17 5 18 32 19 18 20 0 ; Acha o maior valor de um vetor e guarda na posição max (13) lod-c 0 sto max loop: lod-i ptr jmz stop sub max jmn next lod-i ptr sto max next: lod ptr inc sto ptr jmp loop stop: hlt max: 0 ptr: array array: 12 35 5 32 18 0 Microinstruções • Select-Add • Select-Subtract • Select-AND • Select-OR • Select-NOT • Select-Shift-Left • Select-Shift-Right • Load-Data-Into-Memory • Load-X-From-AC • Load-Y-From-Memory • Load-Y-From-IR • Load-AC-From-ALU • Load-AC-From-Memory • Load-AC-From-IR • Increment-AC • Decrement-AC • Load-Flag-From-ALU • Load-PC-From-Memory • Load-PC-From-IR • Increment-PC • Load-IR-From-Memory • Load-ADDR-From-IR • Load-ADDR-From-Y • Load-ADDR-From-PC • Set-COUNT-To-Zero • Stop-Clock ADD-C X 1. Load-ADDR-From-PC 2. Load-IR-From-Memory 3. Increment-PC 4. Load-X-From-AC; Load-Y-IR 5. Select-Add; Load-AC-From-ALU; Load-Flag- From-ALU 6. Select-Add 7. Set-COUNT-To-Zero ADD-C X 1. Load-ADDR-From-PC 2. Load-IR-From-Memory 3. Increment-PC 4. Load-X-From-AC; Load-Y-IR 5. Select-Add; Load-AC-From-ALU; Load-Flag- From-ALU 6. Select-Add 7. Set-COUNT-To-Zero ADD X 1. Load-ADDR-From-PC 2. Load-IR-From-Memory 3. Increment-PC 4. Load-ADDR-From-IR 5. Load-X-From-AC; Load-Y-From-Memory 6. Select-Add; Load-AC-From-ALU; Load-Flag- From-ALU 7. Select-Add 8. Set-COUNT-To-Zero ADD-I X 1. Load-ADDR-From-PC 2. Load-IR-From-Memory 3. Increment-PC 4. Load-ADDR-From-IR 5. Load-Y-From-Memory 6. Load-ADDR-From-Y 7. Load-X-From-AC; Load-Y-From-Memory 8. Select-Add; Load-AC-From-ALU; Load-Flag-From-ALU 9. Select-Add 10. Set-COUNT-To-Zero Microinstruções por Macroinstrução ADD X ADD-C X ADD-I X SUB X SUB-C X SUB-I X AND X AND-C X AND-I X OR X OR-C X OR-I X NOT INC DEC 8 7 10 ? ? ? ? ? ? ? ? ? ? ? ? SHL SHR LOD X LOD-C X LOD-I X STO X STO-I X JMP X JMP-I X JMZ X JMZ-I X JMN X JMN-I X JMF X JMF-I X HLT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Microinstruções por Macroinstrução ADD X ADD-C X ADD-I X SUB X SUB-C X SUB-I X AND X AND-C X AND-I X OR X OR-C X OR-I X NOT INC DEC 8 7 10 8 7 10 8 7 10 8 7 10 7 5 5 SHL SHR LOD X LOD-C X LOD-I X STO X STO-I X JMP X JMP-I X JMZ X JMZ-I X JMN X JMN-I X JMF X JMF-I X HLT 7 7 6 5 8 6 8 5 6 5 6 5 6 5 6 5 Microinstruções por Macroinstrução INC 5 DEC 5 LOD-C X 5 JMP X 5 JMZ X 5 JMN X 5 JMF X 5 HLT 5 LOD X 6 STO X 6 JMP-I X 6 JMZ-I X 6 JMN-I X 6 JMF-I X 6 ADD-C X 7 SUB-C X 7 AND-C X 7 OR-C X 7 NOT 7 SHL 7 SHR 7 ADD X 8 SUB X 8 AND X 8 OR X 8 LOD-I X 8 STO-I X 8 ADD-I X 10 SUB-I X 10 AND-I X 10 OR-I X 10
Compartilhar