Resolução do Teste

Exame - 22 de Fevereiro de 1999

Nota: As soluções apresentadas são apenas uma forma de resolver os exercícios, poderão existir outras igualmente válidas e eficientes.

AC - Testes e Resoluções


  1. Faça um programa que calcule o complemento para 2 de um número de 512 bits que se encontrar no vector NUMERO.

    Resolução:

    NUMERO DW ?
    LEN EQU 32  ; 512 bits = 32 Words
    mov CX, LEN
    lea BX, NUMERO
    complemento:
    	not [BX]
    	add BX, 2
    	loop complemento
    mov CX, LEN
    lea BX, NUMERO
    add [BX], 1
    add BX, 2
    soma_1:
    	adc [BX], 0
    	add BX, 2
    	loop soma_1
  1. Converta o seguinte programa em C para linguagem Assembly.
    void converte(char *string, int tamanho)
    {
    	int i;
    	for (i = tamanho; i < 0; i--)
    	    string[i] = string[i] + 32;
    }
    void main()
    {
    	char string[]="teste de arquitectura de computadores";
    	converte(string,38);
    }

    Resolução:

    converte: proc
    	pop BX
    	pop CX
    	conv:
    		add [BX], 32
    		add BX, 1
    		loop conv
    ret
    string DB "teste de arquitectura de computadores"
    main:
    	push 38
    	lea BX, string
    	push BX
    	call converte
  1. Uma das formas mais fáceis de cifrar/decifrar um texto é fazer o XOR de cada caracter com uma chave, sendo o resultado o texto cifrado/decifrado. A mesma chave e o mesmo algoritmo servem para cifrar e decifrar o texto.

Exemplo: Se desejarmos cifrar o caracter "A" ( 01000001) e aplicarmos a chave 11100111 o algoritmo comporta-se como se segue:

Cifrar:
	01000001 (caracter A)
XOR	11100111 (chave)
----------------
10100110 (caracter A cifrado)
Decifrar:
	10100110 (caracter A cifrado)
XOR	11100111 (chave)
----------------
	01000001 (caracter decifrado)

        Escreva um programa que implemente este algoritmo para os valores existentes numa string.

        Resolução:

	STRING	DB ?
	CHAVE	DB ?
	LEN	EQU 80
	de_cifra: proc
		pop AX
		pop CX
		pop BX
		ciclo:
			xor [BX], AX
			inc BX
			loop ciclo
	ret
	lea BX, STRING
	PUSH BX
	PUSH LEN
	PUSH CHAVE
	call de_cifra
  1. Faça um programa que implemente a seguinte equação:

formula

    Resolução:

	Y	DB ?
	N	DB ?
	lea BP, Y
	mov CX, N
	xor DX, DX
	somatorio:
		mov BL, [BP]
		push BX
		call func ; altera o valor em DL
		pop DX
		mul BX, DL
		add AX, BX
		inc BP
		loop somatorio
	mov R, AX

Última actualização: 02 Maio 2005

ÍndiceAC - Testes e Resoluções