Консультация № 139233
05.06.2008, 22:16
0.00 руб.
0 2 2
Здравствуйте, Уважаемые эксперты!
Пожалуйста, покажите, как перевести шестнадцатеричное число в десятичное на ассемблере?
Спасибо!:-)

Обсуждение

Неизвестный
06.06.2008, 09:49
общий
это ответ
Здравствуйте, Alena De Lon!
делить последовательно на 10 и брать отстаток от деления на каждом шаге, пока целая часть не 0.
давно
Посетитель
7438
7205
06.06.2008, 10:42
общий
это ответ
Здравствуйте, Alena De Lon!
Например, так, как в программе в приложении


Приложение:
.model tiny .datastring db 8 dup (?) .code .startup mov ax,1234h ;= десятичному 4660 lea di, string ;адрес буфера, куда запишем строку call WordToString mov byte ptr [di],‘$‘ ;можно записать в конце символ $ для 9 ф-и lea dx, string ;выведем на экран mov ah, 9 int 21h .exit 0 ;выход в ДОС;Преобразуем слово из AX в строку по адресу [di];Строка заканчивается нулем, di указывает на конечный нульWordToString proc mov bx, 10 ;будем делить на 10 xor cx, cx ;счетчик цифрWS_calc_loop: ;цикл формирования цифр числа xor dx, dx ;делим DX:AX на BX div bx or dx, ‘0‘ ;остаток от деления превратим в очередной разряд числа push dx ;сохраним в стеке inc cx ;посчитаем test ax,ax ;проверим, есть ли еще разряды jnz WS_calc_loop ;есть - повторимWS_form_loop: ;цикл формирования строки pop ax ;восстановим очередную цифру stosb ;запишем loop WS_form_loop ;запишем все цифры mov byte ptr [di],0 ;завершим строку нулем retWordToString endp end
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа