На чем написана программа 1с

Программирование на ассемблере в наши дни — как правило, непрактичное занятие. Безусловно, хотя бы отдаленно представлять, из каких машинных кодов будет состоять программа, полезно и нужно. Однако новый код пишется на Си или более высокоуровневых языках, даже если это код для микроконтроллеров. Что же делать, если хочется попрограммировать что-нибудь на ассемблере (из ностальгических соображений или любых других), и чтобы это имело хоть немного практической ценности? Как вариант, можно написать программу для какого-нибудь ретро-компьютера.

Теория

В качестве какого-нибудь ретро-компьютера воспользуемся БК-0010-01. Данный компьютер примечателен тем, что он недорог и легко доступен на постсоветском пространстве. Также старые компьютеры БК редко требуют серьезного ремонта. В большинстве случаев достаточно лишь смазать клавиатуру. Для тех же, кто не желает заниматься ремонтами, предусмотрен кроссплатформенный эмулятор.

Программированию на ассемблере под БК посвящена замечательная книга Микро-ЭВМ БК-0010. Архитектура и программирование на языке ассемблера, автор Зальцман Ю.А. Книга распространяется онлайн бесплатно. Пересказать ее в рамках статьи не представляется возможным, да и лишено особого смысла. Ограничимся лишь общими сведениями об ассемблере под эту платформу.

Здесь я предполагаю, что читатель имеет опыт программирования на каком-то из ассемблеров, и объяснять отличие регистров от стека не требуется. Если это не так, обращайтесь к книжке Зальцмана. Она как раз ориентированна на тех, кто до этого не писал на ассемблере.

БК-0010-01 работает на процессоре К1801ВМ1 с набором инструкций PDP-11. Процессор 16-и битный, использует архитектуру little-endian. То есть, у слова в памяти сначала идет младший байт, а затем старший. Длина инструкции может составлять от 1 до 3 слов, то есть — 2, 4 или 6 байт. Суммарно поддерживается около 40-ка инструкций, в зависимости от того, как их считать.

Доступно восемь регистров общего назначения, R0 .. R7. Каждый имеет размер в одно слово. Два регистра имеют особое назначение. R6, он же SP (Stack Pointer), является указателем на вершину стека. R7, он же PC (Program Counter), является указателем на исполняемую инструкцию.

Есть еще один служебный регистр PS (Processor Status). Он также имеет размер в одно слово, но из этого слова используется только младший байт. В регистре хранятся флаги переноса (C), переполнения (V), нуля (Z), отрицательности (N), а также другая информация, которая в этом посте нам не пригодится.

Ассемблер для PDP-11 имеет ряд особенностей, которые следует учитывать.

Так, к примеру, выглядит запись константы в регистр:

MOV #10000, R0

Источник данных находится слева, приемник — справа. То есть, как в синтаксисе AT

  • Клавише РУС соответствует сочетание Ctr , N ;
  • Роль клавиш ЗАГЛ и СТР выполняет Caps Lock ;
  • Сочетанию АР2 , + на маке соответствует Option , Shift , + ;
  • Продажа товаров в программе 1С (за 3 минуты)

    Чтобы скомпилировать и запустить программу в эмуляторе, выполняем команды:

    Не пиши так код в 1С

    pdpy11 —implicit-bin hello.mac
    cp hello.bin / path / to / bk2010- 0.8 -alpha8 / files /

    Затем открываем BK2010 и загружаем программу через «монитор». В данном примере программа будет иметь имя hello .

    В конце исходного кода можно дописать директиву make_wav . Тогда вместо .bin файла будет создан .wav файл. Его можно запустить на железе.

    Практика: пишем код

    Сразу оговорюсь, что представленный код не оптимизирован ни по размеру, ни по производительности. Зато он должен быть хорошо читаем и демонстрировать ключевые возможности БК. Во всяком случае, такова задумка.

    В качестве первого примера рассмотрим программу мигания экраном:

    0: MOV #177777, R0 ; В R0 все биты единичные
    1: MOV #40000, R1 ; Начало экрана
    2: MOV R0, (R1)+ ; Запись очередного слова в ОЗУ
    CMP #100000, R1 ; Конец экрана?
    BNE 2 ; Нет — продолжать
    TST R0 ; R0 = 0 (цикл очистки)?
    BEQ 0 ; Да — записать единицы в R0
    CLR R0 ; Иначе обнулить R0 и войти
    BR 1 ; в цикл очистки экрана

    Код взят из Зальцмана. Обновление информации на экране осуществляется прямым обращением к экранной памяти. Она начинается с адреса 0o40000 (0 x 4000) и заканчивается 0o100000 (0 x 8000). Началу соответствует верхний левый угол экрана, а концу — правый нижний. Всего 16 Кб памяти, 64 байта (32 слова) на стоку, 256 строк.

    Читайте также:
    Как снять зависшую программу linux

    Сначала программа заполняет весь экран красным цветом (0b11), а затем черным (0b00). Если использовать черно-белый видео-выход компьютера, то экран будет мигать белым и черным. Смысл инструкций должен быть понятен по контексту и комментариям, поэтому не будем на них задерживаться.

    Следующий пример показывает, как написать простой диалог с пользователем:

    MOV #YOURNAME, R1 ; Адрес начала текста
    CLR R2 ; Конец текста — нулевой байт
    EMT 20 ; Вывод текста

    MOV #BUFFER, R1 ; Адрес буфера
    MOV #0x0A10, R2 ; Конец — 16д байт (0x10) или ввод (0x0A)
    EMT 10 ; Ввод текста

    MOV #16., R3
    SUB R2, R3 ; R3 — длина введенной строки

    MOV #HELLO, R1 ; Вывод приветствия
    CLR R2
    EMT 20

    MOV #BUFFER, R1 ; Вывод введенного текста
    MOV R3, R2 ; Через R2 передаем длину строки
    EMT 20

    MOVB #41, R0 ; Вывод восклицательного знака
    EMT 16

    YOURNAME:
    .BYTE 14 ; Сброс экрана
    .ASCII «Как тебя зовут?»
    .BYTE 0x0A ; Перевод строки
    .BYTE 0x00 ; Конец ASCIZ-строки

    HELLO:
    .ASCIZ «Привет, «

    BUFFER:
    .BLKB 16. ; 16д байт должно хватить

    Программа в действии:

    Простая программа на ассемблере для БК-0010-01

    Программа написана с использованием командных прерываний, инструкция EMT . Инструкция вызывает подпрограмму с заданным номером из ПЗУ компьютера. Грубо говоря, это как int 0 x 80 или syscall на x86/x64.

    EMT 20 выводит строку. R1 задает адрес строки. Младший байт R2 задает длину строки, притом нулевая длина означает длину в 64 Кб. Старший байт R2 задает символ-ограничитель. Строка выводится либо до заданной длины, либо пока не встретится ограничитель. EMT 10 работает точно так же, только для ввода текста в заданный буфер.

    При возвращении из EMT 10 регистр R2 содержит количество байт в буфере, которое не было использовано. Наконец, EMT 16 выводит один символ на экран. Код символа берется из младшего байта R0.

    И еще один пример:

    CLR R0 ; Заполняем экран нулями
    MOV #40000, R1 ; Начало экрана
    0:
    MOV R0, (R1)+ ; Запись очередного слова в ОЗУ
    TST R1 ; Проверяем старший бит слова
    BPL 0 ; Если слово положительное, не дошли до конца

    SCROLL_INIT:
    MOV #0x02FF, R0 ; 9-ый разряд = 1, обычный режим экрана

    SCROLL_CONTINUE:
    ; —> сюда можно вставить задержку

    В начале программа заполняет экран черным цветом и инвертирует биты одного слова посреди экрана с помощью инструкции COM . В результате на экране рисуется маленькая горизонтальная полоска красного цвета.

    Далее программа использует аппаратный скроллинг, чтобы проматывать экран сверху вниз. Управление скроллингом осуществляется через системный регистр смещения, имеющий адрес 0o177664. Младший байт регистра задает адрес начала экранного ОЗУ. Байт имеет 256 возможных значений, строк на экране тоже 256 — все сходится. Исходному состоянию, когда начало экрана приходится на адрес 0o40000, соответствует значение байта 0o330 или 0 x D8.

    Если записать ноль в девятый разряд регистра (разряды здесь принято считать с нуля), включается режим расширенной памяти. Программе в этом случае отводится 28 Кб памяти, а экрану остается 4 Кб. Разрешение по вертикали уменьшается в четыре раза, нижние 3/4 экрана заполняются черным цветом. Данная возможность в программе не используется.

    Стоит отметить, что программа может использовать хоть все 32 Кб памяти, так как размещать исполняемый код в экранной памяти не запрещено. Но тогда на экран неизбежно будет выведен мусор.

    В коде отмечено место, куда можно добавить задержку. Это замедлит скроллинг. Реализовать задержку можно разными способами. Например, таким:

    Это довольно длинный код для такой простой задачи. Зато он демонстрирует работу с системным таймером.

    Начальное состояние таймера заносится в регистр с адресом 0o177706. Таймер запускается записью в регистр управления таймером с адресом 0o177712. В последнем используется только младший байт. Установка 4-го разряда регистра в единицу разрешает счет. Таймер берет ранее записанное нами число по адресу 0o177706 и считает от него до нуля. Когда счетчик достигнет нуля, счет начнется с начала.

    Текущее значение счетчика доступно по адресу 0o177710. Установка второго разряда регистра управления включает режим индикации. В этом режиме, когда счетчик переходит через ноль, таймер выставляет в единицу 7-ой разряд регистра управления.

    Стоит отметить, что после включения БК это срабатывает лишь на второй и последующие переходы через ноль. По всей видимости, это аппаратный баг, который никогда не был исправлен. Также это является вероятной причиной, почему системный таймер в БК является недокументированной возможностью.

    Далее все просто. Инструкция TSTB смотрит на значение регистра и выставляет соответствующие флаги. Если старший бит не выставлен, число считается положительным и срабатывает переход BPL . Иначе мы выходим из цикла. Одному тику таймера соответствует примерно 42.9 мкс. В цикле мы проводим около 43 мс, а один проход по экрану полоска совершает за 11 секунд.

    Читайте также:
    QR код программа для создания

    Помимо измерения времени системный таймер может служить источником энтропии для генерации псевдослучайных чисел. Запускаем таймер, просим пользователя нажать кнопку или ввести какие-то данные, после чего считываем значение счетчика по адресу 0o177710. Это значение будет истинно случайным.

    Заинтересованным читателям в качестве упражнения предлагается написать программу, демонстрирующую, как БК может вывести до десяти цветов, если располагать четыре доступных цвета в шахматном порядке. Результат должен получиться примерно таким:

    Вывод десяти цветов на БК-0010-01

    Если эта задача покажется вам недостаточно интересной, добавьте анимацию и/или музыку на бипере.

    • Программирование под БК-0010 в 2019-ом году;
    • Статья об одной ошибке в процессоре К1801ВМ1;
    • Telegram-чат о программировании под БК-001x;
    • Группа эмулятора BK2010 в Telegram;

    Как видите, Электроника БК-0010-01 является привлекательной платформой для программирования на ассемблере. Все необходимые инструменты и обучающие материалы имеются.

    Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.

    Источник: eax.me

    Программирование 1С 8.х для начинающих

    • Вы здесь:
    • Главная
    • Статьи
    • Конфигурация
    • Общие вопросы
    • Введение
    • Описание языка 1С для начинающих

    Поделитесь в соцсетях

    Конфигурация

    Описание языка 1С для начинающих

    Подробности Категория: Введение

    • Что из себя представляет язык 1с.
    • Методы, переменные, конструкции языка

    Описание языка 1С для начинающих

    1. Что из себя представляет язык 1с.
    2. Методы, переменные, другие конструкции языка.

    Что из себя представляет язык 1с.

    Любой язык программирования предназначен для указания программе выполнения необходимых для нас действий. Написание кода похоже на составление инструкции, в ней мы указываем, что сделать и в каком порядке. Весь исполняемый код конфигурации может находиться только в модулях, рассмотрим основные 4 вида:

    1. модуль приложения

    3. модуль объекта

    В разных видах модулей код исполняется на разных этапах выполнения программы. В модуле приложения код может исполняться при запуске программы или при закрытии, в общих модулях во время вызова из других модулей, в модуле объекта – при действиях над объектом (создание, изменение, удаление), в модуле формы – во время действий над формой. Что можно использовать при написании кода:
    Переменные, объекты и их реквизиты, методы созданные нами (программистами 1С) и системные (встроенные в платформу), а также конструкции встроенного языка.

    Методы, переменные, конструкции языка

    Переменные используются для хранения данных во время сеанса работы пользователя. Переменная это такое слово которое начинается с буквы(русской или английской) или со знака подчеркивания «_» и состоит из букв цифр и знаков подчеркивания.
    Например :

    • ЭтоПеременная
    • _ЭтоПеременная
    • _Это1_Переменная

    То, что буквы могут быть русскими и английскими может сыграть злую шутку при употреблении похожих по начертанию букв из разных языков.

    Регистр букв в коде не учитывается, т.е. переменные « Переменная1 » и « пЕрЕмЕннАя1 » при выполнения кода для программы являются одинаковыми. Желательно чтобы названия переменных были осмысленные. Это улучшает читабельность кода.

    Объекты и реквизиты считываются и изменяются в процессе работы над данными.
    Объект это набор данных сгруппированных по определенному признаку. Как правило, объекты в информационной базе это отражение документов, списков данных, перечислений материального мира. Реквизиты объектов, по сути, и хранят данные.

    Например : Объект «Товарный чек № 00018 от 01.01.2005».
    Мы можем отличить этот товарный чек от других товарных чеков по данным реквизитов, которые он содержит. Это реквизит «Номер» со значением «00018»(тип строка) и реквизит «Дата»(тип дата) со значением «01.01.2005». Единственное что, мы могли определить по объекту, не зная значений его реквизитов — это его тип «Товарный чек».
    Методы являются маленькими и как правило законченными инструкциями.

    Например , системный метод « ТекущаяДата () » из названия понятно, что он будет возвращать текущую дату компьютера. Или допустим можно создать метод « СтрокаСодержитЦифру ( ПроверяемаяСтрока ) » который вернет ответ Истина или Ложь , здесь мы в скобках передаем параметры т.е. данные оперируя которыми метод должен сделать какие-то действия. Оба рассмотренных метода являются функциями, также в языке есть методы-процедуры. Отличие между ними одно Функция обязательно должна возвращать значение.

    Другие конструкции языка (операторы, коллекции значений и т.д.) — это зарезервированные системой 1с слова которые помогают производить манипуляции над данными.

    Читайте также:
    Сервер программа компьютер которая

    Для каждого ЭлементКоллекции Из ИмяКоллекции Цикл КонецЦикла;

    В примере приведена конструкция перебора элементов коллекции. Эта конструкция называется цикл. Большинство типов объектов, а также их реквизитов являются коллекциями, которые можно перебирать вышеуказанным способом и обращаться к элементу коллекции указывая его индекс ( ИмяКоллекции [ 0 ] ). Все коллекции начинаются с элемента, у которого индекс = 0.

    Источник: 1s-portal.ru

    1С модули

    А если проще то: В модулях 1С содержится исполняемый код, который необходим для того чтобы каким-либо образом отреагировать на действия системы или пользователя, когда визуальных средств недостаточно для описания взаимодействия объектов в конфигураторе. Также в врограммных модулях можно описывать собственные методы.

    Любая строчка кода находится в каком-либо модуле, это отличие от 1С7.7, где программный код мог располагаться и в ячейках таблиц макета и в свойствах элементов формы.

    Перечислим модули, которые находятся в 1С 8.2

    Модули платформы 1С Предприятия 8.2:

    • Модуль управляемого приложения
    • Модуль обычного приложения
    • Модуль внешнего соединения
    • Модулем сеанса
    • Общие модули
    • Модуль объекта
    • Модуль формы
    • Модуль менеджера объекта
    • Модуль менеджера значений
    • Модули наборов записей

    Модули_1С

    Основные разделы модуля:
    1. Раздел описания локальных переменных данного модуля, можно указывать директиву компиляции (существует не для всех модулей).
    2. Раздел описания процедур и функции. Если не писать директиву компиляции то по умолчанию она – НаКлиенте или
    Не стоит использовать свойство “Глобальный” общих модулей повсеместно, т.к. такие модули компилируются при старте системы и замедляют старт программы

    Модуль объекта
    У многих объектов конфигурации (справочники, документы и т.д. ) существует модуль объекта. В него можно вводить стандартные события, такие как создание нового элемента справочника, запись нового объекта, удаление, обработка проведения документа и т.д. Событие записи существует и в модуле формы (возникает в процессе интерактивной записи, когда пользователь нажимает на кнопку “записать”) и в модуле объекта.
    Нужно помнить, что у одного объекта может быть несколько форм. Поэтому событие записи нужно обрабатывать именно в модуле объекта. Именно там проверяется корректность записываемых данных.
    Модуль объекта можно вызвать из палитры свойств данного объекта, либо из контекстного меню. Структура модуля объекта не отличается от модуля формы. Модуль объекта компилируется на сервере, соответственно директивы компиляции указывать не требуется.

    Модуль формы
    Модуль формы предназначен для обработки действий пользователя (обработка события нажатия кнопки и т.д.). Так же существуют события связанные непосредственно с самой формой (например событие её открытия, закрытия). Модули управляемых и обычных форм различаются прежде всего тем, что модуль управляемой формы четко разделяется на контекст. Каждая процедура должна иметь директиву компиляции. В обычной форме весь код исполняется на клиенте.
    Структура управляемой формы содержит раздел описания переменных, раздел процедур и функций и раздел основной программы (выполняется в момент инициализации формы). К стандартным событиям формы можем обратиться через список процедур и функций (Ctrl+Alt+P) либо в палитре свойств самой формы. Так же в управляемой форме можно обработать событие записи элемента (это событие присутствует только для объектов: справочников, документов).

    Модуль менеджера объекта
    Модуль менеджера появился только в 1С 8.2,существует у многих объектов конфигурации. Основное предназначение модуля менеджера объекта это переопределить стандартное событие “ОбработкаПолученияДанныхВыбора”, а так же в нем можем
    Модуль менеджера значений.
    У объекта конфигурации константы не существует модуля объекта, а существует очень похожий модуль – модуль менеджера значений. В модуле менеджера значения константы можно описать различные процедуры (в том числе и экспортные), а также обработать 3 события: ПередЗаписью, ПриЗаписи, ОбработкаПроверкиЗаполнения. Этот модуль компилируется на сервере.

    Модули наборов записей
    Модуль набора записей является аналогом модуля объекта и присущ регистрам. В модуле набора записей существуют стандартные события:
    – Перед записью
    – При записи
    – Обработка проверки заполнения
    В модуле набора записей существует раздел описания переменных, процедур и функций (в том числе и экспортных), раздел основной программы.

    Основные моменты 1С Модулей я думаю мы расмотрели, а если у вас есть какие-то дополнения пишите пожалуйста в коментариях.

    Постовой: Задумались купить 1С Предприятие и не знайте у кого? Компания ЛБС входит в 20 лучших 1С:Франчайзи. Занимается автоматизацией учета на базе продуктов «1С». Купите 1с продукты у ЛБС и получите качественное сопровождение и обслуживание 1С.

    P.S. Посмейтесь над анекдотот от Лукашенко ))

    Источник: 1c-md.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru