Составить программу ввода символов с клавиатуры - Assembler
Формулировка задачи:
Составить программу ввода символов с клавиатуры. Вывести полученные символы на дисплей в режиме мигания с периодом 1 секунда в заданную позицию, вводимую с клавиатуры. Прерывание программы по нажатию клавиш Left –Shift.
Решение задачи: «Составить программу ввода символов с клавиатуры»
textual
Листинг программы
- TITLE PROGNAME (EXE) ; вызов программы
- STACKSG SEGMENT PARA STACK 'Stack'
- DW 32 DUP(?)
- STACKSG ENDS
- DATASG SEGMENT PARA 'Data'
- BMAX DB 3
- BSize DB ?
- BContent: ;
- MESPOS DB 'Введите номер строки:','$'
- MESPOS2 DB 'Введите номер столбца:','$'
- err_msg DB "Ошибка ввода"
- POSX DB 0 ;Номер столбца ввода
- POSY DB 0 ;Номер строки ввода
- EN DB 'Введите строку*: ','$'
- STROKA DB 20 DUP ('$') ;мигающая строка
- Timer DW 1000
- DATASG ENDS
- CODESG SEGMENT PARA 'Code'
- BEGIN PROC FAR
- ASSUME CS:CODESG, DS:DATASG, SS:STACKSG
- PUSH DS
- XOR AX,AX ; запись в стек
- PUSH AX ; нулевого адреса
- MOV AX,DATASG ; засылка адреса
- MOV DS,AX ; DATASG в регистр DS
- ;Очистка экрана
- MOV AX,0600H
- MOV BH,07
- MOV CX,0000
- MOV DX,184FH
- INT 10H
- ;Установка курсора в левый верхний угол
- MOV AH,02
- MOV BH,00
- MOV DH,00
- MOV DL,00
- INT 10H
- ;Вывод приглашения номер строки
- MOV AH,09
- LEA DX,MESPOS
- INT 21H
- ;Ввод позиции: номера строки
- CALL VVODPOS
- MOV POSY,AL
- mov AX,0600H ;Очистка экрана
- MOV BH,07
- MOV CX,0000
- MOV DX,184FH
- INT 10H
- ; Вывод приглашения номер столбца
- MOV AH,09
- MOV AL,00
- LEA DX,MESPOS2
- INT 21H
- ;Ввод позиции: номера столбца
- CALL VVODPOS
- MOV POSX,AL
- mov AX,0600H ;Очистка экрана
- MOV BH,07
- MOV CX,0000
- MOV DX,184FH
- INT 10H
- ; вывод "Введите строку: "
- MOV AH,09
- LEA DX,EN
- INT 21H
- ;Ввод строки
- MOV AH,3FH
- MOV BX,00
- MOV CX,20
- LEA DX,STROKA
- INT 21H
- ;Очистка экрана
- mov AX,0600H
- MOV BH,07
- MOV CX,0000
- MOV DX,184FH
- INT 10H
- ;Установка позиции исходя из введенных данных
- LoopVivod:
- MOV AH,02
- MOV BH,00
- MOV DH,POSY
- MOV DL,POSX
- INT 10H
- ;Вывод мигающей строки
- MOV AH,09
- LEA DX,STROKA
- MOV BL,0F0H
- INT 21H
- .386
- xor al,al ; Аl - байт состояния клавиатуры 1
- mov ah,02h ;Проверка состояния клавиатуры перед
- int 16h ;Задержкой очистки
- bt ax,3 ;проверка 1-го бита
- JNZ ExitB ;Выход по нажатию клавиши Left Shift
- .8086
- mov CL,10 ; пауза на 1 секунду
- mov DX,Timer
- mov ah,86h
- int 15h
- mov AX,0600H ;Очистка экрана
- MOV BH,07
- MOV CX,0000
- MOV DX,184FH
- INT 10H
- mov CL,10 ; пауза на 1 секунду
- mov DX,Timer
- mov ah,86h
- int 15h ; задержка
- xor al,al ; Аl = 0
- mov ah,02h ;Проверка состояния клавиатуры перед
- int 16h ;Выводом строки
- cmp al,02h ;проверка 1-го бита
- JZ ExitB ;Выход по нажатию клавиши Left Shift
- ;Зацикливание, если не нажата Left Shift
- jmp LoopVivod
- ExitB: RET ; завершение программы
- BEGIN ENDP
- VVODPOS PROC NEAR
- ;Процедура буферизированного ввода с переводам в десятичное число,
- ;которое будет храниться в регистре АХ
- mov dx,offset BMAX
- mov ah,0Ah
- int 21h ; считать строку символов в буфер
- ; перевод числа в ASCII-формате из буфера в бинарное число в АХ
- xor di,di ; DI = 0 - номер байта в буфере
- XOR AX,AX ; АХ = 0 - текущее значение результата
- mov cl,BSIZE
- xor ch,ch
- xor bx,bx
- mov si,cx ; SI - длина буфера
- mov cl,10 ; CL = 10, множитель для MUL
- asc2hex:
- mov bl,byte ptr BCONTENT[di]
- sub bl,'0' ; цифра = код цифры - код символа "0",
- jb asc_error ; если код символа был меньше, чем код "0",
- cmp bl,9 ; или больше, чем "9",
- ja asc_error ; значит неправильно ввели, обнуляем позицию
- mul cx ; иначе: умножить текущий результат на 10,
- add ax,bx ; добавить к нему новую цифру,
- inc di ; увеличить счетчик
- cmp di,si ; если счетчик+1 меньше числа символов -
- jb asc2hex ; продолжить (счетчик считается от 0)
- RET ; возврат из подпрограммы
- asc_error:
- xor ax,ax ; обнулить позицию
- ret ; Возврат
- VVODPOS ENDP
- CODESG ENDS
- END BEGIN
Объяснение кода листинга программы
- Программа начинается с вывода приглашения
Введите номер строки:
$и
Введите номер столбца:$
. - Пользователю предлагается ввести номер строки и номер столбца.
- Если введенные данные некорректны (например, введено число больше 20), программа выведет сообщение об ошибке и запросит повторный ввод.
- После корректного ввода, программа выводит приглашение
Введите строку:
$`. - Пользователю предлагается ввести строку.
- Введенная строка выводится на экран.
- Если введенная строка некорректна (например, содержит недопустимые символы), программа выведет сообщение об ошибке и запросит повторный ввод.
- После корректного ввода, программа выводит приглашение
Введите строку:
$`. - Пользователю предлагается ввести строку.
- Программа завершается после ввода строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д