Unioeste - Cascavel - Colegiado do curso de Bacharelado em Ciência da Computação
2ª Série
Ementa: Estudo de linguagem de montagem e desenvolvimento de software básico. Estudo de conjuntos de instruções e modos de endereçamento. Implementação de construções de alto nível em linguagem de máquina.
Este repositório conterá todas as aulas da disciplina:
- Apresentações em .pdf;
- Arquivos de código-fonte exemplos e, se possível, exercícios resolvidos;
- e outros arquivos relevante para a disciplina.
Outras informaçõe relevantes serão adicionadas em um futuro próximo.
TL;DR: no terminal Linux faça:
sudo apt update
(pressione enter e insira sua senha de super usuário)
sudo apt install nasm binutils build-essential git-all
(pressione enter)
-
Sistema Operacional Linux
- A disciplina utiliza o Sistema Operacional Linux x86_64 com sabor Debian ou seus derivados (Mint, Ubuntu, MX, Deepin, etc).
- TL;DR: Usaremos as Chamadas de Sistema Operacional (S.O.) Linux!
- Porém, não é restrito o uso de outro S.O. Linux compatível não listado anteriormente. Porque Linux? A disciplina usa Chamadas de S.O. para apresentar texto no terminal, ler do teclado, abrir/fechar arquivos, entre outras, e essas Chamadas de S.O. estão implementadas no Kernel do S.O. Desta forma, cada S.O. pode implementar as Chamadas de maneiras diferentes e utilizar parâmetros não compatíveis com os que aprenderemos nesta disciplina.
-
Montador
NASM
- Principal ferramenta da disciplina, pois é com ela que montaremos nossos códigos-fontes para serem ligados e depois executados.
- Para instalar, abra o terminal Linux e digite:
sudo apt install nasm
-
Ligador
ld
- Após termos um código montado, é necessário ligá-lo com bibliotecas de carregamento e bibliotecas externas, quando necessário. Após a ligação completada é que é gerado efetivamente o arquivo executável.
- ld faz parte da biblioteca
binutils
e já deve estar instalada. Caso contrário, instale, via terminal, esta biblioteca:
sudo apt install binutils
-
Compilador
gcc
- A partir da Etapa 02 - Aula 11, usaremos bibliotecas C para nos ajudar com algumas tarefas mais complexas, por isso, passaremos a ligar nossos códigos-fontes com o GCC
gcc
, normalmente, já vem instalado em algumas distribuições Linux, porém, caso na sua esteja ausente, no terminal faça:
sudo apt install build-essential
"Mas eu nunca utilizei terminal Linux! Como faz?"
Aluno de computação que nunca utilizou terminal Linux.
Possível solução: Curso gratuito introdutório de terminal Linux criado por Diego Mariano.
"Ah não, terei que instalar o Linux?"
Aluno de computação que não usa Linux ou compatíveis.
Possíveis soluções:
- Bare-Metal Dual-Boot Windows + Linux (modo hardcore): Como fazer dual-boot com Ubuntu e Windows 10 em seu notebook de Matheus Pratta.
- Virtualização Linux Visitante + Windows Hospedeiro (modo mamão com açucar): Como instalar o Ubuntu Linux no Windows 10 com o VirtualBox
- WSL2 do Windows 10 (modo mamão com açucar, porém com pitada de sal): Install Kali Linux – WSL 2 KEX GUI hacking setup (sugestão do Vinicius Muller).
"Ok, Linux compatível instalado, mas o que faço com esse tal de git?"
Aluno de computação que não conheçe o git.
Possíveis soluções:
- Básico e feio: use o botão CODE (em verde) no canto superior direito e faça o Download da pasta. Problema: terá que realizar um novo Download e substituir os arquivos antigos toda vez que alguma alteração acontecer.
- Intermediário e bonito: instale o git e clone o repositório:
- Instale o git, no terminal Linux digite:
sudo apt install git-all
- Em seu computador local, crie um diretório e clone o diretório deste repositório com o comando:
git clone https://github.com/bellorini/Unioeste-LinguagensDeMontagem.git
- Muito bem, agora, toda vez que uma aula iniciar, entre no diretório local em seu computador e atualize o repositório com o comando:
git pull origin main
- Parabéns, seu diretório será atualizado automagicamente toda vez que executar este comando.
- Instale o git, no terminal Linux digite:
"Que legal, esse tal de git parece bacana! Onde posso saber mais sobre ele?"
Aluno de computação querendo ter um diferencial no seu currículo.
Possível solução: Documentação oficial do github.
Livros, documentos e outros materiais que tem forte contribuição com a produção deste material.
- NASM - The Netwide Assembler
- Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual - all volumes
Artigos, livros ou outros documentos que de alguma forma contribuíram com algum ponto específico deste material.
- Bartlett, Jonathan. Programming from the Ground Up. Rev 1.0. 2003.
(Sintaxe AT&T, registradores, memória, funções.) - Hyde, Randall - The Art of Assembly Language by Randall Hyde. 2nd Edition.
(Sintaxe AT&T, representação de dados, acesso à memória, aritmética legada.) - Duntemann, Jeff. Assembly Language Step-by-Step Programming with Linux. 3rd Edition.
(Endianness, Flags, CMP, Jcc.) - Streib, James T. . Guide to Assembly Language A Concise Introduction. 1st Edition. 2011.
(Registradores, movimentação de dados, aritmética legada, operações lógicas.) - Cavanagh, Joseph. X86 Assembly Language and C Fundamentals. 2013.
(Sistema de numeração, modos de endereçamento, pilha, macros, ponto-flutuante (FPUx87, não mais utilizada neste ano, porém, mantido para os curiosos).)