Вывод ascii и scan кодов - Assembler
Формулировка задачи:
Всем привет. Надо занести в буфер клавиатуры вместо цифр их скан коды, а вместо букв их ascii код.
Проблемы с проверкой. И с самим преобразованием в нужные коды .
new_9int proc far push ax push bx push di push es sti call cs:[old_9int] mov ax,40h ; устанавливаем регистр es на область данных BIOS mov es,ax mov di,es:[01Ch] ; получаем указатель на голову cmp di,01Eh ; он указывает на начало буфера? jne minus2 ; если нет, то надо отнять 2 от хвоста mov di,03Ch jmp el ; если да, то указатель переместим на начало minus2: sub di,2 el:mov ax,ex:[di] ; считаем скан код из буфера клавиатуры cmp al,61h ; проверка, что буквы от z до a ; тут я вроде бы правильно проверяю. jz do ; если нет, то на do add al,30h ; прибавим ; преобразование ; не могу реализовать с цифрами do: cmp mov es:[di],ax ; запись в буфер do: cli mov al,20h ; пошлем EOI в контроллер прерываний out 20h,al pop es pop di pop bx pop ax iret new_9int endp
Решение задачи: «Вывод ascii и scan кодов»
textual
Листинг программы
ORG 100h JMP start mess0 DB 13,10,'ENTER STRING: $' start: ; MOV AH,9 ; MOV DX,mess0 ; INT 21h ; @input: ; XOR AX,AX ; ждём клавишу.. INT 16h ; CMP AL,13 ; ENTER указывает на выход! JE exit ; CMP AL,30h ; фильтр чисел JB @symbol ; меньше - буква CMP AL,39h ; JA @symbol ; больше - буква SHR AX,8 ; у цифры - сдвигаем скан-в-аскии (AH -> AL) CALL HEX2ASC ; выводим на экран в виде цифры MOV AL,',' ; запятая/разделитель INT 29h ; JMP @input ; @symbol: ; попалась буква! XOR AH,AH ; убираем скан-код.. CALL HEX2ASC ; ..и выводим на экран как цифру MOV AL,',' ; INT 29h ; JMP @input ; exit: ; INT 20h ; выход для COM-файла! ;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн HEX2ASC: ; Функция переводит числа в символы PUSHA ; Вход: АХ = число, BX = система счисления XOR CX,CX ; Выход: на экране MOV BX,16 ; isDiv: ; XOR DX,DX ; DIV BX ; PUSH DX ; INC CX ; OR AX,AX ; JNZ isDiv ; isOut: ; POP AX ; CMP AL,9 ; JLE noHex ; ADD AL,7 ; noHex: ; ADD AL,30h ; INT 29h ; LOOP isOut ; POPA ; RET ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д