Написать комментарии к 2-ум программам - Assembler
Формулировка задачи:
Не могу разобраться с программами, писал не сам, очень не хватает комментариев, буду очень благодарен за их написание, заранее спасибо
Первая программа, удаляет лишние пробелы со строки:
Вторая программа выводит дату из CMOS:
ASSUMe CS:CODE,DS:CODE,ES:CODE CODE segment org 100h start: mov di,offset startstring mov cx,0 foreverloop: mov ah,10h int 16h mov dl,al mov ah,2 int 21h mov [di],dl inc di cmp dl,'.' je outlrfwrwr inc cx jmp foreverloop outlrfwrwr: mov si,offset startstring mov di,offset endstring loopwerwtwty: mov ax,[si] cmp ax,2020h je nosigse mov [di],al inc di nosigse:inc si loop loopwerwtwty inc di push ax mov al,10 mov [di],al mov al,13 mov [di],al mov al,'$' mov [di],al pop ax mov ah,9 mov dx,offset endstring int 21h mov ah,10h int 16h int 20h startstring db 80 dup (?) endstring db 80 dup (?) CODE ends end start
.186 .model small .stack 100h .data Messd db "Current date: ","$" dt_ db ?,?,'-',?,?,'-',?,?,?,?, 0Ah, 0Dh, "$" .code start: mov ax, @data mov ds, ax mov ax,3 int 10h xor ax, ax xor dx,dx mov dx, offset Messd call showmess xor dx,dx call getdate mov ah, 4Ch int 21h showmess proc mov ah,09h int 21h ret showmess endp toasci proc ror ax, 4 shr ah, 4 or ax,'00' ret toasci endp getdate proc xor ax, ax mov ah, 04h int 1Ah xor ah, ah mov al, dl call toasci mov word ptr dt_, ax xor ah, ah mov al, dh call toasci mov word ptr dt_+3, ax xor ah, ah mov al,ch call toasci mov word ptr dt_+6, ax xor ah, ah mov al, cl call toasci mov word ptr dt_+8, ax mov dx, offset dt_ call showmess ret getdate endp end start
Решение задачи: «Написать комментарии к 2-ум программам»
textual
Листинг программы
.model small ;модель памяти .386 ;процессор, для которого написана программа .data ;сегмент данных db 'BeginOfData$' Messd db 'Current date: $';строка-подсказка dt_ db ?,?,'-',?,?,'-',?,?,?,?,0Ah,0Dh,'$';строка с датой db 'EndOfData$' .stack ;сегмент стека db 256 dup(?) ;выделение памяти под стек .code ;сегмент кода start: ;метка, с которой должна начаться выполняться программа mov ax,@data ;используем промежуточный регистр ax mov ds,ax ;для инициализации сегмента данных ;т.к. запись напрямую в сегментный регистр запрещена mov ax,00h ;выбор видеорежима mov al,03h ;текстовый видеорежим 80*25 int 10h ;прерывание видеосервиса биос, ;чтобы функция выполнилась xor ax,ax ;обнуление регистра ax xor dx,dx ;обнуление регистра dx mov ah,09h ;функция вывода сообщения на консоль mov dx,offset Messd ;сообщение о текущей дате int 21h ;прерывание, чтобы функция выполнилась xor dx,dx ;обнуление регистра dx call getdate mov ah,4Ch ;функция выхода из программы mov al,00h ;код возврата int 21h ;прерывание, чтобы функция выполнилась getdate proc ;начало процедуры getdate mov ah,04h ;функция чтения даты из "постоянных" (CMOS) часов ;реального времени int 1Ah ;прерывание, чтобы функция выполнилась xor ah,ah ;обнуление регистра ah mov al,dl ;день в коде BCD call toasci ;вызов процедуры преобразования BCD числа (день недели), ;который находится в регистре ax, в ASCII-формат mov word ptr dt_,ax;запись дня недели в память xor ah,ah ;обнуление регистра ah mov al,dh ;месяц в коде BCD call toasci ;вызов процедуры преобразования BCD числа (месяц), ;который находится в регистре ax, в ASCII-формат mov word ptr dt_+3,ax;запись месяца в память xor ah,ah ;обнуление регистра ah mov al,ch ;столетие в коде BCD call toasci ;вызов процедуры преобразования BCD числа (столетие), ;который находится в регистре ax, в ASCII-формат mov word ptr dt_+6,ax;запись столетия в память xor ah,ah ;обнуление регистра ah mov al,cl ;год в коде BCD call toasci ;вызов процедуры преобразования BCD числа (год), ;который находится в регистре ax, в ASCII-формат mov word ptr dt_+8,ax;запись года в память mov ah,09h ;функция вывода строки на консоль mov dx,offset dt_;строка с текущей датой int 21h ;прерывание, чтобы функция выполнилась ret ;возврат из процедуры getdate endp ;конец процедуры getdate toasci proc ;начало процедуры toasci ;преобразовываем BCD число из упакованного формата ;в неупакованный формат ;к тому же меняем местами байты, т.к. после ;выхода из процедуры все число (слово) будет писаться в память ;(обратный порядок байт) ror ax,4 ;циклически сдвигаем регистр ax на четыре бита вправо shr ah,4 ;сдвигаем регистр ah на четыре бита or ax,'00' ;конвертируем цифры BCD числа в ASCII-коды ret ;возврат из процедуры toasci endp ;конец процедуры end start ;указывается метка, с которой должна ;начаться выполняться программа
Объяснение кода листинга программы
Комментарии к коду:
- Переменная
Messd
содержит строку-подсказкуCurrent date: $
. - Переменная
dt_
содержит строку с датой в форматеdd-mm-yy hh:mm:ss
. - Процедура
getdate
считывает дату изпостоянных
(CMOS) часов реального времени и выводит её на консоль в форматеdd-mm-yy
. - Процедура
toasci
преобразует BCD число в ASCII-формат, при этом меняя местами байты. - В конце кода указана метка
end start
, с которой должна начаться выполняться программа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д