Как перевести число в символ? - Assembler

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

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

Помогите с одной вещью ! Как перевести сумму двух чисел в ASCII строку числа этой суммы ? Буду благодарна за помощь

Решение задачи: «Как перевести число в символ?»

textual
Листинг программы
; преобразует число из регистра AX в строку
; входные данные:
; ax - число для отображения
; ds:dx - адрес для результирующей строки Pascal типа
UInt16ToStr      proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
        push    si
 
        mov     si,     dx
        mov     [si],   byte ptr 0      ;текущая длина строки равнв 0
 
        mov     cx, 10
        xor     di, di          ; di - кол. цифр в числе
 
 @@Conv:
        xor     dx, dx
        div     cx              ; dl = num mod 10
        add     dl, '0'         ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стек
        or      ax, ax
        jnz     @@Conv
        ; выводим из стека в строку
        mov     ax,     0
        mov     al,     [si]    ;в ячейку с длиной записываем длину строки
        add     [si],   di      ;с учётом возможного символа знака
        inc     si              ;устанавливаем указатель на первую свободную ячейку
        add     si,     ax
@@Show:
        pop     dx              ; dl = очередной символ
        mov     [si],   dl
        inc     si
        dec     di              ; повторяем пока di<>0
        jnz     @@Show
 
        pop     si
        pop     di
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
UInt16ToStr      endp

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

  1. Создается процедура под названием UInt16ToStr для преобразования числа из регистра AX в строку.
  2. Выполняется сохранение значений регистров в стеке: ax, bx, cx, dx, di, si.
  3. Устанавливается указатель SI на адрес строки. Устанавливается длина строки равной 0.
  4. Загружается значение 10 в регистр cx. Регистр di устанавливается в ноль, представляя количество цифр в числе.
  5. Выполняется деление числа в регистре ax на 10. Остаток от деления (цифра числа) увеличивается на значение символа '0' для перевода в символьный формат.
  6. Цифра кладется в стек. Проверяется, не закончилось ли число.
  7. Затем из стека извлекается цифра и записывается как символ в строку. Это повторяется, пока в стеке не кончатся цифры.
  8. После этого значения регистров восстанавливаются из стека.
  9. Процедура завершается командой ret.

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

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