130 likes | 226 Views
Produto Interno entre Arrays. Bruno Edson Ítalo Sivini Patrícia Roseane Plínio Tadeu. Problema Solução Fluxograma Código Alto Nível Código Híbrido Código em Assembly Memória Código em Hexadecimal e Binário Conclusões. Produto Interno entre Arrays. Problema.
E N D
Produto Internoentre Arrays Bruno Edson Ítalo Sivini Patrícia Roseane Plínio Tadeu
Problema Solução Fluxograma Código Alto Nível Código Híbrido Código em Assembly Memória Código em Hexadecimal e Binário Conclusões Produto Interno entre Arrays
Problema • Realizar o produto interno entre dois arrays (A e B – tamanho 1000), ou seja, elemento a elemento do array. • Armazenar em outro array (C), da forma big endian, a parte mais significativa primeiro e a menos significativa depois. • Como o produto tem o dobro do tamanho, o array C ocupará o dobro do espaço (2000 words).
Solução • Realizar procedimento repetitivo: • Laço (quantidade de vezes conhecida - 1000) • Leitura dos Dados na Memória • Multiplicação • Escrita do Resultado na Memória • Atualização de Ponteiros • Teste
Fluxograma • Fluxo do Programa:
Código Alto Nível • Um comando em um laço: for (i = 1000, i > 0, i = i - 1){ C(i) = A(i) * B(i); } • Início => i = 1000 • Lê no AC ou MQ => A(i) ... B(i) • Multiplica com MQ => ... * ... • Escreve a partir do AC => C(i) = ... • Atualiza => i = i - 1 • Testa => i > 0
Código Híbrido for(i = 1000, i > 0, i = i – 1){ MQ = A(i); // LOAD MQ, A(i) [AC MQ] = B(i) * MQ; // MUL B(i) C(i+) = AC; // STOR C(i+) AC = MQ; // LOAD MQ C(i-) = AC; // STOR C(i-) }
Código em Assembly ... 0000: JUMP M(INI, 0:19); X 0001: A(1) 0002: A(2) ... ... 1000: A(1000) 1001: B(1) ... ... 2000: B(1000) 2001: C(1+) 2002: C(1-) ... 3999: C(1000+) 4000: C(1000-) ...
Código em Assembly (cont.) D1: 0000100001h // Decrementa os arrays A e B D2: 0000200000h // Decrementa 2 do array C D3: STOR C(1-); LOAD INI; // Verifica Fim INI: LOAD MQ, A(1000); MUL B(1000); //Lê A(i), * B(i) STOR C(1000+); LOAD MQ; // Escreve C(i+) e STOR C(1000-); LOAD INI; // C(i-) SUB D1; STOR INI; // Atualiza A(i), B(i) LOAD INI+1; SUB D2; // Atualiza C(i+) STOR INI+1; LOAD INI+2;// e... SUB D2; STOR INI+2; // C(i-) SUB D3; JUMP +M(INI, 0:19) // Testa e Repete FIM: ...
Conclusões • Conhecer o funcionamento da máquina IAS • Aprender a trabalhar com instruções de mais baixo nível • Implementar algoritmos simples, como no caso laços.