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.

quinta-feira, 21 de outubro de 2021

Subprogramas em C e Assembly

A seguir, dois programas serão disponibilizados para análise. O primeiro implementa em C++ um algoritmo que decompõe um número inteiro em seus dígitos formadores. Este programa ainda conta com um apêndice, que implementa o mesmo algoritmo na linguagem Assembly.

O segundo programa implementa o mesmo algoritmo do primeiro, mas organiza seus códigos fontes em dois subprogramas, um para decompor o número e outro para exibir as suas parcelas.

Observa-se no algoritmo implementado, que este usa do processo de múltiplas divisões por 10 para, em cada iteração: i) calcular o resto da divisão; ii) armazenar o resto em uma estrutura de dados (string em C++ e pilha em Assembly) e; ii) retirar esta parcela do número original. Após serem armazenadas, cada uma das parcelas serão exibidas na ordem inversa a que foram inseridas na estrutura de dados.

Como objeto de aprendizagem, cada um dos programas é composto por sua implementação em C++ e a respectiva adaptação para Assembly (8 Bit Assembler Simulator). De modo a melhorar a compreensão por parte dos iniciantes na programação em Assembly, o código relacionado ao processo de decomposição, está fortemente documentado.

terça-feira, 5 de outubro de 2021

Inversão de String em Assembly

O programa tem como objetivo apresentar, nas linguagem C e Assembly, um algoritmo para inverter o conteúdo de uma String.
Como objeto de aprendizagem o programa é compreendido por um programa em C++, que implementa inicialmente uma "varredura" na String, de modo a obter o seu tamanho. Obtido o tamanho, a  "varredura" é feita de forma inversa, exibindo cada um dos caracteres da String. Em comentário ao programa em C é apresentada uma adaptação deste programa, para Assembly (8-Bit Assembler Simulator).

quinta-feira, 23 de setembro de 2021

Convertendo Binário (em 8 bits) para Hexadecimal.

Os programas exibidos a seguir têm como objetivo permitir a análise comparativa de um programa escrito em linguagem de alto nível, como o C++, com um programa escrito em Assembly. Observa-se que o código em assembly é destinado a uma máquina com características organizacionais bem "discretas", onde destacam-se: i) o armazenamento e endereçamento de dados em 8 bits; ii) a pouca disponibilidade de registradores e; iii) o conjunto restrito de instruções.
No referido a análise do programa é sugerido ao aluno, que observe o modo como são implementadas, em assembly, as instruções da linguagem C. Outro elemento importante é o modo como os dados são gerenciados e tratados. O aluno deve observar como o programa em assembly trata as indicações e denominações aos locais de memória em que os dados são armazenados.

Para os iniciantes, ou com pouco prática nas linguagens de programação usadas acima, destaca-se que o algoritmo também foi implementado na plataforma Google Blocky e pode ser executado na janela a seguir. Observa-se na aplicação a possibilidade da visualização do código em mais 6 linguagens.

quinta-feira, 16 de setembro de 2021

Microprocessador de 8 Bits

Microprocessador de 8 Bits, que até pode ser considerado como um infográfico interativo, é uma aplicação computacional que implementa um microprocessador com estrutura e funcionalidades bem simples; podendo executar apenas 5 operações entre registradores e/ou constantes inteiras, a saber: i) movimentação de dados (MOV); ii) adição (ADD); iii) subtração (SUB); iv) multiplicação (MUL) e; v) divisão (DIV).

Para usar o aplicação, basta clicar no botão de "Comando" e selecionar a operação desejada. Após isso o usuário deve definir os dados necessários à operação, clicando nos botões abaixo do comando - os quais serão devidamente ajustados, dependendo da operação selecionada. Feito isso, basta clicar em "Exec" e observar o processo de execução do comando.