Високосный год - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужно написать программу, которая позволит вывести на экран данные о первом високосном годе от текущего. Читал аналогичную тему, но видимо я тугой Вывод о первом дне високосного года (com-файл tasm) Есть программа, которая выводит текущую системную дату:
Листинг программы
  1. model tiny
  2. .code
  3. org 100h
  4. start: mov ah,2ah
  5. int 21h
  6. mov dwY,cx
  7. mov dbD,dl
  8. mov dbM,dh
  9. mov dbW,al
  10. mov cx,3
  11. lea bx,pLang
  12. @@01: MOV si,[bx]
  13. push bx
  14. push cx
  15. mov al,dbD
  16. xor ah,ah
  17. call outnum
  18. mov bl,dbM
  19. call outinf
  20. mov ax,dwY
  21. call outnum
  22. mov bl,dbW
  23. add bx,12
  24. call outinf
  25. pop cx
  26. pop bx
  27. add bx,2
  28. loop @@01
  29. xor ax,ax
  30. int 16h
  31. ret
  32. outNum: xor cx,cx
  33. mov bx,10
  34. @@02: xor dx,dx
  35. div bx
  36. push dx
  37. inc cx
  38. or ax,ax
  39. jnz @@02
  40. @@03: pop ax
  41. or al,'0'
  42. int 29h
  43. loop @@03
  44. ret
  45. outinf: shl bx,1
  46. mov dx,[bx+si]
  47. mov ah,9
  48. int 21h
  49. ret
  50. pLang dw offset dwEn
  51. dw offset dwUa
  52. dw offset dwRu
  53. dwRU dw offset dbDecru
  54. dw offset dbJanru
  55. dw offset dbFebru
  56. dw offset dbMarru
  57. dw offset dbAprru
  58. dw offset dbMayru
  59. dw offset dbJunru
  60. dw offset dbJulru
  61. dw offset dbAugru
  62. dw offset dbSepru
  63. dw offset dbOctru
  64. dw offset dbNovru
  65. dw offset dbSunru
  66. dw offset dbMonru
  67. dw offset dbTueru
  68. dw offset dbWenru
  69. dw offset dbThuru
  70. dw offset dbFriru
  71. dw offset dbSatru
  72. dwEN dw offset dbDecen
  73. dw offset dbJanen
  74. dw offset dbFeben
  75. dw offset dbMaren
  76. dw offset dbApren
  77. dw offset dbMayen
  78. dw offset dbJunen
  79. dw offset dbJulen
  80. dw offset dbAugen
  81. dw offset dbSepen
  82. dw offset dbOcten
  83. dw offset dbNoven
  84. dw offset dbSunen
  85. dw offset dbMonen
  86. dw offset dbTueen
  87. dw offset dbWenen
  88. dw offset dbThuen
  89. dw offset dbFrien
  90. dw offset dbSaten
  91. dwUa dw offset dbDecua
  92. dw offset dbJanua
  93. dw offset dbFebua
  94. dw offset dbMarua
  95. dw offset dbAprua
  96. dw offset dbMayua
  97. dw offset dbJunua
  98. dw offset dbJulua
  99. dw offset dbAugua
  100. dw offset dbSepua
  101. dw offset dbOctua
  102. dw offset dbNovua
  103. dw offset dbSunua
  104. dw offset dbMonua
  105. dw offset dbTueua
  106. dw offset dbWenua
  107. dw offset dbThuua
  108. dw offset dbFriua
  109. dw offset dbSatua
  110. dbJanru db ' џ*ў*ам $'
  111. dbFebru db ' ”Ґўа*«м $'
  112. dbMarru db ' Њ*ав $'
  113. dbAprru db ' ЂЇаҐ«м $'
  114. dbMayru db ' Њ*© $'
  115. dbJunru db ' €о*м $'
  116. dbJulru db ' €о«м $'
  117. dbAugru db ' ЂўЈгбв $'
  118. dbSepru db ' ‘Ґ*впЎам $'
  119. dbOctru db ' ЋЄвпЎам $'
  120. dbNovru db ' Ќ®пЎам $'
  121. dbDecru db ' „ҐЄ*Ўам $'
  122. dbSunru db ' ‚®бЄаҐбҐ*мҐ',13,10,'$'
  123. dbMonru db ' Џ®*Ґ¤Ґ«м*ЁЄ',13,10,'$'
  124. dbTueru db ' ‚в®а*ЁЄ',13,10,'$'
  125. dbWenru db ' ‘।*',13,10,'$'
  126. dbThuru db ' —ҐвўҐаЈ',13,10,'$'
  127. dbFriru db ' Џпв*Ёж*',13,10,'$'
  128. dbSatru db ' ‘гЎЎ®в*',13,10,'$'
  129. dbJanen db ' January $'
  130. dbFeben db ' February $'
  131. dbMaren db ' March $'
  132. dbApren db ' April $'
  133. dbMayen db ' May $'
  134. dbJunen db ' June $'
  135. dbJulen db ' July $'
  136. dbAugen db ' August $'
  137. dbSepen db ' September $'
  138. dbOcten db ' October $'
  139. dbNoven db ' November $'
  140. dbDecen db ' December $'
  141. dbSunen db ' Sunday',13,10,'$'
  142. dbMonen db ' Monday',13,10,'$'
  143. dbTueen db ' Tuesday',13,10,'$'
  144. dbWenen db ' Wednesday',13,10,'$'
  145. dbThuen db ' Thursday',13,10,'$'
  146. dbFrien db ' Friday',13,10,'$'
  147. dbSaten db ' Saturday',13,10,'$'
  148. dbJanua db ' ‘iзҐ*м $'
  149. dbFebua db ' ‹овЁ© $'
  150. dbMarua db ' ЃҐаҐ§Ґ*м $'
  151. dbAprua db ' ЉўiвҐ*м $'
  152. dbMayua db ' ’а*ўҐ*м $'
  153. dbJunua db ' —ҐаўҐ*м $'
  154. dbJulua db ' ‹ЁЇҐ*м $'
  155. dbAugua db ' ‘ҐаЇҐ*м $'
  156. dbSepua db ' ‚ҐаҐбҐ*м $'
  157. dbOctua db ' †®ўвҐ*м $'
  158. dbNovua db ' ‹Ёбв®Ї*¤ $'
  159. dbDecua db ' ѓа㤥*м $'
  160. dbSunua db ' ЌҐ¤?«п',13,10,'$'
  161. dbMonua db ' Џ®*Ґ¤?«®Є',13,10,'$'
  162. dbTueua db ' ‚?ўв®а®Є',13,10,'$'
  163. dbWenua db ' ‘ҐаҐ¤*',13,10,'$'
  164. dbThuua db ' —ҐвўҐа',13,10,'$'
  165. dbFriua db ' Џ"пв*Ёжп',13,10,'$'
  166. dbSatua db ' ‘гЎ®в*',13,10,'$'
  167. dwY dw ?
  168. dbM db ?
  169. dbD db ?
  170. dbW db ?
  171. end start
*Она на трёх языках выводит(но это не важно).

Решение задачи: «Високосный год»

textual
Листинг программы
  1. ;[url]http://www.codenet.ru/progr/dos/int_0026.php[/url]
  2. .model small
  3. .286
  4. .code
  5. start:
  6.         mov ax, @data
  7.     mov ds, ax   ;привязали DS к данным
  8.         mov ah,2ah
  9.         int 21h
  10.         mov ax,cx
  11.         mov di,ax
  12.         lea si,sYear
  13.         call YearToStr
  14.         mov ax,di
  15. go1:inc ax
  16.         mov di,ax
  17.         test al,11b
  18.         jnz go1
  19.         mov bl,100
  20.         div bl
  21.         or ah,ah
  22.         jnz go2
  23.         mov ax,di
  24.         xor dx,dx
  25.         mov bx,400
  26.         div bx
  27.         mov ax,di
  28.         or dx,ax
  29.         jnz go1
  30. go2:mov ax,di
  31.         lea si,sLeap
  32.         call YearToStr
  33.  
  34.         mov ah,8     ;ждем нажатия клавиши
  35.     int 21h
  36.     mov ah, 4ch  ;выход
  37.     int 21h
  38.  
  39. YearToStr proc
  40.         mov dx,si
  41.         add si,8
  42.         mov bl,10
  43.         mov cx,4
  44. go0:div bl
  45.         add ah,'0'
  46.         mov [si],ah
  47.         dec si
  48.         xor ah,ah
  49.         loop go0
  50.         mov ah,9
  51.         int 21h    
  52.         ret
  53. endp
  54.  
  55. .data
  56. sYear db 'Year:    ',13,10,'$'
  57. sLeap db 'Leap:    ',13,10,'$'
  58. .stack 256
  59. end start

Объяснение кода листинга программы

  1. Устанавливаем модель сегмента данных на small и код на 286.
  2. Привязываем сегмент данных к сегменту переменных.
  3. Задаем код для обработки високосного года.
  4. Переменная sYear используется для хранения строки Year:
  5. Переменная sLeap используется для хранения строки Leap:
  6. Готовность к выполнению команд от пользователя.
  7. Выполнение команд от пользователя.
  8. Выход из программы.
  9. Процедура YearToStr используется для преобразования года в строку.
  10. Деление на 10 с целью получения последней цифры года.
  11. Добавление символа к строке.
  12. Уменьшение указателя на строку.
  13. Проверка на ноль, необходимая для обработки последней цифры года.
  14. Деление на 10 с целью получения средней цифры года.
  15. Добавление символа к строке.
  16. Уменьшение указателя на строку.
  17. Проверка на ноль, необходимая для обработки средней цифры года.
  18. Деление на 10 с целью получения первой цифры года.
  19. Добавление символа к строке.
  20. Уменьшение указателя на строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут