Не получается разобраться в экзаменационном задании - Assembler

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

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

Привет всем! Не удается понять смысл работы программы. Т.е. понятно, что программа нужна для вывода символов на определенно настроенный экран, но вот логику работы программы уловить не получается. Сам код:
use16
 
org 100h
jmp start
LABEL BUFFER BYTE
LONG db ? ;Текущая длина строки
BASELONG DB 99 DUP('') ;Длина буффера
MAXLONG DB 99 ;Максимальная длина буффера
prompt db 'TEXT?','$'
start:
call Q10CLR ;Настройка параметров экрана
a20:
mov dx,0000
call Q20CURS  ;Установка курсора
call B10PRMP
call D10INPT  ;Непосредственно ввод
 
call Q10CLR   ;
cmp [LONG],00
je a30
call E10CODE
call F10CENT
 
MOV SI,BASELONG
MOV AH,0EH
MOV AL,[SI]
MOV BH,00
MOV CX,99
INT 16H
a30:
int 20h
 
B10PRMP:
mov ah,40h     ;Видеобуффер
mov dx,prompt  ;Загружаем 
int 21h
ret
 
D10INPT:
MOV AH,0AH    ;Ввод строки
MOV DX,BASELONG  ;Загрузка буффера  клавиатуры
INT 21H
RET
 
E10CODE:
MOV BH,00
MOV BL,[LONG]
MOV [BASELONG+BX],'$'
RET
 
F10CENT:
MOV DL,[LONG]
SHR DL,1
NEG DL
ADD DL,40
MOV DH,12
 
MOV AH,09H
MOV DX,BASELONG
INT 21H
RET
 
Q10CLR:
MOV AX,0600H
MOV BH,100
MOV CX,0000
MOV DX,184FH
INT 10H
RET
 
Q20CURS:
MOV AH,02
MOV BH,100
INT 10H
RET
Прошу помощи конкретно в описании работы программы, и ее комментировании. Также привожу текст задания: "Написать программу ввода строки с консоли. Перед вызовом, аргумент функции Buffer должен указывать на массив, размер которого должен быть достаточным для ввода строки, заверш. символом "Enter" и двух байтов. Первый байт указывает на максимальный размер строки, второй реальный размер строки. Сама строка должна завершаться символами NL - новая строка. LF - перевод строки и нулем"

Решение задачи: «Не получается разобраться в экзаменационном задании»

textual
Листинг программы
org  100h
jmp  start
 
mes0    db   13,10,'Type string: $'
mes1    db   13,10,'--------------------'
        db   13,10,'Press any key...$'
 
label   buffer byte         ; буфер для ввода строки fn.0Ah
max     db   80             ;
len     db   0              ;
string  db   80 dup(0)      ;
 
start:  mov   bh,0Ah        ; цвет символов (параметр для "Setup")
        call  setup         ; настройка экрана!
 
        xor   dx,dx         ; параметр (DH=строка,DL=колонка)
        call  setCursor     ; установка курсора! (не обязательна)
 
        mov   dx,mes0       ; адрес строки
        call  message       ; мессага (запрос на ввод строки)
 
        mov   dx,buffer     ; адрес буфера
        call  dosInput      ; ввод строки в буфер!
 
        xor   cx,cx         ;
        mov   cl,[len]      ; длина введённой строки
        mov   di,string     ; её адрес
        add   di,cx         ; перемещаемся в конец строки
        mov   ax,240Ah      ; что записывать: 0Ah,'$'
        stosw               ; запись в хвост строки!
 
        mov   dx,mes1       ; параметр..
        call  message       ;
        call  exit          ; выход!
 
;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
setup:  mov   ax,600h       ; прокрутить страницу!
        xor   cx,cx         ; левая позиция
        mov   dx,184fh      ; правая позиция
        int   10h           ;
        ret                 ;
;----------------------------------------------------------------------
setCursor:                  ;
        mov   ah,2          ; установить курсор!
        xor   bx,bx         ; страница(0)
        int   10h           ;
        ret                 ;
;----------------------------------------------------------------------
message:                    ;
        mov   ah,9          ; выдать строку!
        int   21h           ;
        ret                 ;
;----------------------------------------------------------------------
dosInput:                   ;
        mov   ah,0Ah        ; ввод строки в буфер!
        int   21h           ;
        ret                 ;
;----------------------------------------------------------------------
exit:   xor   ax,ax         ; ожинание клавиши..
        int   16h           ;
        int   20h           ; выход в DOS!
        ret                 ;

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

7   голосов , оценка 4.143 из 5
Похожие ответы