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

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

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

Привет всем! Не удается понять смысл работы программы. Т.е. понятно, что программа нужна для вывода символов на определенно настроенный экран, но вот логику работы программы уловить не получается. Сам код:
Листинг программы
  1. use16
  2. org 100h
  3. jmp start
  4. LABEL BUFFER BYTE
  5. LONG db ? ;Текущая длина строки
  6. BASELONG DB 99 DUP('') ;Длина буффера
  7. MAXLONG DB 99 ;Максимальная длина буффера
  8. prompt db 'TEXT?','$'
  9. start:
  10. call Q10CLR ;Настройка параметров экрана
  11. a20:
  12. mov dx,0000
  13. call Q20CURS ;Установка курсора
  14. call B10PRMP
  15. call D10INPT ;Непосредственно ввод
  16. call Q10CLR ;
  17. cmp [LONG],00
  18. je a30
  19. call E10CODE
  20. call F10CENT
  21. MOV SI,BASELONG
  22. MOV AH,0EH
  23. MOV AL,[SI]
  24. MOV BH,00
  25. MOV CX,99
  26. INT 16H
  27. a30:
  28. int 20h
  29. B10PRMP:
  30. mov ah,40h ;Видеобуффер
  31. mov dx,prompt ;Загружаем
  32. int 21h
  33. ret
  34. D10INPT:
  35. MOV AH,0AH ;Ввод строки
  36. MOV DX,BASELONG ;Загрузка буффера клавиатуры
  37. INT 21H
  38. RET
  39. E10CODE:
  40. MOV BH,00
  41. MOV BL,[LONG]
  42. MOV [BASELONG+BX],'$'
  43. RET
  44. F10CENT:
  45. MOV DL,[LONG]
  46. SHR DL,1
  47. NEG DL
  48. ADD DL,40
  49. MOV DH,12
  50. MOV AH,09H
  51. MOV DX,BASELONG
  52. INT 21H
  53. RET
  54. Q10CLR:
  55. MOV AX,0600H
  56. MOV BH,100
  57. MOV CX,0000
  58. MOV DX,184FH
  59. INT 10H
  60. RET
  61. Q20CURS:
  62. MOV AH,02
  63. MOV BH,100
  64. INT 10H
  65. RET
Прошу помощи конкретно в описании работы программы, и ее комментировании. Также привожу текст задания: "Написать программу ввода строки с консоли. Перед вызовом, аргумент функции Buffer должен указывать на массив, размер которого должен быть достаточным для ввода строки, заверш. символом "Enter" и двух байтов. Первый байт указывает на максимальный размер строки, второй реальный размер строки. Сама строка должна завершаться символами NL - новая строка. LF - перевод строки и нулем"

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

textual
Листинг программы
  1. org  100h
  2. jmp  start
  3.  
  4. mes0    db   13,10,'Type string: $'
  5. mes1    db   13,10,'--------------------'
  6.         db   13,10,'Press any key...$'
  7.  
  8. label   buffer byte         ; буфер для ввода строки fn.0Ah
  9. max     db   80             ;
  10. len     db   0              ;
  11. string  db   80 dup(0)      ;
  12.  
  13. start:  mov   bh,0Ah        ; цвет символов (параметр для "Setup")
  14.         call  setup         ; настройка экрана!
  15.  
  16.         xor   dx,dx         ; параметр (DH=строка,DL=колонка)
  17.         call  setCursor     ; установка курсора! (не обязательна)
  18.  
  19.         mov   dx,mes0       ; адрес строки
  20.         call  message       ; мессага (запрос на ввод строки)
  21.  
  22.         mov   dx,buffer     ; адрес буфера
  23.         call  dosInput      ; ввод строки в буфер!
  24.  
  25.         xor   cx,cx         ;
  26.         mov   cl,[len]      ; длина введённой строки
  27.         mov   di,string     ; её адрес
  28.         add   di,cx         ; перемещаемся в конец строки
  29.         mov   ax,240Ah      ; что записывать: 0Ah,'$'
  30.         stosw               ; запись в хвост строки!
  31.  
  32.         mov   dx,mes1       ; параметр..
  33.         call  message       ;
  34.         call  exit          ; выход!
  35.  
  36. ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
  37. setup:  mov   ax,600h       ; прокрутить страницу!
  38.         xor   cx,cx         ; левая позиция
  39.         mov   dx,184fh      ; правая позиция
  40.         int   10h           ;
  41.         ret                 ;
  42. ;----------------------------------------------------------------------
  43. setCursor:                  ;
  44.         mov   ah,2          ; установить курсор!
  45.         xor   bx,bx         ; страница(0)
  46.         int   10h           ;
  47.         ret                 ;
  48. ;----------------------------------------------------------------------
  49. message:                    ;
  50.         mov   ah,9          ; выдать строку!
  51.         int   21h           ;
  52.         ret                 ;
  53. ;----------------------------------------------------------------------
  54. dosInput:                   ;
  55.         mov   ah,0Ah        ; ввод строки в буфер!
  56.         int   21h           ;
  57.         ret                 ;
  58. ;----------------------------------------------------------------------
  59. exit:   xor   ax,ax         ; ожинание клавиши..
  60.         int   16h           ;
  61.         int   20h           ; выход в DOS!
  62.         ret                 ;

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


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

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

7   голосов , оценка 4.143 из 5

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

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

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