Enviado em 23/05/2024 - 01:04h
Enviado em 23/05/2024 - 17:06h
"Mundo é diagonal porque é plano" byy certa pessoa.#include <string.h> #include <stdio.h> int main() { //o programa carregado na memória //o programa tem endereçamento de no máximo 256 bytes //aqui é o assembly do programa char programa[] = { 's', -10, -5, //soma -10 com -5 e salva em rx 'r', //soma mais 1 ao rx 'x', //imprime rx 'j', 1 //pula pra linha ''r',1' do programa }; //registradores char rx = 0, ry = 0; //contador de programa, endereça no máximo 256 endereços, pois é um char. char pc = 0; //o cpu while (pc < strlen(programa)) { //debug #if 0 printf("pc[%d] instrucao[%c]\n", pc, programa[pc]); #endif //lê o opcode atual //aquia cpu pegou da memória e trouxe pra dentro dela. switch(programa[pc]) { //instrução de somar dois operandos //cada operando está numa parte a frente de 's' case 's': { //operando a int a = programa[pc + 1]; //operando b int b = programa[pc + 2]; //realiza a operação de soma //salva no registrador rx rx = a + b; //incrementa pc //+3 porque a instrução 's' requer duas áreas //de memória a frente dela (dois bytes) //'s' tem 3 bytes, um do 's' mais um de cada operando pc += 3; } break; //operador de salto incondicional //pula pra alguma parte da memória do programa case 'j': { pc = programa[pc + 1]; //pula pro próxima instrução pc += 2; } break; //incrementa rx e pula pra próxima instrução case 'r': { rx++; //próxima instrução pc+=1; } break; //opcode apenas pra printar o conteúdo do registrador rx case 'x': { printf("%d\n", rx); //pula está instrução pc++; } break; //instrução inválida default: pc = strlen(programa); } } return 0; }
Enviado em 24/05/2024 - 12:48h
Enviado em 30/05/2024 - 21:51h
Enviado em 30/05/2024 - 22:01h
#include <string.h> #include <stdio.h> int main() { //o programa carregado na memória //o programa tem endereçamento de no máximo 256 bytes //aqui é o assembly do programa char programa[] = { 's', -10, -5, //soma -10 com -5 e salva em rx 'r', //soma mais 1 ao rx 'x', //imprime rx 'j', 1 //pula pra linha ''r',1' do programa }; //registradores char rx = 0, ry = 0; //contador de programa, endereça no máximo 256 endereços, pois é um char. char pc = 0; //o cpu while (pc < strlen(programa)) { //debug #if 0 printf("pc[%d] instrucao[%c]\n", pc, programa[pc]); #endif //lê o opcode atual //aquia cpu pegou da memória e trouxe pra dentro dela. switch(programa[pc]) { //instrução de somar dois operandos //cada operando está numa parte a frente de 's' case 's': { //operando a int a = programa[pc + 1]; //operando b int b = programa[pc + 2]; //realiza a operação de soma //salva no registrador rx rx = a + b; //incrementa pc //+3 porque a instrução 's' requer duas áreas //de memória a frente dela (dois bytes) //'s' tem 3 bytes, um do 's' mais um de cada operando pc += 3; } break; //operador de salto incondicional //pula pra alguma parte da memória do programa case 'j': { pc = programa[pc + 1]; //pula pro próxima instrução pc += 2; } break; //incrementa rx e pula pra próxima instrução case 'r': { rx++; //próxima instrução pc+=1; } break; //opcode apenas pra printar o conteúdo do registrador rx case 'x': { printf("%d\n", rx); //pula está instrução pc++; } break; //instrução inválida default: pc = strlen(programa); } } return 0; }
Enviado em 30/05/2024 - 22:45h
Eu não sei como explicar melhor do que o que já escrevi na pergunta e mostrei na imagem!0111111101000101010011000100011000000010000000010000000100001001000000000000000000000000000000000000000000000000000000000000000000000010000000000011111000000000000000010000000000000000000000001110000000010101
Enviado em 30/05/2024 - 22:56h
Mais informação:Enviado em 30/05/2024 - 23:09h
Eu vou postar uma nova pergunta, mas simples para que possam entender o que desejo saber, acho que ficará mais fácil!Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Ocomon 6.0.1 - Problemas ao editar configurações estendidas (1)
MOVER ARQUIVO ENTRE PARTIÇOES (3)