Как ввести сроку с клавиатуры и вывести её на экран? - Assembler
Формулировка задачи:
Как ввести сроку с клавиатуры и вывести её на экран?
Решение задачи: «Как ввести сроку с клавиатуры и вывести её на экран?»
textual
Листинг программы
.model small .386 dos_inp macro lbl, sz _ib_ struc max db sz ; наибольшая длина строки len db ? ; сюда вернется настоящая длина bf db sz dup(?) ; тут будет то, что ввели _ib_ ends lbl _ib_ <> endm .stack 100 .data req db 'Enter string:$' dos_inp buf, 80 .code start: mov ax, @data mov ds, ax mov es, ax ; Вывод на экран mov ah, 09h lea dx, req int 21h ; ввод строки mov ah, 0Ah lea dx, buf int 21h ;; дописываем "рублик" в хвост строки, нужно для int 21/ah=9 lea dx, buf.bf movzx bx, buf.len mov buf.bf[bx],'$' ; новая строка mov ax, 0D0Ah int 29h xchg al, ah int 29h ; Вывод на экран mov ah, 09h int 21h ; выход mov ah, 4Ch int 21h end start
Объяснение кода листинга программы
- Объявление переменных:
- buf - структура, в которой будет храниться введенная строка
- req - строка, которая выводится на экран для запроса ввода
- sz - размер буфера для ввода строки (в данном случае 80 символов)
- max - максимальная длина строки, которую можно ввести (также 80 символов)
- Использование макроса dos_inp для ввода строки с клавиатуры. Этот макрос использует библиотеку DOS для ввода строки и сохраняет ее в буфере buf.
- Вывод на экран запроса для ввода строки.
- Ввод строки с клавиатуры с помощью функции int 21h/ah=0Ah.
- Добавление символа
рубликв конец введенной строки. Это необходимо для корректного отображения строки при использовании функции int 21h/ah=9. - Вывод новой строки на экран с помощью функции int 29h/ah=0D0Ah.
- Вывод на экран введенной строки с помощью функции int 21h/ah=09h.
- Выход из программы с помощью функции int 21h/ah=4Ch.