Nestes projetos o aluno pode conhecer um processador moderno "por dentro" e ganhar experiência prática e real, "mão na massa", usando recursos do processador Pentium para construir algumas rotinas básicos. Todos os softwares modernos (aplicativos, compiladores e especialmente sistemas operacionais) precisam recorrer a estes tipos de rotinas para funcionar bem.
Todas as informações necessárias para fazer estes projetos são dadas nas aulas de laboratório. Estas mesmas informações podem ser encontradas nas referências bibliográficas e nos arquivos dos computadores do laboratório. O tutorial do depurador está disponivel também aqui .
Os projetos devem ser feitos individualmente.
Os resultados que o aluno deve obter em cada trabalho são mínimos, ou seja, apenas o essencial para mostrar o funcionamento do mecanismo (interrupção, paginação, segmentação, proteção e multitarefas). Para obter a nota máxima o aluno deve mostrar a sua imaginação, iniciativa e originalidade fazendo algo um pouquinho a mais.
Os trabalhos devem ser entregues nas datas combinadas em sala de laboratório – entrega depois da referida data não vale. A desculpa "perdi os meus arquivos" ou "achei tinha enviado" não vale – cada um é responsável por fazer backup dos arquivos e verificar a entrega dentro do prazo. Os itens a serem entregues estão listadas no arquivo de ajuda ajuda.txt dos computadores no laboratório.
Entregar uma cópia de um trabalho de outro aluno não vale.
 Um aluno pode usar  subrotinas e pedaços de código de outro
 aluno mas deve mencionar isso sob forma  de um comentário no início
 e no fim do código copiado, caso contrário a  pontuação
 correspondente a esse código não será dada. O código
 copiado deve  ainda obrigatoriamente sofrer alguma modificação
 que demonstre que o aluno que  usou o código do outro aluno realmente
 entende o funcionamento do referido  código. 
    
     
O resultado deve ser um fractal sendo calculado e aparecendo na tela e alguma parte na tela piscando sempre quando chega uma determinada interrupção, por exemplo quando alguém mexe no mouse. A seqüência de gráficos deve durar alguns segundos e ao terminar o programa deve terminar.
| Nota de base | 6,5 | |
| a) | Menos do que 10 telas | - ...2 | 
| b) | Não funciona (ou funciona parcialmente) | - ...2 | 
| c) | Falta código para funcionar | - ...2 | 
| d) | Falta tela mostrando o descritor (nas 2      janelas) | -0,5 | 
| e) | Falta tela mostrando execução da rotina de atendimento da interrupção | -1,0 | 
| f) | Falta explicação da pilha | -0,5 | 
| g) | Explicações detalhadas/erradas | +/-...2 | 
| h) | Mais comentários no código | + ...0,3 | 
| i) | Código bonito (subrotinas, etc.) | + ...0,3 | 
| j) | Visualização (fractais e pisca) mais
 bonita | + ...0,8 | 
| k) | Capturando mais interrupções (por
exemplo       timer) | + ...1,0 | 
| l) | Entrega atrasada | -3,0/dia | 
O programa principal deve fazer acesso de escrita a um endereço virtual (linear) que não tem um endereço físico associado a ele de maneira a provocar uma falha de página. A falha de página deve ser atendida mapeando um frame da memória RAM para a página onde ocorreu a falha e dar continuação ao programa principal.
O programa deve carregar um arquivo executável e executá-lo. O código deve ser carregado num segmento de código e os dados devem ser carregados num segmento de dados que permite somente leitura (não escrita). Para as variáveis, um segmento que permite leitura e escrita deve ser criado. Um segmento específico para a pilha deve ser criado. Os tamanhos para os respetivos segmentos devem ser obtidos do cabeçalho do arquivo executável. Todos os segmentos devem usar DPL=3. Deve-se usar um Task State Segment para colocar o parograma carregado para rodar. De dentro do programa carregado que deve rodar com CPL=3 deve ser feito uma chamada de uma subrotina que deve rodar com CPL=0.
Um salto para fora do segmento de código ou uma tentativa de acesso de memória fora do limite do segmento de dados devem provocar um #GP. Uma tentativa de dar um salto para um endereço qualquer num segmento de código com DPL=0 ou a tentativa de executar uma instrução privilegiada (como acessar o registro CR3 por exemplo) deve resultar num #GP.
| Mínimo perfeito | 7,5 | |
| a) | Menos do que 10 telas | - ...2 | 
| b) | Não funciona (ou funciona parcialmente) | - ...2 | 
| c) | Falta código para funcionar | - ...2 | 
| d) | Falta tela mostrando o descritor para falha de pagina | -0,2 | 
| e) | Falta tela mostrando execução da rotina do atendimento da falha de pagina | -0,5 | 
| f) | Falta explicação da pilha de atendimento a falha de pagina | -0,5 | 
| g) | Falta tela mostrando paginação | -1 | 
| h) | Falta tela mostrando os descritores de segmentos | -0,5 | 
| i) | falta tela mostrando execução do aplicativo carregado | -0,5 | 
| j) | Falta explicação da pilha da chamada ao "sistema operacional" | -0,5 | 
| k) | Explicações erradas / detalhadas | -2 ...2 | 
| l) | Realizando ataques (por ataque diferente) | +...0,5 | 
| m) | preenchimento do descritor para limites de até 4GB | +...0,3 | 
| n) | Na chamada ao sistema aumenta-se o tamanho do segmento de variáveis | +...1,0 | 
| o) | Uso da LDT | +...0,5 | 
| p) | Mais comentários no código | +...0,3 | 
| q) | Código bonito (subrotinas, etc.) | +...0,3 | 
| r) | Solução diferente | +...1 |