Вывести текущую дату (число, месяц, год) - Assembler
Формулировка задачи:
Написать на языке ассемблера com-программу, которая позволит вывести текущую дату (число, месяц, год) с использованием текстовых форм на трех языках - русском, английском и украинском.
Решение задачи: «Вывести текущую дату (число, месяц, год)»
textual
Листинг программы
LOCALS .model tiny .code org 100h main proc jmp start ;Данные Year dw 0 Month dw 0 Day dw 0 English label dw offset EnJanuary dw offset EnFebruary dw offset EnMarch dw offset EnApril dw offset EnMay dw offset EnJune dw offset EnJuly dw offset EnAugust dw offset EnSeptember dw offset EnOctober dw offset EnNovember dw offset EnDecember Ukrainian label dw offset UkJanuary dw offset UkFebruary dw offset UkMarch dw offset UkApril dw offset UkMay dw offset UkJune dw offset UkJuly dw offset UkAugust dw offset UkSeptember dw offset UkOctober dw offset UkNovember dw offset UkDecember Russian label dw offset RuJanuary dw offset RuFebruary dw offset RuMarch dw offset RuApril dw offset RuMay dw offset RuJune dw offset RuJuly dw offset RuAugust dw offset RuSeptember dw offset RuOctober dw offset RuNovember dw offset RuDecember EnJanuary db 'January', '$' EnFebruary db 'February', '$' EnMarch db 'March', '$' EnApril db 'April', '$' EnMay db 'May', '$' EnJune db 'June', '$' EnJuly db 'July', '$' EnAugust db 'August', '$' EnSeptember db 'September', '$' EnOctober db 'October', '$' EnNovember db 'November', '$' EnDecember db 'December', '$' UkJanuary db 'Сiчень', '$' UkFebruary db 'Лютий', '$' UkMarch db 'Березень', '$' UkApril db 'Квiтень', '$' UkMay db 'Травень', '$' UkJune db 'Червень', '$' UkJuly db 'Липень', '$' UkAugust db 'Серпень', '$' UkSeptember db 'Вересень', '$' UkOctober db 'Жовтень', '$' UkNovember db 'Листопад', '$' UkDecember db 'Грудень', '$' RuJanuary db 'января', '$' RuFebruary db 'февраля', '$' RuMarch db 'марта', '$' RuApril db 'апреля', '$' RuMay db 'мая', '$' RuJune db 'июня', '$' RuJuly db 'июля', '$' RuAugust db 'августа', '$' RuSeptember db 'сентября', '$' RuOctober db 'октября', '$' RuNovember db 'ноября', '$' RuDecember db 'декабря', '$' CrLf db 0Dh, 0Ah, '$' start: ;программа ;получение текущей даты mov ah, 2Ah int 21h mov Year, cx mov ax, 0 mov al, dh mov Month, ax mov al, dl mov Day, ax ;вывод текущей даты в формате 'DD.MM.YYYY' mov ax, Day call OutInt mov al, '.' int 29h mov ax, Month call OutInt mov al, '.' int 29h mov ax, Year call Show_AX mov ah, 09h lea dx, CrLf int 21h ;вывод текущей даты по-английски lea bx, English call ShowDate ;вывод текущей даты по-украински lea bx, Ukrainian call ShowDate ;вывод текущей даты по-русски lea bx, Russian call ShowDate int 20h main endp ;Показывает дату на выбранном языке ;на входе ; bx - адрес таблицы адресов строк ShowDate proc push ax push bx push dx mov ax, Day call OutInt mov al, ' ' int 29h mov ax, Month ;получаем адрес строки из таблицы по номеру месяца dec ax add bx, ax add bx, ax mov ah, 09h mov dx, [bx] int 21h mov al, ' ' int 29h mov ax, Year call Show_AX mov ah, 09h lea dx, CrLf int 21h pop dx pop bx pop ax ret ShowDate endp ; выводит число из регистра AX на экран ; входные данные: ; ax - число для отображения OutInt proc push ax push dx aam add ax,3030h mov dl,ah mov dh,al mov ah,02 int 21h mov dl,dh int 21h pop dx pop ax ret OutInt endp ; выводит число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@Conv push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стэк or ax, ax jnz @@Conv ; выводим из стэка на экран @@Show: pop dx ; dl = очередной символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp end main
Объяснение кода листинга программы
Этот код на языке Assembler предназначен для вывода текущей даты в формате 'DD.MM.YYYY'. Он использует функции BIOS для получения даты и времени, а затем выводит их на экран. Код также включает в себя подпрограммы для вывода чисел и строк на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д