Важная информация

User Tag List

Показано с 1 по 10 из 24

Тема: Простой кросс-ассемблер для PDP11 (Windows/Linux, opensource)

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Простой кросс-ассемблер для PDP11 (Windows/Linux, opensource)

    https://github.com/vinxru/pdp11asm

    Представляю простой кросс-ассемблер для PDP11. Боян, но всё же. Простой, потому что поддержку INCLUDE добавить так руки и не доходят. По просьбам трудящихся я пытался реализовать совместимость со многими трансляторами, поэтому получилось немного странно:

    Команды программы

    ORG N
    .LINK N
    Устанавливает адрес, куда будет выводится код после этой команды. По умолчанию используется адрес 0.

    DB
    .BYTE
    Записать байты. Через запятую можно указывать числа, 'A' - код символа, "ABCD" - несколько кодов символов. Так же поддерживается конструкция N DUP(C) записывающая N раз байт C.

    DW
    .WORD
    Записать слова.

    .ASCII /text/
    Записать текст.

    .END
    Игнорируется

    .BLKB N
    Вывести N байт 0.

    .BLKW N
    Вывести N слов 0.

    name EQU value
    name = value
    Установить константу. Во всем файле name будет автоматически заменяться на value.

    name:
    Метка. Во всем файле name будет заменяться на адрес метки. Указывать : после метки не обязательно. Вместе с игнорированием пробелов и переносов строк, синтаксис ассемблера стал очень свободным. Хоть в одну строку пиши.

    N:
    Числовая метка. Область действия метки ограничивается символьными метками. Такая метка может быть использована только в командах условного перехода B? и SOB.

    MAKE_BK0010_ROM "filename", start, end
    Сформировать файл поддерживаемый эмулятором B2M. start, end - начальный и конечный адрес программы. Можно использовать метки.

    MAKE_BINARY_FILE "filename", start, end
    Выгрузить образ памяти в файл. start, end - начальный и конечный адрес. Можно использовать метки.

    INSERT_FILE "filename", offset, size
    Вставить двоичный файл. Можно вставить часть файла, задав размер и смещение в исходном файле.

    ALIGN N
    Выровнять адрес следующей команды на N-байт.

    CONVERT1251TOKOI8R
    Включить преобразование строк из кодировки 1251 в KOI8R.

    CONVERT1251TOKOI8R OFF
    Выключить преобразование строк из кодировки 1251 в KOI8R.

    DECIMALNUMBERS
    Далее все числа по умолчанию 10-ричные. В стандарте C.

    DECIMALNUMBERS OFF
    Далее все числа по умолчанию 8-ричные. В конце 10-чных чисел необходимо ставить точку.

    INSERT_BITMAP1 "name", width, height
    Вставить изображение преобразовав его в формат видеопамяти БК0010 2 цвета. Изображение должно быть в формате BMP 24 бита. width, height должны соответствовать размеру
    изображения в файле.

    INSERT_BITMAP2 "name", width, height
    Вставить изображение преобразовав его в формат видеопамяти БК0010 4 цвета. Изображение должно быть в формате BMP 24 бита. width, height должны соответствовать размеру изображения в файле.

    INSERT_BITMAP1T "name", width, height
    Вставить изображение преобразовав его в NAND и OR маски 2 цвета. В качестве прозрачного цвета используется #FF00FF.

    INSERT_BITMAP2T "name", width, height
    Вставить изображение преобразовав его в NAND и OR маски 4 цвета. В качестве прозрачного цвета используется #FF00FF.

    ; text
    // text
    Комментарий

    .
    Адрес этой команды

    Команды процессора без аргументов

    HALT Останавливает ЦП
    WAIT Останавливает ЦП до прерывания
    BPT Вызов прерывания
    IOT Вызов прерывания
    EMT 0..255 Вызов прерывания
    TRAP 0..255 Вызов прерывания
    MARK 0..63 Вызов прерывания
    RESET Перезагрузка процессора
    RTI Выход из прерывания (Загружает PC, PS из стека)
    RTT Выход из прерывания пошаговой отладки.
    NOP Ничего не делает
    CLC Сбрасывает флаг C
    CLV Сбрасывает флаг V
    CLZ Сбрасывает флаг Z
    CLN Сбрасывает флаг N
    СCC Сбрасывает все флаги
    SEC Устанавливает флаг C
    SEV Устанавливает флаг V
    SEZ Устанавливает флаг Z
    SEN Устанавливает флаг N
    SCC Устанавливает все флаги
    RET Синоним RTS PC

    Команды процессора с одним аргументом

    (B) описании значит, что существует две версии команды CLRB - обрабатывающей байты и CLR - обрабатывающей слова.

    JMP r Переход по адресу
    SWAB r Поменять старший и младший байты местами
    CLR(B) r Записать 0
    COM(B) r Инверсия (заменть все биты на противоположные)
    INC(B) r Увеличить на единицу
    DEC(B) r Уменьшить на единицу
    NEG(B) r Изменить знак
    ADC(B) r Увеличить на единицу, если C=1
    SBC(B) r Уменьшить на единицу, если С=1
    TST(B) r Сравнить с нулем
    ROR(B) r Циклический сдвиг вправо через флаг C
    ROL(B) r Циклический сдвиг влево через флаг C
    ASR(B) r Cдвиг вправо, старший бит дублируется
    ASL(B) r Cдвиг вправо, младший бит равен 0
    SXT r Расширение знака. Если N=0 записывает 0, иначе -1
    MTPS r Установка регистра флагов
    MFPS r Чтение регистра флагов
    CALL r Синоним JSR PC,

    Аргументы команды

    R0, R1, R2, R3, R4, R5, SP, PC Регистр. Все регистры 16 битные. 8 битные команды будут работать с младшими их половинами.
    (REG) или @REG Значение по адресу
    @(REG) Значение по адресу по адресу.
    -(REG) Значение по адресу. Уменьшить регистр до выполнения команды на 1 для байта. И на 2 для слова.
    @-(REG) Значение по адресу по адресу. Уменьшить регистр до выполнения команды.
    (REG)+ Значение по адресу. Увеличить регистр после выполнения команды на 1 для байта. И на 2 для слова.
    @(REG)+ Значение по адресу по адресу. Увеличить регистр после выполнения команды.
    IMM(REG) Значение по адресу, который рассчитывается как сумма регистра и числа.
    @IMM(REG) Значение по адресу по адресу, который рассчитывается как сумма регистра и числа.
    #A Число или адрес переменной.
    @#A Значение по адресу или переменная. Абсолютная адресация.
    A Значение по адресу или переменная. Адрес относительно PC.
    @A Значение по адресу по адресу. Первый адрес относительно PC.

    Команды процессора с двумя аргументами

    MOV(B) a, b Скопировать
    CMP(B) a, b Сравнить A и B
    BIS(B) a, b Логическое ИЛИ
    BIС(B) a, b Логическое И-НЕ (B = B & ~A)
    BIT(B) a, b Логическое И без сохранения результата
    ADD a, b Сложение
    SUB a, b Вычитание

    Команды условного перехода

    Могут переходить только в пределах -256..+254 байта, относительно адреса следующей команды. Числа указанные в аргументе команды интерпретируются как числовые метки.

    BR imm Всегда
    BNE imm Не равно (Z=0)
    BEQ imm Равно (Z=1)
    BGE imm Больше равно для знаковых типов (N^V=0)
    BLT imm Меньше для знаковых типов (N^V=1)
    BGT imm Больше для знаковых типов (Z|(N^V)=0)
    BLE imm Меньше равно для знаковых типов (Z|(N^V)=1)
    BPL imm Результат положительный (N=0)
    BMI imm Результат отрицательный (N=1)
    BHI imm Больше (C|Z=0)
    BVC imm Нет знакового переполнения (V=0)
    BVS imm Знаковое переполнение (V=1)
    BHIS imm / BCC imm Больше или равно / нет переполнения (C=0)
    BLO imm / BCS imm Меньше / переполнение (C=1)

    Необычные команды процессора

    JSR reg, a Вызвать подпрограмму (REG - только регистр, A - любой аргумент)
    RTS reg Выход из подпрограммы (REG - только регистр)
    XOR reg, a Исключающее ИЛИ (REG - только регистр, A - любой аргумент)
    SOB reg, imm Цикл (REG - только регистр, IMM - адрес). Числа указанные в аргументе IMM команды интерпретируются как числовые метки.

    Особенности

    - Некоторая совместимость с транслятором MACRO11. Но макросов нет.

    - Примитивная арифметика. Например текст 2+5-1 будет преобразован в число 6. Соответственно Label1 + 6 это адрес на 6 больше адреса метки Label1.

    - Со скобками надо быть осторожнее, скобки вокруг аргумента так же обозначают режим адресации: (1+2) - это значение по адресу 3, (1+2)*1 - это значение 3.

    - Числовые метки. Например "10:". Их область видимости ограничена символьными метками. И их можно использовать только с командами условного перехода: B? и SOB. Любое положительное число в аргументе этих команд интерпретируется как метка.

    - При таком подходе любимая PDP-шниками команда "SOB R1, .-2" не работает, так как 2 интерпретируется как метка. Но благодаря исключению с отрицательными числами можно написать "SOB R1, .+-2". -2 в тут считается числом на уровне парсера. Похоже на костыль, но я не знаю как сделать красивее. (Знал, но проект давно остановлен и я опять забыл)

    - По умолчанию числа 8-ричные. Что бы указать 10-чное число, необходимо в конец числа добавить точку. Например "16384.".

    - C помощью команды DECIMALNUMBERS можно включить по умолчанию десятичные числа. Восьмиричные числа тогда начитаются с нуля, например 017666. Или можно добавить постфикс 17555o. Обратно включить по умолчанию 8-ричные числа можно командой DECIMALNUMBERS OFF.

    - В одной строке может быть несколько команд. Перенос строки теперь не обязателен.

    - Добавлены синонимы: RET = RTS PC, CALL = JSR PC.

    - В примерах к компилятору игра Сапер.

    - Команда .i8080 включает систему команд процессора Intel 8080 и можно писать программы для него. Это было сделано для написания прошивки для SMP компьютера на 8080 и ВМ1.

    - Компилятор осилил исходники CP/M споткнувшись лишь на крайне странной строке "CCPSTACK:EQU $". Можно быть написать "CCPSTACK:" или "CCPSTACK EQU $", что идентично. Но не вместе же. Эту строку я поправил руками.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. SjASMPlus Z80 кросс ассемблер
    от Aprisobal в разделе Программирование
    Ответов: 1663
    Последнее: 19.06.2021, 01:36
  2. Простой PDP11 CPU модуль на Н1806ВМ2
    от bigral в разделе ДВК, УКНЦ
    Ответов: 141
    Последнее: 20.10.2019, 15:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •