Вывод на экран сообщения - 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

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

  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
Похожие ответы