Вывод на экран сообщения - Assembler
Формулировка задачи:
Написать программу, которая выводит на экран сообщение «Enter string:", а затем предлагает пользователю ввести строку символов (макс. 50). При этом после нажатия клавиши символ должен сразу выводиться на экран. Если в процессе ввода пользователь нажмет ENTER или введет 50 символов, то программа должна вывести на экран сообщение «Your string:" и в дальнейшем введенный пользователем строку, после чего завершить работу. Если в процессе ввода пользователь нажмет ESC, то программа должна вывести на экран сообщение «Process was terminated» и завершить свою работу.
Решение задачи: «Вывод на экран сообщения»
textual
Листинг программы
.model small .386 .data var db 50 dup(?) len equ $-var msg1 db 'Enter string: $' msg2 db 'Your string: $' msg3 db 'Process was terminated!$' .stack db 255 dup(?) .code start: mov ax,@data mov ds,ax mov es,ax mov ah,09h lea dx,msg1 int 21h lea di,var mov cx,len input: mov ah,01h int 21h cmp al,1Bh je bad cmp al,0Dh je next stosb loop input next: mov ah,02h mov dl,0Ah int 21h mov ah,02h mov dl,0Dh int 21h mov ah,09h lea dx,msg2 int 21h lea si,var mov cx,len print: lodsb cmp al,0Dh je exit int 29h loop print jmp exit bad: mov ah,02h mov dl,0Ah int 21h mov ah,02h mov dl,0Dh int 21h mov ah,09h lea dx,msg3 int 21h exit: mov ah,4Ch mov al,00h int 21h end start
Объяснение кода листинга программы
- Установка начального сегмента данных на регистр AX (mov ax,@data).
- Переменная len используется для хранения длины строки ввода, равной количеству байтов в массиве var (mov len, $-var).
- Вывод приглашения для ввода строки (mov ah,09h, lea dx, msg1, int 21h).
- Начало цикла ввода строки (mov di,var, mov cx,len, input:).
- Проверка на нажатие клавиши 1Bh (Carriage Return) или 0Dh (New Line) (cmp al,1Bh jne bad, cmp al,0Dh jne next).
- Запись символа ввода в массив var (stosb).
- Продолжение цикла до тех пор, пока не будет введен символ новой строки (loop input).
- Вывод сообщения об успешном вводе строки (mov ah,02h, mov dl,0Ah, int 21h, mov ah,02h, mov dl,0Dh, int 21h, mov ah,09h, lea dx, msg2, int 21h).
- Переменная si используется для хранения индекса в массиве var (mov si,var).
- Цикл вывода строки (print:).
- Проверка на нажатие клавиши новой строки (cmp al,0Dh jne print).
- Чтение символа из массива var (lodsb).
- Продолжение цикла до тех пор, пока не будет достигнут конец строки (loop print).
- Вывод сообщения об ошибке, если ввод некорректен (jmp bad).
- Завершение работы программы (mov ah,4Ch, mov al,00h, int 21h).
- Если вводимая строка корректна, программа завершается после вывода строки (jmp exit).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д