Программирование на Ассемблере
Немногим сложнее оказывается и алгоритм для перевода чисел,
записанных в десятичной системе. 4.3.4. Преобразование ASCII-строк в десятичные числа. Здесь мы будем использовать метод, аналогичный предыдущему. Единственное
отличие состоит в том, что для сдвига десятичного числа на один разряд
влево нам придется использовать команду умножения на 10 (напомним, что в
предыдущем примере мы обошлись командой lsl). Программа будет выглядеть так: ;(4.3.4) decimal-conv
decin: ;тест конвертора десятичных чисел moveq #0,D1 ;обнуляем D1
lea string(PC),A0 ;загружаем указатель строки
bsr.s decinloop ;вызов конвертора
illegal ;для отладки decinloop: ;подпрограмма конвертирования
;десятичных чисел
bsr.s digitin ;чтение цифры
cmp #10,D0 ;проверка на корректность
bcc.s decinok ;ошибка - конец обработки
mulu #10,D1 ;смещаем результат на один разряд
add D0,D1 ;добавляем следующую цифру
bra.s decinloop ;цикл
decinok:
rts ;возврат digitin: ;преобразование кода цифры
moveq #0,D0 ;очищаем весь D0
move.b (A0)+,D0 ;извлекаем очередную цифру, перемещаем
;указатель
sub #\'0\',D0 ;вычитаем код символа \'0\'
rts ;все string: dc.b \'123456\',0 ;ASCII-запись десятичного числа для
;конвертирования end Загрузите эту программу в отладчик и выполните в пошаговом режиме, наблюдая
за содержимым регистра D1.
Обратите внимание на то, что эта программа может работать только с числами
не больше 655350.
|