A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Cap. III - Registradores do Microprocessador

Sab

15

Dez

2007


13:46

(11 votos, média 4.09 de 5) 


Exercícios com instruções

Abrimos o arquivo prog002a com a nossa IDE RadAsm, onde encontramos o seguinte:

vovo Faça o download de prog002a.zip.

No arquivo .INC está declarada a variável Valor_1 do tipo DD.

prog002a: ;##################[Operações Aritméticas]################ MOV EAX,444 ; EAX = 444 ADD EAX,333 ; EAX = 444 + 333 = 777 MOV Valor_1,EAX ; Movemos o Resultado para a ; variável Valor_1 = EAX = 777 MOV EBX,15Dh ; EBX = 15Dh MOV EAX,20Ch ; EAX = 20Ch ADD EAX,EBX ; EAX = 20Ch + EBX = 15Dh = 369h PUSH EBX ; Guardamos o conteúdo do Registrador EBX = 15Dh ; na Pilha. DEC EAX ; Decrementamos 1 em EAX = 369h - 1 = 368h INC EBX ; Incrementamos 1 em EBX = 15Dh + 1 = 15Eh SUB EAX, EBX ; Subtraimos EAX = 368h - EBX = 15Eh = 20Ah POP EBX ; Recuperamos o conteúdo da Pilha para o registrador EBX SUB EBX,10 ; Subtraimos EBX = 15Dh - 10 = 153

Quando queremos declarar números em Hexadecimal, devemos escrever o caractere h no final do valor. Se não houver nenhum caractere no final, significa que é decimal.

;##################[Operações Lógicas]################ MOV EAX,12 ; 12 = 1100b MOV EBX,11 ; 11 = 1011b AND EAX,5 ; EAX=12 (1100b) And 5(0101b) = 4 (0100b) OR EAX,EBX ; EAX= 4(0100b) OR EBX 11(1011b) = F(1111b) OR EBX,1101b ; EBX = 11(1011b) OR 13(1101b) = F(1111b) XOR EAX, EBX ; EAX = F(1111b) XOR EBX = F(1111b) = 00000 PUSH -2 ; Guardamos na Pilha o valor -2 POP EBX ; Recuperamos o valor guardado na pilha no registrador EBX NOT EBX ; NOT EBX = -2 = 1

Quando quisermos declarar números binários, devemos escrever o caractere b no final do valor inteiro. Nas operações lógicas, se quisermos comprovar os resultados, podemos verificar a tabela verdade correspondente a cada operação.

O programa acima é só um exemplo de como usar apropriadamente as instruções. Agora vamos dar sentido ao nosso programinha.

Temos 5 valores inteiros:

1 - 1Ah 
2 - 500 
3 - 1C2h 
4 - 13h 
5 - 200

Faremos um programa que faça a seguinte operação:

  • 1Ah + 500 = X
  • Do resultado X subtraímos 1C2h: X – 1C2h = Y
  • Guardamos o resultado Y na Pilha ou numa variável e depois somaremos as quantidades que até agora não utilizamos, desta maneira:
    • 13h + 200 = Z
  • Recuperamos o resultado Y e dele subtraímos a quantidade do resultado Z. O resultado final deve ser armazenado no registrador EAX.

Solução Nº1 (prog002b)

No arquivo .inc declaramos a variável Y tipo DD.

prog002b: mov eax,1Ah ; EAX = 1AH add eax,500 ; EAX = 1Ah + 500 = 526 sub eax,1C2h ; EAX = 526 – 1C2 = 76 mov Y, eax ; Y (variável) = EAX = 76 mov eax, 13h ; EAX = 13H add eax,200 ; EAX = 13H + 200 = 219 sub eax ,Y ; EAX = 219 - Y (76) = 143

O resultado final é EAX = 143.

vovo Faça o download de prog002b.zip.

Solução Nº2 (prog002c)

Todos os valores estão declarados no arquivo .inc do nosso programa onde:

Valor_1 DD 1Ah Valor_2 DD 500 Valor_3 DD 1C2h Valor_4 DD 13h Valor_5 DD 200 prog002c: mov eax,Valor_1 ; EAX = 1Ah add eax,Valor_2 ; EAX = 1Ah + 500 = 526 sub eax,Valor_3 ; EAX = 526 – 1C2 = 76 push eax ; Guardamos na Pilha o conteúdo de EAX = 76 mov eax,Valor_4 ; EAX = 13H add eax,Valor_5 ; EAX = 13H + 200 = 219 pop ebx ; Recuperamos o conteúdo de EAX em EBX = 76 sub eax,ebx ; EAX = 219 - Y (76) = 143

Há muitas soluções, não só estas duas. Se vocês desejarem aprender mais, devem desenvolver suas próprias soluções.

vovo Faça o download de prog002c.zip.

Informações adicionais