Вывод на экран сообщения - Assembler

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

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

Написать программу, которая выводит на экран сообщение «Enter string:", а затем предлагает пользователю ввести строку символов (макс. 50). При этом после нажатия клавиши символ должен сразу выводиться на экран. Если в процессе ввода пользователь нажмет ENTER или введет 50 символов, то программа должна вывести на экран сообщение «Your string:" и в дальнейшем введенный пользователем строку, после чего завершить работу. Если в процессе ввода пользователь нажмет ESC, то программа должна вывести на экран сообщение «Process was terminated» и завершить свою работу.

Решение задачи: «Вывод на экран сообщения»

textual
Листинг программы
  1. .model small
  2. .386
  3.  
  4. .data
  5. var db 50 dup(?)
  6. len equ $-var
  7. msg1 db 'Enter string: $'
  8. msg2 db 'Your string: $'
  9. msg3 db 'Process was terminated!$'
  10.  
  11. .stack
  12. db 255 dup(?)
  13.  
  14. .code
  15. start:
  16. mov ax,@data
  17. mov ds,ax
  18. mov es,ax
  19.  
  20. mov ah,09h
  21. lea dx,msg1
  22. int 21h
  23.  
  24. lea di,var
  25. mov cx,len
  26. input:
  27. mov ah,01h
  28. int 21h
  29.  
  30. cmp al,1Bh
  31. je bad
  32.  
  33. cmp al,0Dh
  34. je next
  35.  
  36. stosb
  37. loop input
  38.  
  39. next:
  40. mov ah,02h
  41. mov dl,0Ah
  42. int 21h
  43.  
  44. mov ah,02h
  45. mov dl,0Dh
  46. int 21h
  47.  
  48. mov ah,09h
  49. lea dx,msg2
  50. int 21h
  51.  
  52. lea si,var
  53. mov cx,len
  54. print:
  55. lodsb
  56.  
  57. cmp al,0Dh
  58. je exit
  59.  
  60. int 29h
  61. loop print
  62.  
  63. jmp exit
  64.  
  65. bad:
  66. mov ah,02h
  67. mov dl,0Ah
  68. int 21h
  69.  
  70. mov ah,02h
  71. mov dl,0Dh
  72. int 21h
  73.  
  74. mov ah,09h
  75. lea dx,msg3
  76. int 21h
  77.  
  78. exit:
  79. mov ah,4Ch
  80. mov al,00h
  81. int 21h
  82. end start

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

  1. Установка начального сегмента данных на регистр AX (mov ax,@data).
  2. Переменная len используется для хранения длины строки ввода, равной количеству байтов в массиве var (mov len, $-var).
  3. Вывод приглашения для ввода строки (mov ah,09h, lea dx, msg1, int 21h).
  4. Начало цикла ввода строки (mov di,var, mov cx,len, input:).
  5. Проверка на нажатие клавиши 1Bh (Carriage Return) или 0Dh (New Line) (cmp al,1Bh jne bad, cmp al,0Dh jne next).
  6. Запись символа ввода в массив var (stosb).
  7. Продолжение цикла до тех пор, пока не будет введен символ новой строки (loop input).
  8. Вывод сообщения об успешном вводе строки (mov ah,02h, mov dl,0Ah, int 21h, mov ah,02h, mov dl,0Dh, int 21h, mov ah,09h, lea dx, msg2, int 21h).
  9. Переменная si используется для хранения индекса в массиве var (mov si,var).
  10. Цикл вывода строки (print:).
  11. Проверка на нажатие клавиши новой строки (cmp al,0Dh jne print).
  12. Чтение символа из массива var (lodsb).
  13. Продолжение цикла до тех пор, пока не будет достигнут конец строки (loop print).
  14. Вывод сообщения об ошибке, если ввод некорректен (jmp bad).
  15. Завершение работы программы (mov ah,4Ch, mov al,00h, int 21h).
  16. Если вводимая строка корректна, программа завершается после вывода строки (jmp exit).

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


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

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

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

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

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

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