Составить программу ввода символов с клавиатуры - 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

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

  1. Программа начинается с вывода приглашения Введите номер строки:$иВведите номер столбца: $.
  2. Пользователю предлагается ввести номер строки и номер столбца.
  3. Если введенные данные некорректны (например, введено число больше 20), программа выведет сообщение об ошибке и запросит повторный ввод.
  4. После корректного ввода, программа выводит приглашение Введите строку:$`.
  5. Пользователю предлагается ввести строку.
  6. Введенная строка выводится на экран.
  7. Если введенная строка некорректна (например, содержит недопустимые символы), программа выведет сообщение об ошибке и запросит повторный ввод.
  8. После корректного ввода, программа выводит приглашение Введите строку:$`.
  9. Пользователю предлагается ввести строку.
  10. Программа завершается после ввода строки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы