Как перевести число в символ? - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д