Algoritmo Quadrado Mágico em Assembler

Algoritmo em Assembler para determinar se uma matriz é ou não quadrado mágico, ou seja, a soma de cada linha, coluna e diagonal deve ser a mesma.


#A funcao faz a soma dos elementos da diagonal principal e armazena,
#depois compara todas as somas das linhas e colunas, uma a uma, com
#essa soma,e por ultimo com a diagonal secundaria.
#Se ele passar por todas comparacoes, eh quadrado magico, senao quer
#dizer que ele parou em alguma delas, sendo a soma diferente, e nao
#quadrado magico.
.section .text
.globl magico
magico:
push %ebp #guardar e atualizar EBP
mov %esp,%ebp
xor %edi,%edi #limpa registradores
xor %esi,%esi
mov $0,%edx
mov %edx,-4(%ebp) #var SOMA
laco1: #DIAGONAL PRINCIPAL
mov $0,%edx
mov $4,%eax
mul %edi #indice
mov 12(%ebp),%edx
mul %edx #N
add 8(%ebp),%eax #inicio da mat
mov (%eax,%edi,4),%ebx
add %ebx,-4(%ebp) #adiciona na SOMA
inc %edi
cmp 12(%ebp),%edi #comp com N
jne laco1
mov $0,%ebx
xor %edi,%edi #limpa registradores
xor %esi,%esi
laco2: #LINHAS E COLUNAS
mov $0,%edx
mov $4,%eax
mul %edi
mov 12(%ebp),%edx
mul %edx
add 8(%ebp),%eax
add (%eax,%edi,4),%ebx #adiciona pos1
mov $0,%edx
mov $4,%eax
mul %esi
mov 12(%ebp),%edx
mul %edx
add 8(%ebp),%eax
add (%eax,%edi,4),%ecx #adiciona pos2
inc %edi
cmp 12(%ebp),%edi
jne laco2
cmp -4(%ebp),%ebx
jne naomag #cmp linha com SOMA
cmp -4(%ebp),%ecx
jne naomag #cmp coluna com SOMA
mov $0,%ecx
mov $0,%ebx
inc %esi
mov $0,%edi
cmp 12(%ebp),%esi #fim da matriz
jne laco2
xor %edi,%edi #limpa registradores
xor %esi,%esi
mov $0,%ebx
mov $0,%ecx
mov 12(%ebp),%edi #prepara N para diag sec
dec %edi
laco3: #DIAGONAL SECUNDARIA
mov $0,%edx
mov $4,%eax
mul %edi #indice
mov 12(%ebp),%edx #N
mul %edx
add 8(%ebp),%eax #incio matriz
add (%eax,%esi,4),%ebx
dec %edi #calculo diag sec
inc %esi
cmp $0,%edi
jge laco3 #fim diagonal
cmp -4(%ebp),%ebx
jne naomag
mov $1,%eax #se eh magico
jmp final
naomag:
mov $0,%eax #se nao eh magico
final:
leave #finalizando
ret

Compartilhe:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • FriendFeed
  • LinkedIn
  • Live
  • MySpace
  • PDF
  • Rec6
  • Reddit
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Twitter
  • Yahoo! Bookmarks
  • Identi.ca
  • Netvibes
  • Tumblr
  • blogmarks
  • Posterous
  • Yahoo! Buzz

Posts relacionados:

  1. Matriz Simétrica em Assembler
  2. Alguns algoritmos da Regional da Maratona da ACM 2007
  3. Algoritmo: Números de Ka Fu
  4. Algoritmo: Os tesouros de Shaou Lee
  5. Algoritmo 3n+1 (Maratona de Programação)

Tags: , ,

This entry was posted on quarta-feira, setembro 17th, 2008 at 19:16 and is filed under algoritmos. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Comments are closed.