segunda-feira, 22 de novembro de 2021

O Simulador K&S

O The Knob & Switch Computer, ou simplesmente K&S, é uma simulação computacional para uma máquina de computação digital. A máquina implementada por este simulador possibilita a execução de quatro operações (+, -, & e !). Ao todo são quatro modelos, onde o mais simples permite apenas a interação direta do usuário, fornecendo interação (I/O) direta via registradores e, o mais complexo permite a entrada de programa assembly (em memória) e sua posterior execução e observação dos "sinais de controle".

Em sua configuração com o menor número de funcionalidades, o uso é quase que intuitivo, bastando: i) digitar os dados de entrada nos registradores desejados; ii) selecionar quais as vias de endereço serão usadas para as entradas e saída; iii) selecionar a operação desejada e, finalmente; iv) clicar no botão "Execute", observando o "transporte de dados" e a execução da operação desejada. Opcionalmente o usuário pode definir o sistema de numeração usado e a velocidade de execução.


Como objeto de aprendizagem o simulador pode ser usado não tão somente para "observar internamente" o processo de execução de instruções por um processador, mas pode ser usado também como meio facilitador para identificação das características e funcionalidades do processador. O instrutor pode conduzir o aprendiz para a visualização das relações entre os elementos da simulação e seu real papel dentro de um sistema computacional. O aprendiz pode, por exemplo, identificar as características de uma CPU, através da observação e identificação do ciclo de instruções e dos sinais de controle que ativam/desativam as chaves de controle do fluxo interno de dados. Outra forma de aprendizado está relacionada a identificação das possíveis "sub ações" executadas, quando execução de uma das diversas tarefas do simulador.

quarta-feira, 17 de novembro de 2021

Cálculo de Potência em Modo Recursivo

Os programas apresentados têm como objetivo a apresentação os conceitos relacionados a execução recursiva de uma exponenciação. Com ênfase na implementada em assembly, permite que sejam observadas as diferenças e semelhanças com outro programa de mesmo objetivo, escrito em linguagem de alto nível (C++).


O objeto de aprendizagem inicia com um programa em C++, que implementa o processo de cálculo de uma exponenciação em modo recursivo. O modelo recursivo usado no programa em C++ é adaptado para Assembly (8-Bit Assembler Simulator). O programa também apresenta, em seus comentários, alguns elementos que permitem a melhor observação sobre o método recursivo implementado no código Assembly.

Inicialmente, o programa verifica se o expoente inicial é 0, gerando 1 como resultado, ou iniciando a efetiva exponenciação, quando em processo de recursão. Quando iniciada a recursão, decrementa o expoente e reexecuta o subprograma e a cada recursão envia a base da exponenciação para a pilha. Quando em recursão, o expoente chegar a 0, inicia o desempilhamento da "base" e o devido produtório, usando as mesmas.

segunda-feira, 8 de novembro de 2021

Alteração de um Programa em Tempo de Execução

Os vírus de computador contam com várias "artimanhas" para alcançar os seus objetivos. Dentre estas estratégias está a alteração de programas comumente executados por seus usuários. Esta estratégia permite que um programa do próprio usuário seja usado para executar os objetivos escusos do programa invasor.

No programa a seguir, encontra-se um pequeno e educacional exemplo, que apresenta a estratégia geral de ação de um vírus previamente inserido no sistema. Neste exemplo, parte-se do pré suposto que o suposto vírus está em execução em um computador e, por não ter "direitos" plenos de acesso ao sistema, ataca um programa do usuário, pelo desvio da execução de um de seus subprogramas, de modo a executar as ações de alteração do próprio vírus.


A final da execução do subprograma do vírus, ele executa o subprograma original e faz com que o usuário tenha a impressão de que nada foi modificado. No entanto, como destacado no programa em Assembly, estes códigos em linguagem de baixo nível, são tão poderosos que podem até alterar o objetivo de um programa. No exemplo apresentado, um programa que iria executar uma soma, acaba executando uma subtração.