Программирование на Ассемблере
Просматривая результат, Вы обнаружите, что программа сработала неправильно
- вместо строки \"12345678\" выходной буфер будет содержать \"56785678\".
Попробуйте найти ошибку!
А ошибка здесь довольно типичная: в команде прокрутки не указан суффикс .L.
Ассемблер воспринимает размер команды \"rol\" как .W (по умолчанию), и в
результате сдвигалось только младшее слово. Поэтому мы получили одни и те
же значения дважды. Замените \"rol\" на \"rol.l\" и программа будет работать
правильно.
Эта ошибка наводит на мысль о том, как легко можно переделать эту программу
для конвертирования 16-битных чисел: нужно просто опустить суффикс \".l\" в
команде прокрутки и поменять начальное значение счетчика цикла с 7 на 3.
Вот и все.
И в завершении попробуйте изменить программу так, чтобы она переводила
шестнадцатеричные числа в ASCII-строки из шести цифр. Теперь рассмотрим задачу посложнее, а именно - перевод четырехразрядных
десятичных чисел (0-9999) в ASCII-представление. 4.3.2. Перевод десятичных чисел в ASCII-представлиние. В случае десятичных чисел механизм разбиения на битовые группы не работает,
поэтому нам понадобится другой метод.
Рассмотрим подробнее структуру десятичных чисел. В четырехразрядном числе
самый старший разряд задает тысячи, следующий - сотни, итд.
Отсюда видно, что если Вы разделите исходное число на 1000, то в результате
как раз получится значение старшего разряда этого числа. Если Вы теперь
разделите остаток на 100, то получите уже разряд сотен, а разделив
полученный остаток на 10 - разряд десятков. В качестве значения разряда
единиц нужно просто взять остаток последнего деления (на 10). Реализуюшая этот метод программа будет выглядеть так: main:
lea buffer,A0 ;адрес буфера - в A0
move #1234,D1 ;исходное десятичное число
bsr.s deci_4 ;вызов конвертора
illegal ;место контрольной точки deci_
|