Программа для перевода 4-х разрядного двоичного числа в шестнадцатеричное на ассемблере - Assembler

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

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

Нужно написать программу перевода 4-х разрядного двоичного числа в шестнадцатеричное на ассемблере. У меня есть идеи как это должно выглядеть но написать не могу по этому набросков нет. Буду очень благодарен за помощь.

Решение задачи: «Программа для перевода 4-х разрядного двоичного числа в шестнадцатеричное на ассемблере»

textual
Листинг программы
.686
.MODEL FLAT, C
.STACK
.DATA
binStr BYTE "1100", 0
.CODE
hexer PROC
push ecx
push edx
lea edx, binStr
mov cl, byte ptr [edx]
xor eax, eax;
iter:
shl  ax, 1
cmp cl, 31h
jne next_digit
add ax, 1
next_digit:
add edx, 1
mov cl, byte ptr [edx]
test cl, cl
jnz iter
cmp ax, 10
jge add_hexik
add ax, 48
pop edx
pop ecx
retn
add_hexik: 
add ax, 55
pop edx
pop ecx
retn
hexer ENDP
END

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

Перевод 4-х разрядного двоичного числа в шестнадцатеричное на ассемблере:

  1. .686 - указание на модель процессора
  2. .MODEL FLAT, C - задание модели памяти
  3. .STACK - определение стека
  4. .DATA - определение области данных
  5. binStr BYTE 1100, 0 - инициализация строки с двоичным числом
  6. .CODE - определение области кода
  7. hexer PROC - определение процедуры
  8. push ecx - отправка регистра ecx в стек
  9. push edx - отправка регистра edx в стек
  10. lea edx, binStr - загрузка адреса строки в edx
  11. mov cl, byte ptr [edx] - получение первого символа строки в регистр cl
  12. xor eax, eax - инициализация регистра eax нулём
  13. iter: - метка цикла
  14. shl ax, 1 - сдвиг регистра ax вправо на один символ
  15. cmp cl, 31h - сравнение регистра cl с 31 (максимальным 4-х разрядным двоичным числом)
  16. jne next_digit - если регистр cl не равен 31, перейти к следующей итерации
  17. add ax, 1 - добавить единицу к регистру ax (для обработки последней цифры)
  18. next_digit: - метка после добавления цифры
  19. add edx, 1 - увеличение адреса строки на единицу
  20. mov cl, byte ptr [edx] - получение следующего символа строки в регистр cl
  21. test cl, cl - проверка регистра cl на ноль (для обработки последнего символа)
  22. jnz iter - если регистр cl не равен нулю, перейти к следующей итерации
  23. cmp ax, 10 - сравнение регистра ax с 10 (для обработки последней цифры)
  24. jge add_hexik - если регистр ax больше или равен 10, перейти к добавлению цифры
  25. add ax, 48 - добавить 48 к регистру ax (для обработки последней цифры)
  26. pop edx - выброс регистра edx из стека
  27. pop ecx - выброс регистра ecx из стека
  28. retn - возврат управления
  29. add_hexik: - метка для обработки последней цифры
  30. add ax, 55 - добавить 55 к регистру ax (для обработки последней цифры)
  31. pop edx - выброс регистра edx из стека
  32. pop ecx - выброс регистра ecx из стека
  33. retn - возврат управления
  34. hexer ENDP - окончание определения процедуры
  35. END - окончание программы

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


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

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

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