Перевести число из eax в строку [TASM] - Assembler
Формулировка задачи:
Можно ли каким-нибудь образом перевести число из eax (в нём будет лежать сумма двух 5-значных чисел) в строку?
Решение задачи: «Перевести число из eax в строку [TASM]»
textual
Листинг программы
;преобразование числа из ах в десятичную строку по адресу es:di ;eax - число ;es:edi - адрес буфера приемника printdec proc mov ebx,10 ;основание системы xor ecx,ecx ;в сх будет количество цифр в десятичном числе @@m1a: xor edx,edx div ebx ;делим число на степени 10 push edx ;и сохраняем остаток от деления(коэффициенты при степенях) в стек inc ecx ;увеличиваем количество десятичных цифр числа test eax,eax ;после делия остался 0? jnz @@m1a ;если нет, продолжаем @@m2a: pop eax ;взять из стека цифру цисла add al,'0' ;преобразовываем цифру в ASCII символ stosb ;сохраняем в буфер loop @@m2a ;все цифры ret ;выход из подпрограммы printdec endp
Объяснение кода листинга программы
Код выполняет преобразование десятичного числа, хранящегося в регистре EAX, в строку, используя систему с основанием 10.
- Сначала устанавливается основание системы в регистре EBX равным 10.
- Затем инициализируется счётчик цифр в десятичном числе в регистре ECX равным 0.
- Далее выполняется цикл, который продолжается до тех пор, пока значение EAX не станет равным 0 после деления на 10 (то есть до тех пор, пока число не будет преобразовано в строку).
- Внутри цикла выполняется операция деления EAX на 10, результат которой сохраняется в регистре EDX (цифра числа).
- Затем в стек записывается EDX (для последующего восстановления числа при преобразовании строки обратно в число).
- Увеличивается счётчик цифр на 1.
- Проверяется, осталось ли в EAX значение после деления на 10 равным 0. Если нет, то продолжается цикл.
- Если же в EAX после деления на 10 остался 0, то из стека восстанавливается последняя цифра числа (цифра с наибольшим весом), к которой добавляется символ '0', преобразуя её в ASCII символ, и затем записывается в буфер с помощью команды STOS.
- Цикл продолжается до тех пор, пока все цифры числа не будут преобразованы в ASCII символы и записаны в буфер.
- В конце подпрограммы выполняется выход из программы с помощью команды RET.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д