UNIVERSIDADE FEDERAL DE UBERLÂNDIA
Curso de Bacharelado em Ciência da Computação
Organização de Computadores 1 - Prof. Luiz Gustavo Almeida Martins
Trabalho de Assembly – Valor 15 Pontos
•
•
O trabalho deverá ser executado em grupos de até 4 alunos.
A mídia eletrônica com os códigos-fonte e executável deve ser entregue até o
dia 08/01/2010.
1. (5 pontos) Faça um programa em Assembly que simule o “jogo da velha”. Este
programa deverá criar 9 regiões (matriz 3x3) no vídeo em modo texto (utilizando toda a
tela ou apenas uma parte dela) e permitir que os 2 jogadores marquem, alternadamente,
uma única região por jogada. Se a escolha for feita com sucesso (região disponível), o
símbolo associado ao jogador (O ou X) será colocado no centro da região. Caso
contrário (região já ocupada ou região inválida – fora da matriz), um bip sonoro deve ser
emitido. O programa será finalizado quando um jogador marcar três regiões adjacentes
(vertical, horizontal ou diagonal) ou quando todas as regiões forem ocupadas. Ao final, o
programa deverá, ainda, informar o resultado do jogo (jogador ganhador ou empate).
OBS: as regiões deverão ser visivelmente separadas (utilizar os códigos ASCII – ex: 179,
196 e 197).
2. (5 pontos) Faça um programa em Assembly que simule uma calculadora pós-fixa para
números inteiros. Para o primeiro cálculo, o programa deve solicitar os dois operandos e
a operação desejada (+ = soma, - = subtração, * = multiplicação, / = divisão inteira e ^ =
exponenciação). Os demais cálculos devem considerar o resultado do anterior como o
primeiro operando, solicitando apenas o 2º operando e a operação. Este programa deve
executar as operações até estourar a capacidade do registrador AX ou até o usuário teclar
<ESC>.
Exemplo:
1º operando: 21 <ENTER>
2º operando: 12 <ENTER>
Operação: + <ENTER>
Resultado e 1º operando: 33
2º operando: 2 <ENTER>
Operação: / <ENTER>
Resultado e 1º operando: 16 resto 1
2º operando: 3 <ENTER>
Operação: * <ENTER>
Resultado e 1º operando: 48
2º operando: <ESC>
OBS: na divisão inteira deve ser apresentado o quociente e o resto. Porém, para a
próxima operação deve ser considerado apenas o quociente como 1º operando.
3. (5 pontos) Faça um programa em Assembly que leia uma string do teclado, de no
máximo 20 caracteres, e faça a edição da seguinte forma:
• O programa deve manter um “buffer" (variável no segmento de dados) sempre
atualizado do que está na tela.
• A tecla BackSpace deve apagar o último caracter, voltando com o cursor na tela.
• A tecla ENTER ou ESC terminam a execução do programa.
• Quando o buffer estiver cheio, não pode ser aceito novos caracteres, exceto BackSpace,
ENTER ou ESC. Um sinal sonoro deve ser emitido sempre que o usuário tentar digitar
um novo caracter.
• Ao ser digitado um algarismo seguido da letra ‘o’ e do espaço, o programa deve
substituir automaticamente a letra ‘o’ pelo ‘º’ (ASCII 167).
Exemplo: Se for digitado “23o aniversario” deve aparecer: “23º aniversario”.
OBS: A mudança ocorre assim que o espaço depois do ‘o’ for digitado.
EXERCÍCIOS PARA ESTUDO
4. (Extra) Faça um programa em Assembly que leia uma string do teclado, caractere por
caractere, e imprima esta string em letras maiúsculas.
5. (Extra) Faça um programa Assembly que calcule e apresente os 10 primeiros números da
série de Fibonacci. A partir do 3º termo, o valor do número é a soma dos dois anteriores:
Fibonacci = 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
6. (Extra) Escreva um programa em Assembly que possua uma variável msg1 do tipo string de
caracteres declarada no segmento de dados. Esse programa deve inverter essa string na
mesma posição de memória. Considere o código ASCII 00h (\0) como final de string.
Exemplo:
Antes:
Msg1 = “I N F O R M A T I CA \0“
Depois: Msg1 = “A C I T A M R O F N I \0”
7. (Extra) Faça um programa em Assembly que leia um numero inteiro positivo do teclado e
mostre o calculo do fatorial deste número.
8. (Extra) Faça um programa em Assembly que leia um numero inteiro positivo do teclado e
informe se este número é primo ou não.
Download

Assembly - Facom - Universidade Federal de Uberlândia