Перевод 16-ричного кода в символ ASCII - Assembler

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

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

Здравствуйте! Не могу разобраться с выводом символа аски: пользователь вводит в строку допустим: "41 20 42 61", а программа должна выводить: "A Ba" (здесь уже не нужны пробелы между символами), причем пользователь ввел "41", нажал пробел, и программа стразу в другой строке вывела "А" и так далее с каждым символом. Пожалуйста, объясните как это можно реализовать в ассемблере Вот кусочек моего кода (там примерный алгоритм, я думаю так должно работать):
mov ky1,13
mov ky2,13
...
ReadSymbolHex:
mov ah,10h
int 16h
cmp cx,0
je NonDigitHex
HEXsymbol:
 
cmp al,32
je WriteSymbolHex
cmp al,'0'
jb NonDigitHex
cmp al,'9'
ja ReadSymbolHex
 
WriteSymbolHex:
mov [si],al
mov ah,0Eh
mov bh,0
int 10h
inc si
inc ky2 ; увеличиваем координату x во 2 строке, в которой и печатаем 16-ричные коды
 
; здесь проверяем нажал ли пользователь пробел,
; если да, значит выводим соответствующий коду символ
; в строку с координатами 8,ky1
; увеличиваем координату ky1 на 1
 
gotoYX 11,ky2
loop ReadSymbolHex

Решение задачи: «Перевод 16-ричного кода в символ ASCII»

textual
Листинг программы
     mov   ah,1
     int   21h
     and   al,0fh
     mov   bh,al
     int   21h
     and   al,0fh
     mov   bl,al
     shl   bl,4
     shr   bx,4
     xchg  ax,bx
     int   29h

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

  1. mov ah,1 - Переменная ah получает значение 1.
  2. int 21h - Выполняется функция 21h (часто используется для вывода текста на экран).
  3. and al,0fh - Переменная al получает значение 0fh (всего 4 бита, от 0 до 0xf).
  4. mov bh,al - Переменная bh получает значение переменной al.
  5. int 21h - Выполняется функция 21h.
  6. and al,0fh - Переменная al получает значение 0fh.
  7. mov bl,al - Переменная bl получает значение переменной al.
  8. shl bl,4 - Сдвиг значения переменной bl на 4 бита вправо (на 4 позиции увеличивается значение).
  9. shr bx,4 - Сдвиг значения регистра bx на 4 бита влево (на 4 позиции уменьшается значение).
  10. xchg ax,bx - Обмен значений между регистрами ax и bx.
  11. int 29h - Выполняется функция 29h (часто используется для ввода символа с клавиатуры).

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


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

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

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