Section courante

A propos

Section administrative du site

Il est parfois pratique de savoir quel année possède 366 jours dans le calendrier grégorien. On appel s'est année, les années bissextile. A l'aide du code source Assembleur 80x86 suivant, vous trouverez la réponse que vous souhaitez :

  1. .MODEL small
  2.    .STACK 100h
  3.    .DATA
  4. Message1       DB ' est une année bissextile','$'
  5. CRLF           DB 13,10,'$'
  6.    .CODE
  7. PrintDigit PROC NEAR
  8.     OR  AX,AX
  9.     JNS Positif    
  10.     PUSH AX
  11.      MOV AH,02h
  12.      MOV DL,'-'
  13.      INT 21h
  14.     POP AX
  15.     NEG AX
  16. Positif:
  17.     MOV BX,10           
  18.     XOR CX,CX
  19. NextDigit:
  20.     XOR DX,DX
  21.     DIV BX
  22.     PUSH DX
  23.      INC CX              
  24.      OR  AX,AX
  25.      JNZ NextDigit
  26. PrintOneDigit: 
  27.     POP AX       
  28.     ADD AL,48           
  29.     MOV DL,AL           
  30.     MOV AH,02h
  31.     INT 21h             
  32.     LOOP PrintOneDigit
  33.     RET
  34. ENDP
  35.  
  36. IsLeapYear PROC NEAR
  37.     MOV DX,AX 
  38.     MOV CX,AX
  39.     AND AX,3
  40.     JNZ @isleapyearFalse
  41.     MOV DI,100
  42.     XCHG AX,DX
  43.     XOR DX,DX
  44.     DIV DI
  45.     OR  DX,DX
  46.     JNZ @isleapyearTrue
  47.     MOV DI,400
  48.     XCHG AX,CX
  49.     XOR DX,DX
  50.     DIV DI
  51.     OR  DX,DX
  52.     JZ  @isleapyearTrue
  53. @isleapyearFalse: 
  54.     MOV AX,0
  55.     RET
  56. @isleapyearTrue:
  57.     MOV AX,1
  58.     RET
  59. ENDP
  60.  
  61.     .startup   
  62.     MOV  AX,1900
  63. @Restart:
  64.     PUSH AX
  65.      CALL IsLeapYear
  66.      OR   AX,AX
  67.      JZ   @Next
  68.      POP  AX
  69.      PUSH AX
  70.      CALL PrintDigit
  71.      MOV  AX,@data
  72.      MOV  DS,AX                  
  73.      MOV  AH,9                   
  74.      MOV  DX,OFFSET Message1
  75.      INT  21h                    
  76.      MOV  AH,9                   
  77.      MOV  DX,OFFSET CRLF
  78.      INT  21h
  79.  
  80. @Next:
  81.     POP AX
  82.     INC AX
  83.     CMP AX,2009
  84.     JNGE @Restart
  85.    
  86.     MOV  AX,4C00h                 
  87.     INT  21h                    
  88.     END

on obtiendra le résultat suivant :

1904 est une année bissextile
1908 est une année bissextile
1912 est une année bissextile
1916 est une année bissextile
1920 est une année bissextile
1924 est une année bissextile
1928 est une année bissextile
1932 est une année bissextile
1936 est une année bissextile
1940 est une année bissextile
1944 est une année bissextile
1948 est une année bissextile
1952 est une année bissextile
1956 est une année bissextile
1960 est une année bissextile
1964 est une année bissextile
1968 est une année bissextile
1972 est une année bissextile
1976 est une année bissextile
1980 est une année bissextile
1984 est une année bissextile
1988 est une année bissextile
1992 est une année bissextile
1996 est une année bissextile
2000 est une année bissextile
2004 est une année bissextile
2008 est une année bissextile

Si par exemple vous utilisez le Turbo Assembleur version 5.0, vous n'aurez que les trois commandes suivantes a effectuer pour voir le résultat en supposant que le programme s'appel «leapyear.asm» :

TASM leapyear.asm
TLINK leapyear.obj
leapyear.exe


Dernière mise à jour : Vendredi, le 4 mars 2016