Fala galera, tudo beleza?
Aqui que fala é Giovani e vamos a um novo intere4ssante post!
Hoje há muitas ferramentas, IDEs e bibliotecas que agilizam muito a vida do programador. Mas e como era antigamente, quando tudo era “mato”?
Escrever programas era bem mais complexo, e exibia muito conhecimento de baixo nível do programador.
Linguagens como a Assembly que é uma linguagem de baixo nível, eram as mais comuns, suas instruções são as mesmas instruções do código de máquina.
Legal e para criar um “Hello World”, como seria?
section .data
msg db 'Hello World!', 0
section .text
global _start
_start:
; Write the string to stdout
mov eax, 4 ; System call number for 'write'
mov ebx, 1 ; File descriptor for stdout
mov ecx, msg ; Address of the string to write
mov edx, 13 ; Length of the string
int 0x80 ; Call the kernel
; Exit the program
mov eax, 1 ; System call number for 'exit'
xor ebx, ebx ; Exit code of 0
int 0x80 ; Call the kernel
A primeira seção, .data, declara uma única variável chamada msg e a define igual à string “Hello World!” com um terminador nulo no final (o 0).
A segunda seção, .text, é onde a lógica do programa é definida. A primeira linha define um rótulo global chamado _start, que é o ponto de entrada do programa.
As próximas quatro linhas usam a instrução mov para definir os valores apropriados nos registradores necessários para chamar a chamada do sistema de gravação. eax é definido como o número de chamada do sistema para gravação, ebx é definido como o descritor de arquivo para stdout, ecx é definido como o endereço da string a ser gravada e edx é definido como o comprimento da string.
A instrução int é então usada para chamar o kernel, que executará a chamada do sistema de gravação e enviará a string para o console.
Após a string ter sido gravada no console, o programa usa a instrução mov novamente para definir os valores apropriados nos registradores necessários para chamar a chamada de sistema de saída. eax é definido como o número de chamada do sistema para sair, ebx é definido como o código de saída 0 e int é usado para chamar o kernel novamente e sair do programa.
Isso é para ter uma noção como pode ser trabalhoso criar tudo desde o nível mais baixo, mas claro que neste nível as possibilidades de uso do hardwares são incríveis.
Conhecer a fundo o Assembly pode ser um grande diferencial, mas claro que o desafio é grande.
Certo pessoal? Eu espero que isso ajude a conhecer um pouco mais do mundo da programação, um abraço e até o próximo post. Valeu!
Fonte da imagem: https://freedev.medium.com/
Está gostando do conteúdo?
Considere pagar um cafezinho para nossa equipe!