Как вывести ASCII-код введенного с клавиатуры символа? - Assembler

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

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

Вот мой код, как мне сделать, чтобы когда я нажимал клавишу, выводился ее аски-символ? Я так понимаю, в AL лежит сам символ.
c_s segment
assume cs:c_s
begin:
mov ah,0h   ;функция установки режима
mov al,3h   ;номер режима
int 10h     ;прерывание
 
m1: 
mov ah,8h ; функция считывания символа с клавиатуры
int 21h ; считывание одного символа с клавиатуры (без эха)
cmp al,27 ;считанный символ помещается в AL
 
mov ah,9h ;функция вывода символа на экран, символ уже в AL
mov bh,0 ;номер дисплейной страницы
mov bl,15 ;цвет символа белый
mov cx,1 ;кол-во символов
int 10h
je m2 ;если была нажата клавиша "Esc", то на m2
 
jmp m1 ;иначе, снова запрашивается ввод символа (на m1)
 
m2: 
mov ah,4ch
int 21h
c_s ends
end begin

Решение задачи: «Как вывести ASCII-код введенного с клавиатуры символа?»

textual
Листинг программы
.model compact
.stack
.code
begin:
    mov ah,0h       ;функция установки режима
    mov al,3h       ;номер режима
    int 10h     ;прерывание
 
    mov bx,0Fh      ;BH - номер дисплейной страницы, BL - цвет символа белый
m1: xor ax,ax       ; функция считывания символа с клавиатуры
    int 16h     ; считывание одного символа с клавиатуры (без эха)
    mov ah,0Eh      ;функция вывода символа на экран, символ уже в AL
    int 10h
    cmp al, 27      ;если HE была нажата клавиша "Esc", то на m1
    pushf
    call    hexen
    mov al,20h
    int 29h
    popf
    jne m1
 
    mov ah,4ch
    int 21h
hexen:  
    aam 16
    mov dx,ax
    xchg    ah,al
    call    nibble
    mov ax,dx
nibble: and al, 0Fh
    Add Al, 90h
    Daa
    Adc Al, 40h
    Daa
    int 29h
    ret
    end begin

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

  1. .model compact - устанавливает модель памяти, в данном случае компактную
  2. .stack - указывает на то, что далее будет определён стек подпрограмм
  3. .code - указывает на то, что далее будет определён код программы
  4. begin: - метка начала программы
  5. mov ah,0h - функция установки режима
  6. mov al,3h - номер режима
  7. int 10h - прерывание
  8. mov bx,0Fh - BH - номер дисплейной страницы, BL - цвет символа белый
  9. m1: xor ax,ax - функция считывания символа с клавиатуры
  10. int 16h - считывание одного символа с клавиатуры (без эха)
  11. mov ah,0Eh - функция вывода символа на экран, символ уже в AL
  12. int 10h - вывод символа на экран
  13. cmp al, 27 - если нажата клавиша Esc, то переход на m1
  14. pushf - сохранение флага в стеке
  15. call hexen - вызов подпрограммы hexen
  16. mov al,20h - установка AL = 20h
  17. int 29h - перевод строки
  18. popf - восстановление флага из стека
  19. jne m1 - переход на m1, если флаг не равен нулю
  20. mov ah,4ch - функция завершения работы программы
  21. int 21h - завершение работы программы
  22. hexen: - метка подпрограммы
  23. aam 16 - десятичное значение переводится в шестнадцатеричное
  24. mov dx,ax - DX получает значение AX
  25. xchg ah,al - AH и AL меняются местами
  26. call nibble - вызов подпрограммы nibble
  27. mov ax,dx - AX получает значение DX
  28. nibble: and al, 0Fh - AL сдвигается вправо на 4 бита и AND с 0Fh
  29. Add Al, 90h - к AL добавляется 90h
  30. Daa - флаг переноса устанавливается в 0
  31. Adc Al, 40h - к AL добавляется 40h
  32. Daa - флаг переноса устанавливается в 0
  33. int 29h - перевод строки
  34. ret - возврат в предыдущую подпрограмму
  35. end begin - метка конца программы

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


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

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

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