Перевести число из 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.

  1. Сначала устанавливается основание системы в регистре EBX равным 10.
  2. Затем инициализируется счётчик цифр в десятичном числе в регистре ECX равным 0.
  3. Далее выполняется цикл, который продолжается до тех пор, пока значение EAX не станет равным 0 после деления на 10 (то есть до тех пор, пока число не будет преобразовано в строку).
  4. Внутри цикла выполняется операция деления EAX на 10, результат которой сохраняется в регистре EDX (цифра числа).
  5. Затем в стек записывается EDX (для последующего восстановления числа при преобразовании строки обратно в число).
  6. Увеличивается счётчик цифр на 1.
  7. Проверяется, осталось ли в EAX значение после деления на 10 равным 0. Если нет, то продолжается цикл.
  8. Если же в EAX после деления на 10 остался 0, то из стека восстанавливается последняя цифра числа (цифра с наибольшим весом), к которой добавляется символ '0', преобразуя её в ASCII символ, и затем записывается в буфер с помощью команды STOS.
  9. Цикл продолжается до тех пор, пока все цифры числа не будут преобразованы в ASCII символы и записаны в буфер.
  10. В конце подпрограммы выполняется выход из программы с помощью команды RET.

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


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

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

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