Ввод последовательности кодов символов с клавиатуры - 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
Объяснение кода листинга программы
В этом коде представлена простая программа на языке ассемблера, которая считывает последовательность символов, вводимых пользователем, и выводит её в консоль. Программа работает следующим образом:
- Переменная
zapros
содержит строку, которая выводится на экран при запуске программы. - Цикл
nextnum
считывает каждый символ, вводимый пользователем, и проверяет его на корректность. Если введен неверный символ, выводится сообщение об ошибке. - Если символ является цифрой от 0 до 9, он преобразуется в числовое значение, умножается на 10 и добавляется к сумме.
- Если введен символ
enter
, цикл завершается. - Если введен неверный символ, цикл продолжается.
- Переменная
caret
содержит символ, который выводится на экран после каждого введенного числа. - Переменная
error
содержит сообщение об ошибке, которое выводится на экран, если введен неверный символ. - После ввода каждого числа программа выводит символ
caret
. - Если введен неверный символ, программа выводит два символа
caret
и сообщение об ошибке. - После ввода всех чисел программа завершается.