Пояснить код ассемблера - Assembler

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

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

Листинг программы
  1. ;Программа~преобразования двузначного шестнадцатеричного числа
  2. символьном виде в двоичное представление.
  3. ;Вход: исходное шестнадцатеричное число из двух цифр,
  4. ;вводится с клавиатуры.
  5. ;Выход: результат преобразования помещается в регистр dl.
  6. ;
  7. ; -----------------------------
  8. data segment para public "data"
  9. message db
  10. data ends
  11. stk segment stack
  12. db 256 dup ("?")
  13. stk ends
  14. code segment para public "code"
  15. main proc
  16. assume cs:code,ds:data,ss:stk
  17. mov ax,data
  18. mov ds,ax ;ax в ds
  19. mov ah,9
  20. mov dx,offset message
  21. int 21h
  22. xor ax,ax
  23. mov ah,1h
  24. int 21h
  25. mov dl,al
  26. sub dl,30h
  27. cmp dl,9h
  28. jle M1
  29. sub dl,7h
  30. M1:
  31. mov cl,4h
  32. shl dl,cl
  33. int 21h
  34. sub al,30h
  35. cmp al, 9h
  36. jle M2
  37. sub al,7h
  38. M2:
  39. add dl,al
  40. mov ax,4c00h
  41. int 21h
  42. main endp
  43. code ends
  44. end main
Ребят, начинаю только осваивать ассемблер, препод дал на самостоятельное обучение(!!!), сказал, что нужно пояснить каждую строчку как можно подробней, чтобы понять , что происходит! Буду очень благодарен, если поможете начинающему

Решение задачи: «Пояснить код ассемблера»

textual
Листинг программы
  1. data segment para public "data" ;начало сегмента данных
  2. message db 'Enter: $'  ;наша строка (приглашение для ввода двух символов с клавы)
  3. data ends   ;конец сегмента данных
  4.  
  5. stk segment stack ;начало сегмента стека
  6. db 256 dup ("?")  ;выделение памяти под стек
  7. stk ends          ;конец сегмента стека
  8.  
  9. code segment para public "code" ;начало сегмента кода
  10. main proc   ;начало процедуры
  11. assume cs:code,ds:data,ss:stk ;сопоставление сегментных регистров и сегментов
  12. mov ax,data  
  13. mov ds,ax   ;инициализация сегмента данных через промежуточный регистр ax
  14. mov ah,9    ;функция вывода сообщения на экран
  15. mov dx,offset message   ;адрес начала сообщения
  16. int 21h     ;прерывание, чтобы функция выполнилась
  17. xor ax,ax   ;обнуление регистра ax (здесь это не обязательно, можно удалить эту строку)
  18. mov ah,1h   ;функция ввода с клавиатуры символа с эхом
  19. int 21h     ;прерывание, чтобы функция выполнилась
  20.             ;ASCII-код введенного символа помещается в регистр al
  21. mov dl,al   ;помещаем ASCII-код введенного символа в регистр dl
  22. sub dl,30h  ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ
  23. cmp dl,9h   ;проверяем, действительно ли была нажата цифра
  24. jle M1      ;если была нажата цифра, то прыгаем на метку M1  
  25. sub dl,7h   ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
  26. M1:         ;метка M1
  27. mov cl,4h   ;один шестнадцатеричный символ занимает 4 бита (полубайт)  
  28. shl dl,cl   ;сдвигаем символ из младшего полубайта в старший  
  29. int 21h     ;вводим второй символ. прерывание, чтобы функция ввода выполнилась
  30. sub al,30h  ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ
  31. cmp al, 9h  ;проверяем, действительно ли была нажата цифра
  32. jle M2      ;если была нажата цифра, то прыгаем на метку M2
  33. sub al,7h   ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
  34. M2:         ;метка M2
  35. add dl,al   ;помещаем символ в младший полубайт
  36. mov ax,4c00h;функция выхода из программы. код возврата - ноль  
  37. int 21h     ;прерывание, чтобы функция выполнилась
  38. main endp   ;конец процедуры
  39. code ends   ;конец сегмента кода
  40. end main    ;указывается метка (процедура), с которой должна начаться выполняться программа

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

  1. Объяснение кода: Этот код на ассемблере написан для ввода двух символов с клавиатуры и вывода их в консоль.
  2. Список действий:
    • Инициализация сегмента данных через промежуточный регистр ax
    • Вывод сообщения на экран с помощью функции int 21h
    • Ввод первого символа с клавиатуры с эхом с помощью функции int 21h
    • Проверка, была ли нажата цифра или буква
    • Преобразование ASCII-кода в символ, если была нажата цифра
    • Дополнительное преобразование ASCII-кода буквы в символ, если была нажата буква
    • Ввод второго символа с клавиатуры с эхом с помощью функции int 21h
    • Проверка, была ли нажата цифра или буква
    • Преобразование ASCII-кода в символ, если была нажата цифра
    • Дополнительное преобразование ASCII-кода буквы в символ, если была нажата буква
    • Вывод двух символов в консоль с помощью функции int 21h
    • Выход из программы с помощью функции int 21h

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


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

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

14   голосов , оценка 4.143 из 5

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

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

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