Ввод последовательности кодов символов с клавиатуры - Assembler

Узнай цену своей работы

Формулировка задачи:

Подсобите пожалуйста Написать программу, выполняющую ввод последовательности кодов символов с клавиатуры, обработку кодов и вывод на экран результирующей последовательности. Программа должна включать в себя: • ввод последовательности кодов символов с клавиатуры; • обработку кодов в соответствии с заданием; • вывод на экран результирующей последовательности • вывод на экран даты создания BIOS (Aф=0FFFF5h) ВВОД
ESTR1 proc near
enterch:
        mov     dl, '>'
        mov     ah, 02h
        int     21h
        mov     cx, 3333
        mov     bx, offset first_str_rec
ech:
        mov     ah, 01h
        int     21h 
                cmp al,13
                jle quit
        mov     byte ptr [bx],al
        inc     bx
        loop    ech
quit:
        ret
ESTR1 endp
Вывод:
TITLE helcom4.asm
.model medium
.data
message1 DB "Vvedit slovo!", 0dh, 0ah, "$"
message2 db "Vuvid na ekran", 0dh, 0ah, "$"
bufer db 3334
    len db 0
    string db "$$$$$" 
.code
start:
mov ax, @data
mov ds, ax
mov es, ax
    mov ah, 9       ; 
    mov dx, OFFSET message1 ; 
    int 21h
    mov       ah,0Ah    
    mov       dx, offset string
        int       21h           ; 
    mov ah, 9h      ; 
    mov dx, OFFSET message2 ; 
    int 21h
mov ah, 9h
mov dx, OFFSET bufer
int 21h
    mov ax, 4C00h; 
    int 21h         ; 
.stack
stk db 256 dup ("stack")
end start ;
Дата создания
mov ah,9
mov dx,offset message db "10/01/2014" ,'$';
int 21h

Решение задачи: «Ввод последовательности кодов символов с клавиатуры»

textual
Листинг программы
; ввод символов
input PROC
 
 mov dx,offset zapros
 mov ah,9
 int 21h
 
 
nextnum:
    
  
    mov ah,01h  ;вводим новый символ
    int 21h
 
    cmp al,2fh  ; если нажали enter то это конец числа 
    jl outp
    cmp al,30h  ; если введен неверный символ <0
    jl er
    cmp al,39h  ; если введен неверный символ >9
    ja er
   
    sub al,30h  ;делаем из введенного символа число
    xor ah,ah
    xchg ax,bx
    mov dx,0Ah  
    mul dx  ; умножаем на основание системы счисления = 10
    
    add bx,ax   ;и прибавляем новое = сумма
    jmp nextnum
 
er:
   
    mov dx,offset caret        ; caret   db  0Ah,0Dh,'$'
    mov ah,9
    int 21h
 
    mov dx,offset error        ; error   db  'Symbol not correct!$'
    mov ah,9
    int 21h
 
    mov dx,offset caret
    mov ah,9
    int 21h
 
    jmp nextnum
 
outp:
   
    ret
ENDP

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

В этом коде представлена простая программа на языке ассемблера, которая считывает последовательность символов, вводимых пользователем, и выводит её в консоль. Программа работает следующим образом:

  1. Переменная zapros содержит строку, которая выводится на экран при запуске программы.
  2. Цикл nextnum считывает каждый символ, вводимый пользователем, и проверяет его на корректность. Если введен неверный символ, выводится сообщение об ошибке.
  3. Если символ является цифрой от 0 до 9, он преобразуется в числовое значение, умножается на 10 и добавляется к сумме.
  4. Если введен символ enter, цикл завершается.
  5. Если введен неверный символ, цикл продолжается.
  6. Переменная caret содержит символ, который выводится на экран после каждого введенного числа.
  7. Переменная error содержит сообщение об ошибке, которое выводится на экран, если введен неверный символ.
  8. После ввода каждого числа программа выводит символ caret.
  9. Если введен неверный символ, программа выводит два символа caret и сообщение об ошибке.
  10. После ввода всех чисел программа завершается.

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

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