Вывод на экран сообщения - 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д