Программа для перевода 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-х разрядного двоичного числа в шестнадцатеричное на ассемблере:
- .686 - указание на модель процессора
- .MODEL FLAT, C - задание модели памяти
- .STACK - определение стека
- .DATA - определение области данных
- binStr BYTE
1100
, 0 - инициализация строки с двоичным числом - .CODE - определение области кода
- hexer PROC - определение процедуры
- push ecx - отправка регистра ecx в стек
- push edx - отправка регистра edx в стек
- lea edx, binStr - загрузка адреса строки в edx
- mov cl, byte ptr [edx] - получение первого символа строки в регистр cl
- xor eax, eax - инициализация регистра eax нулём
- iter: - метка цикла
- shl ax, 1 - сдвиг регистра ax вправо на один символ
- cmp cl, 31h - сравнение регистра cl с 31 (максимальным 4-х разрядным двоичным числом)
- jne next_digit - если регистр cl не равен 31, перейти к следующей итерации
- add ax, 1 - добавить единицу к регистру ax (для обработки последней цифры)
- next_digit: - метка после добавления цифры
- add edx, 1 - увеличение адреса строки на единицу
- mov cl, byte ptr [edx] - получение следующего символа строки в регистр cl
- test cl, cl - проверка регистра cl на ноль (для обработки последнего символа)
- jnz iter - если регистр cl не равен нулю, перейти к следующей итерации
- cmp ax, 10 - сравнение регистра ax с 10 (для обработки последней цифры)
- jge add_hexik - если регистр ax больше или равен 10, перейти к добавлению цифры
- add ax, 48 - добавить 48 к регистру ax (для обработки последней цифры)
- pop edx - выброс регистра edx из стека
- pop ecx - выброс регистра ecx из стека
- retn - возврат управления
- add_hexik: - метка для обработки последней цифры
- add ax, 55 - добавить 55 к регистру ax (для обработки последней цифры)
- pop edx - выброс регистра edx из стека
- pop ecx - выброс регистра ecx из стека
- retn - возврат управления
- hexer ENDP - окончание определения процедуры
- END - окончание программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д