Вывести текущую дату (число, месяц, год) - Assembler

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

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

Написать на языке ассемблера com-программу, которая позволит вывести текущую дату (число, месяц, год) с использованием текстовых форм на трех языках - русском, английском и украинском.

Решение задачи: «Вывести текущую дату (число, месяц, год)»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model tiny
  4.  
  5. .code
  6.  
  7.         org     100h
  8. main    proc
  9.  
  10.         jmp     start
  11.  
  12.         ;Данные
  13. Year    dw      0
  14. Month   dw      0
  15. Day     dw      0
  16.  
  17. English         label
  18.         dw      offset  EnJanuary
  19.         dw      offset  EnFebruary
  20.         dw      offset  EnMarch
  21.         dw      offset  EnApril
  22.         dw      offset  EnMay
  23.         dw      offset  EnJune
  24.         dw      offset  EnJuly
  25.         dw      offset  EnAugust
  26.         dw      offset  EnSeptember
  27.         dw      offset  EnOctober
  28.         dw      offset  EnNovember
  29.         dw      offset  EnDecember
  30.  
  31. Ukrainian       label
  32.         dw      offset  UkJanuary
  33.         dw      offset  UkFebruary
  34.         dw      offset  UkMarch
  35.         dw      offset  UkApril
  36.         dw      offset  UkMay
  37.         dw      offset  UkJune
  38.         dw      offset  UkJuly
  39.         dw      offset  UkAugust
  40.         dw      offset  UkSeptember
  41.         dw      offset  UkOctober
  42.         dw      offset  UkNovember
  43.         dw      offset  UkDecember
  44.  
  45. Russian         label
  46.         dw      offset  RuJanuary
  47.         dw      offset  RuFebruary
  48.         dw      offset  RuMarch
  49.         dw      offset  RuApril
  50.         dw      offset  RuMay
  51.         dw      offset  RuJune
  52.         dw      offset  RuJuly
  53.         dw      offset  RuAugust
  54.         dw      offset  RuSeptember
  55.         dw      offset  RuOctober
  56.         dw      offset  RuNovember
  57.         dw      offset  RuDecember
  58.  
  59. EnJanuary       db      'January', '$'
  60. EnFebruary      db      'February', '$'
  61. EnMarch         db      'March', '$'
  62. EnApril         db      'April', '$'
  63. EnMay           db      'May', '$'
  64. EnJune          db      'June', '$'
  65. EnJuly          db      'July', '$'
  66. EnAugust        db      'August', '$'
  67. EnSeptember     db      'September', '$'
  68. EnOctober       db      'October', '$'
  69. EnNovember      db      'November', '$'
  70. EnDecember      db      'December', '$'
  71.  
  72. UkJanuary       db      'Сiчень', '$'
  73. UkFebruary      db      'Лютий', '$'
  74. UkMarch         db      'Березень', '$'
  75. UkApril         db      'Квiтень', '$'
  76. UkMay           db      'Травень', '$'
  77. UkJune          db      'Червень', '$'
  78. UkJuly          db      'Липень', '$'
  79. UkAugust        db      'Серпень', '$'
  80. UkSeptember     db      'Вересень', '$'
  81. UkOctober       db      'Жовтень', '$'
  82. UkNovember      db      'Листопад', '$'
  83. UkDecember      db      'Грудень', '$'
  84.  
  85. RuJanuary       db      'января', '$'
  86. RuFebruary      db      'февраля', '$'
  87. RuMarch         db      'марта', '$'
  88. RuApril         db      'апреля', '$'
  89. RuMay           db      'мая', '$'
  90. RuJune          db      'июня', '$'
  91. RuJuly          db      'июля', '$'
  92. RuAugust        db      'августа', '$'
  93. RuSeptember     db      'сентября', '$'
  94. RuOctober       db      'октября', '$'
  95. RuNovember      db      'ноября', '$'
  96. RuDecember      db      'декабря', '$'
  97.  
  98. CrLf            db      0Dh, 0Ah, '$'
  99.  
  100. start:
  101.         ;программа
  102.         ;получение текущей даты
  103.         mov     ah,     2Ah
  104.         int     21h
  105.         mov     Year,   cx
  106.         mov     ax,     0
  107.         mov     al,     dh
  108.         mov     Month,  ax
  109.         mov     al,     dl
  110.         mov     Day,    ax
  111.         ;вывод текущей даты в формате 'DD.MM.YYYY'
  112.         mov     ax,     Day
  113.         call    OutInt
  114.         mov     al,     '.'
  115.         int     29h
  116.         mov     ax,     Month
  117.         call    OutInt
  118.         mov     al,     '.'
  119.         int     29h
  120.         mov     ax,     Year
  121.         call    Show_AX
  122.         mov     ah,     09h
  123.         lea     dx,     CrLf
  124.         int     21h
  125.         ;вывод текущей даты по-английски
  126.         lea     bx,     English
  127.         call    ShowDate
  128.         ;вывод текущей даты по-украински
  129.         lea     bx,     Ukrainian
  130.         call    ShowDate
  131.         ;вывод текущей даты по-русски
  132.         lea     bx,     Russian
  133.         call    ShowDate
  134.  
  135.         int     20h
  136. main    endp
  137.  
  138. ;Показывает дату на выбранном языке
  139. ;на входе
  140. ; bx - адрес таблицы адресов строк
  141. ShowDate        proc
  142.         push    ax
  143.         push    bx
  144.         push    dx
  145.         mov     ax,     Day
  146.         call    OutInt
  147.         mov     al,     ' '
  148.         int     29h
  149.         mov     ax,     Month   ;получаем адрес строки из таблицы по номеру месяца
  150.         dec     ax
  151.         add     bx,     ax
  152.         add     bx,     ax
  153.         mov     ah,     09h
  154.         mov     dx,     [bx]
  155.         int     21h
  156.         mov     al,     ' '
  157.         int     29h
  158.         mov     ax,     Year
  159.         call    Show_AX
  160.         mov     ah,     09h
  161.         lea     dx,     CrLf
  162.         int     21h
  163.  
  164.         pop     dx
  165.         pop     bx
  166.         pop     ax
  167.         ret
  168. ShowDate        endp
  169.  
  170. ; выводит число из регистра AX на экран
  171. ; входные данные:
  172. ; ax - число для отображения
  173. OutInt proc
  174.         push    ax
  175.         push    dx
  176.         aam
  177.         add     ax,3030h
  178.         mov     dl,ah
  179.         mov     dh,al
  180.         mov     ah,02
  181.         int     21h
  182.         mov     dl,dh
  183.         int     21h
  184.         pop     dx
  185.         pop     ax
  186.         ret
  187. OutInt endp
  188.  
  189. ; выводит число из регистра AX на экран
  190. ; входные данные:
  191. ; ax - число для отображения
  192. Show_AX proc
  193.         push    ax
  194.         push    bx
  195.         push    cx
  196.         push    dx
  197.         push    di
  198.  
  199.         mov     cx, 10
  200.         xor     di, di          ; di - кол. цифр в числе
  201.  
  202.         ; если число в ax отрицательное, то
  203.         ;1) напечатать '-'
  204.         ;2) сделать ax положительным
  205.         or      ax, ax
  206.         jns     @@Conv
  207.         push    ax
  208.         mov     dx, '-'
  209.         mov     ah, 2           ; ah - функция вывода символа на экран
  210.         int     21h
  211.         pop     ax
  212.  
  213.         neg     ax
  214.  
  215. @@Conv:
  216.         xor     dx, dx
  217.         div     cx              ; dl = num mod 10
  218.         add     dl, '0'         ; перевод в символьный формат
  219.         inc     di
  220.         push    dx              ; складываем в стэк
  221.         or      ax, ax
  222.         jnz     @@Conv
  223.         ; выводим из стэка на экран
  224. @@Show:
  225.         pop     dx              ; dl = очередной символ
  226.         mov     ah, 2           ; ah - функция вывода символа на экран
  227.         int     21h
  228.         dec     di              ; повторяем пока di<>0
  229.         jnz     @@Show
  230.  
  231.         pop     di
  232.         pop     dx
  233.         pop     cx
  234.         pop     bx
  235.         pop     ax
  236.         ret
  237. Show_AX endp
  238.  
  239. end     main

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

Этот код на языке Assembler предназначен для вывода текущей даты в формате 'DD.MM.YYYY'. Он использует функции BIOS для получения даты и времени, а затем выводит их на экран. Код также включает в себя подпрограммы для вывода чисел и строк на экран.

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


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

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

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

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

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

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