Skip to main content
LibreTexts - Ukrayinska

4: Програма Асемблер

  • Page ID
    28165
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    Асемблер - це програма, яка переводить програму мови асемблера в машинний код. Асемблер прочитає вихідну програму збірки, що складається з інструкцій по збірці. Потім асемблер запише два файли, які будуть використовуватися для запуску програми в процесорі Logisim.

    Перший вихідний файл містить сегмент машинного коду, що містить програму машинного коду, яка буде використовуватися в процесорі. Це переклад інструкції по збірці в машинні інструкції. Другий вихідний файл містить ініціалізований сегмент даних, який буде використовуватися в ЦП. Це проілюстровано на наступному малюнку.

    Малюнок 4-1: Процес складання

    Знімок екрана 2020-07-03 о 11.46.38 AM.png

    Асемблер являє собою двопрохідний асемблер. Двопрохідний асемблер зчитує вхідний файл двічі, або за 2 проходи від початку до кінця вихідного файлу збірки. Перший прохід обчислить адресу для кожної мітки в програмі для створення таблиці символів. Таблиця символів - це список, який містить мітки в програмі і їх адресу в пам'яті. Другий прохід переведе кожну інструкцію у вхідному файлі в машинний код, і випише файл, який відповідає машинному коду для даних і текстових сегментів програми. Другий прохід через файл використовує таблицю символів для вирішення будь-яких посилань на мітки, які використовуються в інструкціях по збірці. Формат програми показаний на наступному малюнку.

    Малюнок 4-2: Огляд асемблера

    Знімок екрана 2020-07-03 о 11.48,14 AM.png

    Асемблер написаний на Java. Немає особливих причин або переваг для написання цього асемблера на Java. Основною проблемою в асемблер є написання зворотних викликів або віртуальних методів/функцій для аналізу окремих інструкцій. Це, ймовірно, було б простіше в C/C++, і, безумовно, швидше за допомогою покажчиків функцій замість поліморфізму. Але концепція зворотного дзвінка складна на будь-якій мові для читачів, які не знайомі з поняттям, і цей асемблер більш ніж досить швидкий.

    Для реалізації поліморфної структури зворотного виклику для обробки команд асемблер використовує статичні ініціалізатори з заводськими шаблонами та одноелементними об'єктами. Це можна було б зробити у великому твердженні «if», але цей поліморфний розчин чистіший і легше розширюється. Це також повчально для читачів, які не знайомі з заводським шаблоном, одиночним малюнком та статичними ініціалізаторами, побачити їх. Але асемблер - відносно коротка і пряма програма, і читачі можуть переписати її, використовуючи будь-яку структуру або мову, яку вони віддають перевагу.

    Асемблер можна отримати на сайті автора, http://chuckkann.com. ZIP-файл містить асемблер, файл визначення схеми для одноадресного процесора, а також деякі програми та файли для тексту користувача та роботи з ЦП.