Как перевести число в символ? - 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
Объяснение кода листинга программы
- Создается процедура под названием
UInt16ToStr
для преобразования числа из регистра AX в строку. - Выполняется сохранение значений регистров в стеке:
ax
,bx
,cx
,dx
,di
,si
. - Устанавливается указатель SI на адрес строки. Устанавливается длина строки равной 0.
- Загружается значение 10 в регистр
cx
. Регистрdi
устанавливается в ноль, представляя количество цифр в числе. - Выполняется деление числа в регистре
ax
на 10. Остаток от деления (цифра числа) увеличивается на значение символа '0' для перевода в символьный формат. - Цифра кладется в стек. Проверяется, не закончилось ли число.
- Затем из стека извлекается цифра и записывается как символ в строку. Это повторяется, пока в стеке не кончатся цифры.
- После этого значения регистров восстанавливаются из стека.
- Процедура завершается командой
ret
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д