Ввести число в 16-ричном виде, вывести соответствующий ASCII символ - Assembler

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

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

Добрый день. Помогите с заданием по ассемблеру. Завтра сдача. Не сдаст мой знакомый - отчислят. Сам я плохо в нем разбираюсь. Свое задание еле смог решить. Заранее спасибо. Ввести число в 16-ричном виде {пример для H}. Вывести соответствующий по таблице ASCII символ

Решение задачи: «Ввести число в 16-ричном виде, вывести соответствующий ASCII символ»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         CrLf    db      0Dh, 0Ah, '$'
  9.  
  10. .code
  11.  
  12. main    proc
  13.         mov     ax,     @data
  14.         mov     ds,     ax
  15.  
  16.         mov     cx,     2
  17. @@GetChar:
  18.         mov     ah,     08h
  19.         int     21h
  20.         ;запоминаем введённый символ, для дальнейшего вывода на экран
  21.         mov     dl,     al
  22.         ;фильтрация ввода
  23.         ; - это цифра?
  24.         cmp     al,     '0'
  25.         jb      @@GetChar
  26.         cmp     al,     '9'
  27.         jbe     @@CalcDigit
  28.         ; - это буква от 'A' до 'F'?
  29.         cmp     al,     'A'
  30.         jb      @@GetChar
  31.         cmp     al,     'F'
  32.         jbe     @@CalcChar
  33.         ; - это буква от 'a' до 'f'
  34.         cmp     al,     'a'
  35.         jb      @@GetChar
  36.         cmp     al,     'f'
  37.         ja      @@GetChar
  38.         ; преобразовать маленькую букву к большой
  39.         sub     al,     'a'-'A'
  40. @@CalcChar:
  41.         ;преобразовать большую букву к цифре от 10
  42.         sub     al,     'A'-'0'-0Ah
  43. @@CalcDigit:
  44.         ;преобразовать символ цифры к числу
  45.         sub     al,     '0'
  46.         ;умножить результирующее число на 16
  47.         shl     bl,     1
  48.         shl     bl,     1
  49.         shl     bl,     1
  50.         shl     bl,     1
  51.         ;добавить к нему новую цифру
  52.         or      bl,     al
  53.  
  54.         ;показать введённый символ
  55.         mov     ah,     02h
  56.         int     21h
  57.  
  58.         loop    @@GetChar
  59.  
  60.         ;вывести пробел
  61.         mov     ah,     02h
  62.         mov     dl,     ' '
  63.         int     21h
  64.  
  65.         ;вывести ASCII символ введённого кода
  66.         mov     ah,     02h
  67.         mov     dl,     bl
  68.         int     21h
  69.  
  70.         mov     ax,     4C00h
  71.         int     21h
  72. main    endp
  73.  
  74. end     main

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

  1. Объявление переменных:
    • CrLf: переменная типа db (байт), содержащая символы новой строки (0Dh - перенос каретки, 0Ah - перевод строки, $ - означает конец строки)
  2. Организация кода:
    • Объявление модели программы (.model small) и размера стека (.stack 100h)
  3. Организация сегментов данных и кода:
    • Объявление сегмента данных (.data) и сегмента кода (.code)
  4. Основная программа:
    • Объявление начала процедуры main
  5. Установка значения регистра DS:
    • Загрузка адреса сегмента данных в регистр AX
    • Загрузка значения регистра AX в регистр DS
  6. Цикл ввода символа:
    • Установка значения 2 в регистр CX (количество символов для ввода)
    • Метка @@GetChar для цикла
    • Ввод символа с помощью прерывания 21h с функцией 08h
    • Сохранение введенного символа в регистр DL
    • Проверка, является ли введенный символ цифрой ('0'-'9'), буквой от 'A' до 'F' или от 'a' до 'f'
    • Если введенный символ не соответствует условиям, происходит возврат к метке @@GetChar
    • Преобразование введенной буквы к заглавной, если она находится в диапазоне от 'a' до 'f'
    • Преобразование введенной буквы или цифры к числу
    • Умножение результата на 16 и добавление новой цифры
    • Вывод введенного символа на экран с помощью прерывания 21h и функции 02h
    • Уменьшение значения регистра CX на 1 с помощью инструкции loop @@GetChar для продолжения цикла
    • Вывод пробела на экран с помощью прерывания 21h и функции 02h
    • Вывод ASCII символа введенного кода с помощью прерывания 21h и функции 02h
    • Завершение программы с помощью прерывания 21h и функции 4Ch
  7. Завершение процедуры main
  8. Завершение программы end main

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


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

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

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы