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