Написать комментарии к 2-ум программам - Assembler

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

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

Не могу разобраться с программами, писал не сам, очень не хватает комментариев, буду очень благодарен за их написание, заранее спасибо Первая программа, удаляет лишние пробелы со строки:
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
Вторая программа выводит дату из CMOS:
.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               ;указывается метка, с которой должна 
                        ;начаться выполняться программа

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

Комментарии к коду:

  1. Переменная Messd содержит строку-подсказку Current date: $.
  2. Переменная dt_ содержит строку с датой в формате dd-mm-yy hh:mm:ss.
  3. Процедура getdate считывает дату из постоянных (CMOS) часов реального времени и выводит её на консоль в формате dd-mm-yy.
  4. Процедура toasci преобразует BCD число в ASCII-формат, при этом меняя местами байты.
  5. В конце кода указана метка end start, с которой должна начаться выполняться программа.

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


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

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

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