Ano bissexto em assembly

Publicado por Leonardo Weslei Diniz 11/12/2007

[ Hits: 20.424 ]

Homepage: http://www.agilesoft.com.br/

Download programa.s




Ano bissexto em assembly.

Obs:programa fácil de entender, tem comentário em tudo.

  



Esconder código-fonte

.data
   str1: .asciiz "\n\tDigite o ano: "
   str2: .asciiz "\n\tAno BISSEXTO!!!"
   str3: .asciiz "\n\tAno COMUM!!!"
   str4: .asciiz "\n\tDigite:\n\t0(zero) para sair:\n\t1(um)para manual\n\t2(dois)para calcular ano bissexto\n\t"
   strman: .asciiz "\n\tAno bissexto o ano que possui um dia a mais do que os anos comuns (vulgares).\n\tO objetivo e manter o calendario utilizado em sincronia com os eventos sa_\n\tzonais relacionados as estacões do ano. No caso do calendario gregoriano, \n\tha a insercao de 1 dia extra a cada 4 anos no mes de fevereiro, que passa \n\ta ter 29 dias (ano com 366 dias) ao inves de 28 como nos anos comuns de 365\n\tdias. Diferentemente do que o senso comum nos leva a crer, o dia extra do a_\n\tno bissexto nao e o 29 e sim o 24 do mes de fevereiro. Para concluir se um\n\t ano e bissexto basta ser verificada a condicao do ano ser divisivel por 400\n\t(o resto da divisao do ano por 400 e zero), ou no caso de essa condicao ser\n\tfalsa, o ano ser divisivel por 4 mas nao por 100.\n\t\tfonte:\"http://pt.wikipedia.org/wiki/Ano_bissexto\"\n\tEste programinha foi desenvolvido para verificar se e ano bissexto a partir\n\tde um numero dado pelo usuario\n\n\t\tDivirta-se!!!\n\n\t\tCreditos:Leonardo Weslei Diniz\n\n\t\tEmail:exterminador3@gmail.com\n\n\t\tCurso:Ciencia da Computacao-Fic(Faculdades Integradas de Caratinga)-2 periodo\n\n\t\t"
   str5: .asciiz "\n\t+------------------------------------------------------------------------------------------+\n\t"
.text
.globl main.                          #main()
main:                                 #{
      j menu                #menu()
   comeca:                       #comeca:
      li $v0,4              #mostra qual operacao vai fazer no caso printf
      la $a0,str1           #coloca a string str1 em $a0
      syscall               #chama o SO(sistema operacional) para fazer printf("%s",$a0)
      li $v0,5              #mostra qual operacao vai fazer 
      syscall               #chama o SO(sistema operacional) para fazer scanf("%d",$s1)
      addi $s1,$v0,0        #scanf("%d",&ano);
      addi $t1,$zero,4      #$t0=4;
      div $s1,$t1           #ano%4;
      mfhi $s1              #ano=ano%4;
      addi $t2,$zero,1      #$t2=1;
      beq $s1,$t2,else      #if($s1 == $t1)goto else;
      addi $t2,$zero,2      #$t2=2;
      beq $s1,$t2,else      #if($s1 == $t1)goto else;
      addi $t2,$zero,3      #$t2=3;
      beq $s1,$t2,else      #if($s1 == $t1)goto else;
      li $v0,4              #mostra qual operacao vai fazer no caso printf
      la $a0,str2           #coloca a string str2 em $a0
      syscall               #chama o SO(sistema operacional) para fazer printf("%s",$a0)
      j menu                #menu();
   else:                         #else:
      li $v0,4              #mostra qual operacao vai fazer no caso printf
      la $a0,str3           #coloca a string str3 em $a0
      syscall               #chama o SO(sistema operacional) para fazer printf("%s",$a0)
   acabou:                       #acabou:
jr $ra                                #}
#---------------------------------------------------------------------------------
#                                      funcaozinhas     bobas
#---------------------------------------------------------------------------------
menu:                                 #menu(){
      li $v0,4              #mostra qual operacao vai fazer no caso printf 
      la $a0,str4           #coloca a string str4 em $a0
      syscall               #chama o SO(sistema operacional) para fazer printf("%s",$a0)
      li $v0,5              #mostra qual operacao vai fazer no caso scanf 
      syscall               #chama o SO(sistema operacional) para fazer scanf("%d",$s1)
      addi $s1,$v0,0        #scanf("%d",&ano);
      addi $t1,$zero,2      #$t2=2
      beq $s1,$t1,comeca    #if($s1 == $t1)goto comeca;
      addi $t1,$zero,1      #$t2=1
      beq $s1,$t1,manual    #if($s1==$t1)manual();
      bne $s1,$t1,acabou    #if($s1 != $t1)goto acabou;}
#----------------------------------------------------------------------------------
manual:                               #manual(){
      li $v0,4              #mostra qual operacao vai fazer no caso printf
      la $a0,str5           #coloca a string str5 em $a0
      syscall               #chama o SO(sistema operacional) para fazer printf("%s",$a0)
      li $v0,4              #mostra qual operacao vai fazer no caso printf 
      la $a0,strman         #coloca a string strman em $a0
      syscall               #chama o SO(sistema operacional) para fazer printf("%s",$a0)
      li $v0,4              #mostra qual operacao vai fazer no caso printf 
      la $a0,str5           #coloca a string str5 em $a0
      syscall               #chama o SO(sistema operacional) para fazer printf("%s",$a0)
      j menu                #menu();}

Scripts recomendados

GAS Inteiro para String (formato binário)

Algoritmo de Raiz Quadrada Inteira em Assembly Puro para Linux x86 (GNU Assembler)

Calculadora em C com Assembly (multiplataforma)

Retorna o maior e menor elemento de um vetor em Assembly

Quadrado de um número em assembly


  

Comentários
[1] Comentário enviado por albertguedes em 15/12/2007 - 20:22h

Bem legal e fácil este programinha. E você colocou bastante comentários, o que é imprescindivel quando se escreve em assembler, muito bom mesmo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts