Organização e Arquitetura de Computadores

Laboratório


Lista de Exercicios

Lista 1

Para os exercicos abaixo, o primeiro número está em 10H e o segundo em 14H e o resultado deve ser colocado em 20H

1)Somar 2 números de 8 bits.
2)Somar 2 números de 16 bits
3)Somar 2 números de 32 bits
4)Subtrair 2 números de 8 bits.
5)Subtrair 2 números de 16 bits
6)Subtrair 2 números de 32 bits
7)Multiplicar 2 números de 8 bits sem sinal
8)Multiplicar 2 números de 16 bits sem sinal
9)Somar 2 números de 8 bits em BCD
10)Somar 2 números de 16 bits em BCD
11)Subtrair 2 números de 8 bits em BCD
12)Subtrair 2 números de 16 bits em BCD
13)Somar 2 números de 8 bits em ASCII
14)Somar 2 números de 16 bits em ASCII
15)Subtrair 2 números de 8 bits em ASCII
16)Subtrair 2 números de 16 bits em ASCII
17)Multiplicar 2 números de 8 bits com sinal
18)Multiplicar 2 números de 16 bits com sinal

Lista 2

Faça um programa que:

1)Some os numeros de 8bits de 10H a 1FH e coloque o resultado em 50H
2)Some os numeros de 16bits de 10H a 1EH e coloque o resultado em 50H
3)Calcule a media dos numeros de 8bits de 10H a 30H e coloque o resultado em 50H
4)Calcule a media dos numeros de 16bits de 10H a 2FH e coloque o resultado em 50H
5)Fazer um programa que verifique o numero da posição de memoria 10H (16bits) e coloque -1 na posição 12H se o numero for negativo, 1 se ele for positivo ou zero se ele for zero.

Lista 3

1)Fazer um programa que leia os valores de 8 bits de 10H a 1FH e copie os pares para um vetor iniciado em 20H e impares para 30H
2) Move 20 bytes de 100H para 200H
3) Move 50H bytes de 200H para 100H
4) Move 500H bytes de 200H para 100H
5) Move 500H bytes de 100H para 200H
6) Move N bytes da posição x para a y. N está em 10H, x em 12H e y em 14H.

Lista 4

1) Fazer um programa que procure o caracter "." começando em 20H com:
a) tamanho de 10 caracters
b) Sem tamanho
c) Tamanho determinado pelo /0

2) Fazer um programa que some dois numeros de 10 digitos em ASCII. O primeiro começa em 10H e o segundo em 20H. O resultado deve ser colocado a partir de 30H.
3)Fazer um programa que multiplique dois numeros de 10 digitos em ASCII. O primeiro começa em 10H e o segundo em 20H. O resultado deve ser colocado a partir de 30H.

Lista 5

Traduza as funções abaixo para assembly, usando as convenões "normais" parapassagem de parametros e resultados, alinhamento, etc. Quando necessário, assuma as declarações abaixo( não é necessário traduzi-las para assembly). Não se impressione pois alguns programas realmente não fazem nada de util e servem apenas para exercitar.

Struct X{
int a,b,c
int arr[20]
},X;

int a

1)
Void f (int i){
a+=i; //a é globa
}

2)
void f (void){
int i;
for(i=0;i<20;i++)
x.arr[i]=0; //x é global
}

3)
int f (int n){
if (n==0) return 1;
else return n* f (n-1);
}

4)
int f (struct X*x, int i){
return x->arr[i];
}
5)
int f (struct X*x, int i){
return &x->arr[i];
}

6)
void f (struct X*x, int i){
int j;
j=x->arr[i+x->c];
if(j==0)a=i; //a é global
else a=j;
}

7)Explique quantas iterações ocorrem em cada um dos seguintes loops:

a)
mov cx,1
E5: loop E5

b)
mov cx,0
E5: loop E5

c)
E5: mov cx,10
loop E5

d) mov cx,10
E5: inc cx
loop E5

Lista 6

1) Escreva um programa que copie uma string de 10H para 20H e converta as minusculas em maiusculas.

2) Escreva um programa que verifique se um numero inteiro na posição 10H é primo. O resultado deverá ser guardado na posição de memoria 20H

3)Escreva um programa guarde em variaveis o menor e o maior valor de um vetor na posição 30H.