У попередній статті ми розповіли про нове розширення системи команд «Еверест». Тепер розповімо про те, як ми реалізували це розширення на мові опису апаратури. Нижче показаний результат роботи шостого пункту меню - друк кількості тактів з моменту старту пристрої:
Алгоритм роботи досить простий - при натисканні на клавішу «цифра шість» на термінал виводиться час, отримане перетворенням даних з лічильника тактів. Для вирішення цього завдання були використані останні розширення системи команд.
Потім використовуємо счётік тактів, щоб вивести його інформацію про його стан в двох 32-х бітних словах:
Щоб не ускладнювати код, ще раз читаємо лічильник тактів. Відразу ж переводимо дані лічильника в секунди і зберігаємо в локальній змінній seconds_count_lo.
У цьому місці можна розслабитися і вивести повідомлення, не піклуючись про додаткове збереженні регістрів:
Далі слід магія перекладу секунд в дні, години, хвилини і ... секунди. Насправді ніякої магії тут немає - проста «сортіріовка» залишків від ділення:
У цьому місці, після виконання вищенаведеного фрагмента коду, в регістрі R0 знаходиться кількість днів, що минули з моменту старту прошивки. Години, хвилини і секунди збережені в пам'яті у вигляді локальних змінних, розміщених на стеку.
Далі йде висновок отриманих результатів. Зверніть увагу, що інструкція читання пам'яті з перевіркою прапорів використовується для виключення з виведення порожніх хвилин і годин. Власне, це і є тестоване розширення системи команд:
Так, цей код не можна назвати зразковим і можна витратити багато часу на його поліпшення, але своє завдання він виконав двічі - допоміг налагодити нові можливості і послужив матеріалом для цієї статті. Розмір згенерованого бінарного файлу склав 660 байт з яких 272 байта склав вищенаведений код і 388 байт бібліотечні функції - ділення і роботи з терміналом.
Якщо до прочитання цієї статті ви писали на якомусь асемблері, то, швидше за все, зараз ви знаєте ще один асемблер. При бажанні самостійно перевірити чи виправити цей приклад, ви можете скористатися новою прошивкою нашого пристрою для плати Марсоход2 - в наступному архіві ви знайдете прошиваючи, макроассемблер, кілька бібліотечних функцій і прикладів програм.