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.
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
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); }
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
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.
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
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