Содержание

Как собрать кубик Рубика 3х3х3 для начинающих | speedcubing.ru

Для того, чтобы понимать формулы, используемые для сборки, нужно ознакомиться с языком вращений.

Язык вращений – это особые обозначения движений граней кубика, при помощи который можно записать какой-либо алгоритм, решение или скрамбл (последовательность ходов, с помощью которой запутывают кубик).

F — front — фронтальная сторона

B — back — задняя сторона

L — left — левая сторона

R — right — правая сторона

U — up — верхняя сторона

D — down — нижняя сторона

Fw (f) — фронтальная сторона вместе со средним слоем

Bw (b) — задняя сторона вместе со средним слоем

Lw (l) — левая сторона вместе со средним слоем

Rw (r) — правая сторона вместе со средним слоем

Uw (u) — верхняя сторона вместе со средним слоем

Dw (d) — нижняя сторона вместе со средним слоем

Также существуют более редкие движения, которые практически никогда не используются в сборках:

M — middle — средний слой, находящийся между правой (R) и левой (L) сторонами

S — standing — средний слой, находящийся между фронтальной (F) и задней (B) сторонами

E — equatorial — средний слой, находящийся между верхней (U) и нижней (D) сторонами

Кроме вращений граней куба, существуют обозначения, указывающие на изменения положения кубика в пространстве. Эти движения называются перехватами:

x — весь куб вращается от себя по плоскости, совпадающей с правым (R) и левым (L) слоями (F превращается в U)

x’ — весь куб вращается к себе по плоскости, совпадающей с правым (R) и левым (L) слоями (F превращается в D)

y — весь куб вращается по часовой стрелке в горизонтальной плоскости (F превращается в L)

y’ — весь куб вращается против часовой стрелки в горизонтальной плоскости (F превращается в R)

z — весь куб вращается по часовой стрелке в фронтальной плоскости (U превращается в R)

z’ — весь куб вращается против часовой стрелки в фронтальной плоскости (U превращается в L)

Движения кубика и перехваты записываются в соответствии со следующими правилами:

— Если написана только буква — крутим сторону по часовой стрелке, как если бы мы смотрели на грань в лицо

— Если после буквы стоит штрих «’» — крутим сторону против часовой стрелки, как если бы мы смотрели на грань в лицо

— Если после буквы стоит «2» — крутим эту сторону на 180 градусов. Если ещё стоит штрих, к примеру U2′, то это означает, что в данном алгоритме удобнее вращать U2 против часовой стрелки

Видео, в котором наглядно демонстрируется язык вращений кубика Рубика:

Как собрать кубик Рубика: инструкции, формулы, методики и схемы.

Кубик Рубика 2х2: Очень простая инструкция и схема сборки за 3 шага. Перевод официальной инструкции Rubik’s (PDF, 196 Кб).

Кубик Рубика 2х2: Интуитивная схема сборки по методу Валерия Морозова. Тут минимум формул, но нужно разобраться с авторским подходом к решению головоломки. (PDF, 1,5Мб).


Настоятельно рекомендуем! ЛУЧШАЯ и самая простая видео-инструкция «Как собрать кубик Рубика 3х3» для начинающих от Сергея Рябко, Чемпиона России и Европы по кубику Рубика. Самый легкий послойный метод сборки из 7 шагов от Rubik’s.

+ инструкция-шпаргалка к этому видео-курсу Rubik’s. Два листа со всеми формулами из видео. Пригодится как удобная подсказка тем, кто посмотрел видео и приступил к первым сборкам кубика Рубика. (PDF, 1,5 Мб)

Кубик Рубика 3х3: Инструкция для новичков. Многие начинали именно с нее! (PDF, 1,8 Мб)

Кубик Рубика 3х3: Перевод оригинальной инструкции Rubik’s и схема сборки. (PDF, 788 Кб)

Кубик Рубика 3х3: Удобная схема сборки на 1 листе А4 (автор А.Печёнкин). (PDF, 1.19 Мб)

Кубик Рубика 3х3: Алгоритм из 7 шагов как собрать кубик Рубика (послойная сборка). Версия из Белоруссии. Очень простой, рекомендуем для начинающих! (PDF, 2.4 Мб)

Кубик Рубика 3х3 и Void Cube: Авторский алгоритм Конищева Г. В., г. Магнитогорск. Инструкция обзорного характера о перемещениях частей кубика Рубика при сборке, паритетных ситуациях и как их устранить. Также подходит как схема сборки Void Cube. (PDF, 0.3 Мб)

Кубик Рубика 3х3: Авторский алгоритм Астратова Н.Д., г.Жлобин, Белоруссия. Методика сборки кубика Рубика из 4 этапов с минимальным количеством алгоритмов. (PDF, 1,2 Мб)

Кубик Рубика 3х3

: Авторский метод Морозова В.А., г.Москва. Без формул и обозначений, в основе только логика. Рекомендуем для тех, кто хочет научиться собрать кубик Рубика не заучивая формул. (PDF, 3 Мб)


Рекомендуем! Видео-инструкция «Как собрать кубик Рубика 4х4» для начинающих от Rubik’s. Самый легкий послойный метод сборки.

Кубик Рубика 4х4: Схема сборки в три этапа — центральные кубики, боковые кубики, все вместе по аналогии сборки кубика 3х3. (PDF, 156 Кб). Потребуется умение собирать кубик 3х3.

Кубик Рубика 4х4, 5х5, 6х6, 7х7… 11х11: Авторский алгоритм Конищева Г. В., г. Магнитогорск. Универсальный алгоритм, по которому можно собрать кубик Рубика 4х4, 5х5 и больше, вплоть до 11х11. (PDF, 1.8 Мб)

Кубик Рубика 5х5: Схема сборки в четыре этапа — первый слой, затем углы, контур и наконец центральные слои. (PDF, 1 Мб).

Кубик Рубика 5х5: Схема-инструкция для новичков на двух страницах. Авторский алгоритм Голубчикова И. (PDF, 548 Кб).

Универсальный алгоритм сборки БОЛЬШИХ кубов (6х6, 7х7… 17х17) по методу Валерия Морозова. В основе — авторский метод, который позволяет решить кубики Рубика абсолютно любого размера, без единой формулы, опираясь только на логику. Научившись собирать кубики по методу В.Морозова, можно понять, что большие кубы не намного сложней кубиков 2х2х2 и 3х3х3 и решаются при помощи принципов заложенных в них! (PDF, 2,4Мб).

Каркас шкафа. Инструкция. Как собрать шкаф самостоятельно

Чтобы собрать шкаф/стеллаж/полку, которую сделали мы, вам понадобится только отвёртка. Все остальные детали и инструменты уже включены в комплект. Мы постарались продумать такую конструкцию, чтобы любой шкаф собирался по одному и тому же сценарию, а если какое-то отклонение и появится, то оно не должно существенно повлиять на процесс сборки.

В этой заметке мы рассматриваем как собрать каркас шкафа.

Если вы находитесь в городе Пермь, то всегда можете заказать сборку любого изделия. Подробнее в заметке об оплате  и доставке

СПИСОК ДЕТАЛЕЙ

перед тем как начать, рекомендуем разложить все детали перед собой, чтобы не запутаться
  • шканты
    деревянные колышки
  • мебельные эксцентрики и односторонние/двусторонние штоки для них
    металлические детали для стяжки вертикальных деталей
  • металлическая часть полкодержателей
    металлические детали для крепления стягивающих полок на полкодержателях
  • конфирматы
    еврошурупы с шлицем под шестигранный ключ
  • шестигранный ключ
    Г-образный ключ для закручивания конфирматов
  • нижняя и верхняя плоскости

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

Порядок действий


На примере шкафа 3х3 из нашего каталога

Примерно такую схему мы прикладываем к каждому заказу


1. Соединяем основание и боковую плоскость с помощью двух конфирматов и кладём конструкцию на боковую плоскость. Если шкаф небольшой до 1500мм, то мы собираем его не на конфирматы, а на эксцентриковые стяжки, чтобы крепления были спрятаны. Как работают такие стяжки можно посмотреть в пункте №4.

2. Вкручиваем в несквозные отверстия в средней части стенок металлические части полкодержателей.

3. Устанавливаем полки в которых уже есть шканты в боковую стенку .

4. Вставляем в основание с помощью шкантов следующую вертикальную плоскость (если шкаф имеет больше одной ячейки по ширине иначе переходим к пункту  6).

В некоторые вертикальные плоскости встроен эксцентрик для стяжки конструкции. Поэтому, если между толстых отверстий для шкантов есть узкое отверстие, то значит это отверстие для крепления эксцентрика. Рекомендуем заранее завернуть ответные части эксцентриков с резьбой как показано на фото (длинные с пластиковой оранжевой накладкой).

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

5. повторяем пункты 2-4 пока не кончатся вертикальные плоскости.

6. Присоединяем боковую плоскость к полкам, у которых уже должны быть установлены шканты.

10. Соединяем боковую плоскость и основание на конфирматы.

11. Одеваем верхнюю плоскость (крышку) на шканты, эксцентрики (если есть) подобно основанию.

12. Фиксируем верхнюю плоскость с помощью конфирматов к боковым плоскостям.

13. Если в вашем шкафе есть задняя стенка, то она прибивается на маленькие гвоздики из комплекта или промышленным степлером, если он есть у вас. Лучше делать это положив шкаф на пол  лицевой стороной. Чтобы выровнять геометрию шкафа рекомендуем проверить рулеткой равенство диагоналей шкафа и только после этого прибивать заднюю стенку. Чем больше точек крепления будет, тем надёжнее. Обязательно крепите заднюю стенку не только к боковым стенкам, но и внутренним элементам конструкции.

14. Ставим шкаф вертикально. Одеваем недостающие полки с помощью полкодержателей и затягиваем их отверткой, чтобы стянуть боковые перегородки. Если ваш шкаф больших габаритов, то рекомендуем ставить шкаф вдвоём.

15. Проверяем и затягиваем все эксцентрики.

16. После этого рекомендуем закрепить шкаф к стене. Об этом мы написали отдельную заметку.

Наш онлайн-конструктор мебели

Попробуйте сделать шкаф, комод, стол или кухню в нашем простом онлайн-конструкторе и сразу узнаете стоимость!

Колонка кухонная как собрать инструкция

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

Итак, приступаем к сборке:

1. Распакуйте детали корпуса, осмотрите их и определите

-где боковины (самые большие детали)

-цоколь(самая маленькая деталь)

-крепёжные полки, пол и потолок(размером с полки но имеют отверстия для креплений)

-полки вставки (прямоугольные детали в которых отсутствуют какие-либо отверстия) их мы откладываем в сторонку так как они нам пригодятся только в конце сборки.

2. На боковины корпуса прибиваем подпятники, полкодержатели и шканты (шканты прибиваются в несквозные отверстия на корпусе а сквозные отверстия- для крепления шурупами мы пока не трогаем.) Возможно стоит сразу прикрутить бабочки от петель, если дырки под них сделаны, если дырок нет то пока не стоит прикручивать. Смотрите не перепутайте сторону, на которую собираетесь навешивать двери.

3. Распологаем одну из боковин лицевой стороной вниз и поочерёдно вставляем полки и цоколь совмещая дырки на деталях со шкантами и сразу-же прикручивая через отверстия конфирмантами (евровинтами)

4. К полученной конструкции приставляем вторую боковину, совмещаем шканты и поочерёдно усаживая их вглубь прикручиваем конфирмантами.

5. На полученный скрученный корпус прибиваем заднюю стенку- оргалит. Следим за тем чтобы корпус имел прямоугольный вид (обычно если оргалит ровный то и ровняют по оргалиту)

6. Ставим колонку в вертикальное положение и устанавливаем её на место, где она будет стоять. Стоит подложить под ножки что-нибудь, для выравнивания, если пол имеет неровности.

7. На двери прикручиваем петли (или петли с бабочками если их не прикрутили к корпусу)

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

9. если бабочки не были прикручены к корпусу — то прислоняем дверь к корпусу выравниваем по высоте, и крепим бабочки саморезами (для новичка эту работу стоит выполнять вдвоём-один держит дверь, другой прикручивает.) далее регулируем дверь регулировочными винтами.

10. Вставляем полки вставки в корпус на свои места и ещё раз проверяем регулировку дверей.

11. Прикручиваем ручки. Если отверстий под ручки нет — то вначале их придётся просверлить. Сверлить лучше с лицевой стороны, иначе может вырваться часть облицовки. Внимательно намечайте места сверления — второй попытки не будет….

 

Пользуйтесь !

инструкция и советы от iChip.ru

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

Что нужно, чтобы собрать компьютер самому?

В каждом системном блоке может быть разное количество комплектующих. Но, как ни крути, есть основные компоненты, которые присутствуют в каждой сборке. Это материнская плата, блок питания, процессор с кулером, видеокарта, оперативная память, корпус и накопитель. Из этого списка в некоторых случаях можно убрать, разве что, видеокарту, которая может быть встроенной в процессор. Такое решение вполне логично для офисного компьютера, но для игрового наличие графического акселератора обязательно. 

Для того чтобы всё железо заработало, необходимо подбирать его таким образом чтобы оно было полностью совместимо друг с другом. При соблюдении этого правила ваш ПК гарантированно заведется после сборки, ведь многие параметры компьютерного железа строго регламентированы. Поэтому у вас не получится, например, воткнуть ОЗУ типа DDR4 в разъемы типа DDR3 на материнской плате. Ниже мы расскажем подробнее про каждую комплектующую, а пока давайте разберемся с порядком подбора компонентов.

В целом, сборка с нуля подразумевает следующий порядок выбора комплектующих.

  • Процессор
  • Система охлаждения, если не планируется боксовый вариант ЦПУ, который поставляется вместе с кулером в комплекте.
  • Материнская плата
  • Оперативная память под материнскую плату.
  • Видеокарта (если не устраивает встроенное решение).
  • Блок питания, который по мощности потянет основные комплектующие.
  • Корпус, в который всё вместится.
  • Накопители.

Нельзя сказать, что это единственно верный план, которого стоит придерживаться. В большинстве случаев, какие-то компоненты переносятся из старой сборки в новую, поэтому порядок действий может варьироваться от случая к случаю.

После того, как вы подобрали все комплектующие, можно приступать, собственно, к сборке. 

Устанавливаем блок питания

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

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

Для того чтобы установить БП внутрь корпуса, вам понадобится 4 винтика, которые всегда идут в комплекте. Их нужно закрутить в соответствующие отверстия на тыльной стороне комплектующей, где находится разъем для кабеля, который питает блок от сети. В зависимости от вашего корпуса, БП может устанавливаться, как сверху, так и снизу.

При выборе блока питания следует ориентироваться на несколько основных (если мы говорим только о совместимости компонентов) параметров. Во-первых, это форм-фактор. Он должен соответствовать форм-фактору вашего корпуса, иначе блок просто не влезет внутрь корпуса. Во-вторых, это номинальная мощность. Она должна превышать пиковое потребление всего вашего железа на 20-30%. В-третьих, это количество и тип разъемов. Блок питания питает практически все комплектующие: процессор, материнскую плату, видеокарту, накопители. Все кабели должны иметь соответствующий тип. Если видеокарте нужен 6-pin коннектор, то и на блоке такой должен быть. И так со всем остальным железом.

Вот, например, одна из самых популярных моделей на рынке, которая подойдет практически в любую сборку:

Устанавливаем материнскую плату

После установки блока питания желательно максимально оснастить материнскую плату и установить ее внутрь корпуса. Под максимальным оснащением мы подразумеваем: установку процессора в сокет, установку кулера на процессор, установку всех планок оперативной памяти. И только видеокарту следует отложить в конец списка. Почему именно так? Сейчас объясним специально для тех, кто в первый раз решает задачу собрать ПК самому с нуля:.

Намного проще установить всё железо на материнскую плату снаружи корпуса, когда ваши руки не скованы пространством. И очень сложно сделать всё это внутри корпуса, когда пространство ограничено. А видеокарту мы не советуем устанавливать сразу вместе со всеми остальными комплектующими по причине того, что современные GPU очень громоздкие и способны закрывать сразу несколько слотов. Отсюда возникает проблема подключения корпусных проводов, которые отвечают за USB-разъемы, аудио, перезагрузку и включение компьютера. А они всегда, как и видеокарта, находятся в нижней части материнской платы.

Сама установка материнской платы очень проста. Достаточно просто закрутить шурупы в соответствующие разъемы. Намного сложнее выбрать материнку. Во-первых, она должна иметь сокет, который поддерживает процессор. Также слоты под оперативную память должны иметь такой же тип, как сама ОЗУ. Не забудьте проверить количество слотов и максимально поддерживаемый объем памяти. Ко всему прочему форм-фактор материнской платы, как и в случае с блоком питания, должен быть совместим с корпусом. 

Пример материнской платы, которая хорошо зарекомендовала себя на рынке для процессоров AMD на сокете B450:

Устанавливаем ЦПУ и систему охлаждения

Один из самых простых шагов во всей сборке. У каждого процессора в левом нижнем углу есть маркировка в виде треугольника. Такой же значок имеется и на сокете на материнской плате. Они должны совпасть таким образом, чтобы оба находились в одном углу. Перед установкой не забудьте отогнуть соответствующую защелку на месте установки ЦПУ. После того, как «камень» установлен в сокет, защелку необходимо вернуть в изначальное положение. Таким образом, вы зафиксируете комплектующую. Будьте предельно аккуратны, чтобы не погнуть ножки процессора.

После этого на крышку процессора наносится термопаста и устанавливается кулер. Если ЦПУ приобретался боксового формата, то на основании радиатора кулера уже будет нанесен термоинтерфейс. Наносить еще один на крышку процессора не нужно! Как правило, охлаждение, как и блок питания, фиксируется 4 винтиками, которые находятся на материнской плате чуть дальше от каждого угла процессора. 

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

Одна из самых лучших моделей по соотношению цена/производительность:

Устанавливаем оперативную память

ОЗУ достаточно просто воткнуть в соответствующие слоты. По краям посадочных мест находятся защелки: их необходимо отогнуть и вставить планки. О правильной установке можно судить по характерному щелчку, который означает, что фиксаторы вернулись в исходное положение. В этом деле не потребуется даже отвертка.

При выборе модулей следует обращать внимание на их тип: этот тип должна поддерживать материнская плата. Планки DDR4 ни при каких условиях не встанут в слоты, предназначенные для DDR3. Также учитывайте и тот факт, что планки могут не встать в посадочные места из-за того, что им будет мешать массивный радиатор системы охлаждения процессора. Этот параметр редко указывается в спецификациях. Поэтому перед тем, как собрать компьютер самому из комплектующих, обязательно уточните у продавца совместимость железа.

Самые популярные планки с отличным разгонным потенциалом:

Собираем компьютер вручную: видеокарта

Как собрать игровой компьютер самостоятельно? Конечно, с использованием дискретной видеокарты. Установка графического адаптера схожа с установкой оперативной памяти. Его необходимо поставить в соответствующий слот, который находится в нижней части материнской платы. На коннекторе также имеется защелка, которую нужно отогнуть перед установкой комплектующей, и которая также защелкнется, если установить GPU до конца. Но делать это следует в последнюю очередь. Как мы и писали выше, карточка может перекрыть остальные разъемы, например, которые отвечают за подключение жестких дисков. Поэтому видеокарту следует устанавливать в самую последнюю очередь. Сначала подключите все провода!

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

Хорошее решение с запасом на ближайшие пару лет:

Накопители и корпус

В любом корпусе есть посадочные места для накопителей. В каких-то HDD фиксируются с помощью винтиков, которые необходимо вкрутить прямо в корпус. А в каких-то есть соответствующие корзины, куда просто плотно устанавливается винчестер. При выборе жесткого диска следует ориентироваться на разъемы, которые сможет запитать ваш БП. Также обратите внимание на количество посадочных мест в корпусе: в каждой модели разное количество. По идее можно вообще никак не фиксировать ваш винчестер или SSD, но в таком случае он будет болтаться и сможет повредить другие комплектующие. А если сложить несколько жестких дисков друг на друга, то это чревато перегревом. Правильно всё же установить диски в соответствующие места.

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

Пара моделей, которые стоят вашего внимания:

Краткий список всех действий:

  1. Установить блок питания и протянуть заранее все провода.
  2. Укомплектовать материнскую плату. То есть: поставить процессор в сокет, нанести на него термопасту (если это требуется), установить систему охлаждения, вставить все планки оперативной памяти.
  3. Установить накопители.
  4. Подключить все провода, идущие от блока питания и от корпуса.
  5. Поставить видеокарту.
  6. Закрыть корпус и наслаждаться результатом.

Надеемся, теперь вы точно знаете, как собрать ПК из комплектующих самому. Главное — правильно подобрать комплектующие. 

Читайте также:

Теги игровые компьютеры

Как собрать кубик Рубика: инструкции, формулы, методики, схемы

Кубик Рубика 2×2

Кубик Рубика 2х2: Очень простая инструкция и схема сборки за 3 шага (PDF, 196 Кб). Перевод официальной инструкции Rubik’s

Кубик Рубика 2х2: Интуитивная схема сборки по методу Валерия Морозова (PDF, 1.5 Мб). Тут минимум формул, но нужно разобраться с авторским подходом к решению головоломки.

Кубик Рубика 3×3

Настоятельно рекомендуем! ЛУЧШАЯ и самая простая видео-инструкция «Как собрать кубик Рубика 3х3» для начинающих от Сергея Рябко, Чемпиона России и Европы по кубику Рубика. Самый легкий послойный метод сборки из 7 шагов от Rubik’s.

+ инструкция-шпаргалка к этому видео-курсу Rubik’s (PDF, 1.5 Мб). Два листа со всеми формулами из видео. Пригодится как удобная подсказка тем, кто посмотрел видео и приступил к первым сборкам кубика Рубика.

Кубик Рубика 3х3: Инструкция для новичков (PDF, 1.8 Мб). Многие начинали именно с нее!

Кубик Рубика 3х3: Перевод оригинальной инструкции Rubik’s и схема сборки (PDF, 788 Кб).

Кубик Рубика 3х3: Удобная схема сборки на 1 листе А4 (автор А.Печёнкин) (PDF, 1.19 Мб).

Кубик Рубика 3х3: Алгоритм из 7 шагов как собрать кубик Рубика (послойная сборка) (PDF, 2.4 Мб). Версия из Белоруссии. Очень простой, рекомендуем для начинающих!

Кубик Рубика 3х3 и Void Cube: Авторский алгоритм Конищева Г. В., г. Магнитогорск (PDF, 0.3 Мб). Инструкция обзорного характера о перемещениях частей кубика Рубика при сборке, паритетных ситуациях и как их устранить. Также подходит как схема сборки Void Cube.

Кубик Рубика 3х3: Авторский алгоритм Астратова Н.Д., г.Жлобин, Белоруссия (PDF, 1.2 Мб). Методика сборки кубика Рубика из 4 этапов с минимальным количеством алгоритмов.

Кубик Рубика 3х3: Авторский метод Морозова В.А., г.Москва (PDF, 3 Мб). Без формул и обозначений, в основе только логика. Рекомендуем для тех, кто хочет научиться собрать кубик Рубика не заучивая формул.

Кубик Рубика 4×4 и больше

Убедительно рекомендуем! Видео-инструкция «Как собрать кубик Рубика 4х4 для начинающих» от Rubik’s. Самый легкий послойный метод сборки.

Кубик Рубика 4х4: Схема сборки в три этапа (PDF, 156 Кб) — центральные кубики, боковые кубики, все вместе по аналогии сборки кубика 3х3. Потребуется умение собирать кубик 3х3.

Кубик Рубика 4х4, 5х5, 6х6, 7х7… 11х11: Авторский алгоритм Конищева Г. В., г. Магнитогорск (PDF, 1.8 Мб). Универсальный алгоритм, по которому можно собрать кубик Рубика 4х4, 5х5 и больше, вплоть до 11х11.

Кубик Рубика 5х5: Схема сборки в четыре этапа (PDF, 1 Мб) — первый слой, затем углы, контур и наконец центральные слои.

Кубик Рубика 5х5: Схема-инструкция для новичков на двух страницах. Авторский алгоритм Голубчикова И. (PDF, 548 Кб).

Универсальный алгоритм сборки БОЛЬШИХ кубов (6х6, 7х7 … 17х17) по методу Валерия Морозова (PDF, 2.4 Мб). В основе — авторский метод, который позволяет решить кубики Рубика абсолютно любого размера, без единой формулы, опираясь только на логику. Научившись собирать кубики по методу В.Морозова, можно понять, что большие кубы не намного сложней кубиков 2х2х2 и 3х3х3 и решаются при помощи принципов заложенных в них!

И еще кое-что

Листовка «Больше 50 фигур из Змейки Рубика» (PDF, 1.6 Мб).

Нужную вам инструкцию рекомендуем скачать и распечатать!

Пошаговая инструкция: как собрать спортивный комплекс

Если вы читаете это после покупки ДСК, то поздравляем с приобретением! Осталось его собрать, чтобы он начал приносить пользу вам и вашей семье.

Инструкция по сборке на примере детского спорткомплекса Start 1

Что для этого нужно:

 1 человек

 Торцевой ключ ”головка“ на 13мм

 Анкерные болты (10х80) или дюбель-гвозди (12х100, шуруп 8х100) в зависимости от материала стены (для пристенных ДСК).

Если стена бетонная, крепим анкерными болтами. Если кирпичная, то дюбель-гвоздями. ДСК устанавливается на 12 болтов или гвоздей.

Комплексы устанавливаются только к несущим стенам

Создавая эту инструкцию, мы исходили из алгоритма сборки ДСК Start 1. Поэтому в первую очередь она подойдёт для Start1 и пристенных спортивных комплексов.

· Вот ссылка на видеоинструкцию по сборке этого спорткомплекса.

Переходим к пошаговой сборке ДСК. Рассмотрим и пристенные и распорные

Пристенные ДСК

Распаковка. Достаём всё содержимое из коробки

Совет: разложите все детали по списку в инструкции, чтобы не запутаться при сборке. Производите начальную сборку в горизонтальном положении комплекса.

 

Список обязательных деталей

Номер перед строчкой соответствует номеру в схеме сборки, прилагающейся к ДСК

1) Верхняя часть стойки (2шт)

2) Нижняя часть стойки (2шт)

3) Соединительная трубка (2шт)

4) Перекладины обрезиненные (9шт)

5) Перекладина кронштейна (10шт)

6) Крепёж к стене (4шт)

7) Кронштейн потолочной рамы (2шт)

8) Турник (1шт)

13) Пластмассовое полукольцо большое (несколько)

14) Пластмассовое полукольцо малое (несколько)

15) Крепёж для перпендикулярного соединения труб D=38мм (4шт)

16) Переходник пластмассовый (44шт)

17) Крышка переходника (22шт)

18) Колпачок на болт, гайку М8 (26шт)

19) Болт М8х40 (5шт)

20) Болт М8х55 (30шт)

21) Гайка М8 (13шт)

22) Шайба М8 (50шт)

23) Фиксатор шнура (несколько)

24) Гайка М8 самоконтрящаяся (1шт)

25) Кольцо с метрической резьбой (1шт)

26) Заглушка М8 фигурная (1шт)

Необязательные детали – это те, которые зависят от комплектации. Кольца, канаты, тарзанки и т.д. Почти у каждого ДСК своя комплектация.

Этап 1

Вдеваем болты (М8) с шайбой (М8) в переходники (16)

Соедините нижние части стоек (2) с перекладинами (4) с помощью болтов (20)

Вставьте в нижние стойки соединительные трубки (3), зафиксировав их с помощью крепежа к стене (6) и болта (20). Так же фиксируем остальные детали крепежей к стене.

Этап 2

Соедините верхние части стоек (1) с перекладинами (4).

Теперь верхнюю часть соединяем с нижней частью: фиксация с помощью соединительных трубок (3).

Этап 3

На кронштейн потолочной рамы (7) повесьте канат (если он входит в комплектацию). Зафиксируйте кронштейны, соединив их перекладиной (4). Закрепите турник (8).На концах кронштейнов (7), с помощью крепежей (5), болтов и гаек (19, 20, 21)

Этап 4

С помощью крепежей для перпендикулярного соединения труб (15)соедините эту конструкцию с лестницей болтами (20) и гайками (21). Затем установите кольцо с метрической резьбой (25) на любой из кронштейнов потолочной рамы (7)

Этап 5

После сборки выравниваем все соединения комплекса. Это легко, потому что в отверстиях деталей предусмотрены допуски. После выравнивания протяните все болты, гайки и установите все крышки переходников (17) и колпачки (18)Комплекс готов к установке!

 Монтируем его в стену (см. информацию о структуре стен в начале статьи)

 После установки к стене наденьте навесное оборудование. Вместо узлов обязательно используйте полукольца (13, 14) и фиксатор шнура (23)

Ещё раз проверьте каждое крепление и пользуйтесь на здоровье!

Распорные ДСК

Для этих комплексов действует такой же алгоритм: доходим до пункта 5 и выполняем первый подпункт.

 Теперь устанавливаем комплекс враспор

 После установки надеваем навесное оборудование. Вместо узлов обязательно используйте полукольца (13, 14) и фиксатор шнура (23)

Важно

1. Распорные ДСК устанавливаются на прочные бетонные полы и потолки.

2. Если у вас натяжной потолок, то поставить комплекс враспор можно только на специальную площадку-выступ. Это называется «закладнАя». Делается из твёрдых пород дерева. Её надо готовить заранее, до натяжки потолка

 Если вы сделали закладную, то в натяжном потолке делаются прорези под стойки: конструкция уходит в потолок.

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

3. А если полы – деревянные? Обычно, они тоже не подходят. Распорное крепление подразумевает постоянное давление на пол и потолок: за счёт этого держится конструкция. От постоянного давления полы прогибаются, а комплекс теряет жёсткость, – разбалтывается. 
Возможно, получится один-два раза расширить распор, чтобы закрепить ДСК. Но полы будут прогибаться дальше. Всё это вредно для пола и вообще угрожает здоровью: шаткая конструкция опасна.

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

Альтернативный способ:

заказать сборку у нас! Наш специалист приедет с нужными инструментами и установит ДСК.

Как заказать?

  • у продавца в магазине
  • у менеджера при заказе
  • или в комментариях к заказу на сайте

Запись сборки ARM (Часть 1)

Добро пожаловать в эту серию руководств по основам сборки ARM. Это подготовка к следующей серии руководств по разработке эксплойтов для ARM. Прежде чем мы сможем погрузиться в создание шелл-кода ARM и построение цепочек ROP, нам нужно сначала осветить некоторые основы сборки ARM.

Пошагово будут рассмотрены следующие темы:

Учебное пособие по основам сборки ARM

:
Часть 1: Введение в сборку ARM
Часть 2: Регистры типов данных
Часть 3: Набор инструкций ARM
Часть 4: Инструкции памяти: загрузка и сохранение данных
Часть 5: Загрузка и сохранение нескольких частей
6: Условное выполнение и ветвление
Часть 7: Стек и функции

Чтобы следовать примерам, вам понадобится лабораторная среда на базе ARM.Если у вас нет устройства ARM (например, Raspberry Pi), вы можете настроить свою собственную лабораторную среду на виртуальной машине с помощью QEMU и дистрибутива Raspberry Pi, следуя этому руководству. Если вы не знакомы с базовой отладкой с помощью GDB, вы можете получить основы в этом руководстве. В этом руководстве основное внимание будет уделено 32-разрядной версии ARM, а примеры скомпилированы на ARMv6.

Почему ARM?

Это руководство обычно предназначено для людей, которые хотят изучить основы сборки ARM. Специально для тех из вас, кто интересуется написанием эксплойтов на платформе ARM.Возможно, вы уже заметили, что процессоры ARM повсюду вокруг вас. Когда я оглядываюсь вокруг, я могу насчитать в моем доме гораздо больше устройств с процессором ARM, чем процессоры Intel. Сюда входят телефоны, маршрутизаторы и, не говоря уже об устройствах Интернета вещей, продажи которых в наши дни, похоже, стремительно растут. Тем не менее, процессор ARM стал одним из самых распространенных ядер ЦП в мире. Это подводит нас к тому факту, что, как и ПК, устройства Интернета вещей подвержены неправильным злоупотреблениям при проверке ввода, таким как переполнение буфера.Учитывая широкое использование устройств на базе ARM и возможность неправильного использования, атаки на эти устройства стали гораздо более распространенными.

Тем не менее, у нас больше экспертов, специализирующихся на исследованиях безопасности x86, чем в ARM, хотя язык ассемблера ARM, пожалуй, самый простой из широко распространенных языков ассемблера. Итак, почему все больше людей не уделяют внимания ARM? Возможно, потому, что существует больше учебных ресурсов, посвященных эксплуатации на Intel, чем на ARM. Подумайте о великолепных руководствах по Intel x86 Exploit, написанных Fuzzy Security или Corelan Team — подобные руководства помогают людям, интересующимся этой конкретной областью, получить практические знания и вдохновение для изучения, выходящего за рамки того, что описано в этих руководствах.Если вы заинтересованы в написании эксплойтов для x86, учебники Corelan и Fuzzysec станут вашей идеальной отправной точкой. В этой серии руководств мы сосредоточимся на основах сборки и написании эксплойтов на ARM.

Процессор

ARM против процессора Intel

Между Intel и ARM много различий, но главное отличие — это набор команд. Intel — это процессор CISC (Compstruction Set Computing), который имеет более крупный и многофункциональный набор инструкций и позволяет многим сложным инструкциям обращаться к памяти.Поэтому у него больше операций, режимов адресации, но меньше регистров, чем у ARM. Процессоры CISC в основном используются на обычных ПК, рабочих станциях и серверах.

ARM является процессором RISC (вычисление с сокращенным набором инструкций) и поэтому имеет упрощенный набор инструкций (100 инструкций или меньше) и регистры более общего назначения, чем CISC. В отличие от Intel, ARM использует инструкции, которые работают только с регистрами, и использует модель памяти Load / Store для доступа к памяти, что означает, что только инструкции Load / Store могут обращаться к памяти.Это означает, что для увеличения 32-битного значения по определенному адресу памяти на ARM потребуется три типа инструкций (загрузка, увеличение и сохранение), чтобы сначала загрузить значение по определенному адресу в регистр, увеличить его в регистре и сохранить это обратно в память из реестра.

Уменьшенный набор команд имеет свои достоинства и недостатки. Одним из преимуществ является то, что инструкции могут выполняться быстрее, потенциально обеспечивая большую скорость (системы RISC сокращают время выполнения за счет сокращения тактовых циклов на инструкцию).Обратной стороной является то, что меньшее количество инструкций означает больший акцент на эффективном написании программного обеспечения с ограниченными доступными инструкциями. Также важно отметить, что ARM имеет два режима: режим ARM и режим Thumb. Инструкции Thumb могут быть 2 или 4 байтами (подробнее об этом в Части 3: Набор инструкций ARM).

Еще больше различий между ARM и x86:

  • В ARM большинство инструкций можно использовать для условного выполнения.
  • Процессоры Intel серии x86 и x86-64 используют формат с прямым порядком байтов
  • Архитектура ARM была прямым порядком байтов до версии 3.С тех пор процессоры ARM стали BI-endian и имеют настройку, которая позволяет переключать endianness .

Есть различия не только между Intel и ARM, но и между разными версиями ARM. Эта серия руководств призвана сделать ее как можно более общей, чтобы вы получили общее представление о том, как работает ARM. Как только вы поймете основы, легко узнать нюансы для выбранной вами целевой версии ARM. Примеры в этом руководстве были созданы на 32-битной ARMv6 (Raspberry Pi 1), поэтому пояснения относятся именно к этой версии.

Названия различных версий ARM также могут сбивать с толку:

Семейство ARM Архитектура ARM
ARM7 ARM v4
ARM9 ARM v5
ARM11 ARM v6
Cortex-А ARM v7-A
Cortex-R ARM v7-R
Cortex-M ARM v7-M

Прежде чем мы сможем погрузиться в разработку эксплойтов для ARM, нам сначала необходимо понять основы программирования на языке ассемблера, для чего требуются некоторые базовые знания, прежде чем вы сможете начать ценить его.Но зачем нам вообще сборка ARM, разве этого не достаточно, чтобы писать наши эксплойты на «нормальном» языке программирования / сценариев? Это не так, если мы хотим иметь возможность выполнять обратный инжиниринг и понимать программный поток двоичных файлов ARM, создавать собственный шелл-код ARM, создавать цепочки ARM ROP и отлаживать приложения ARM.

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

Так что же такое ассемблер? Язык ассемблера — это просто тонкий слой синтаксиса поверх машинного кода, который состоит из инструкций, закодированных в двоичных представлениях (машинный код), что и понимает наш компьютер. Так почему бы вместо этого просто не написать машинный код? Что ж, это было бы занозой в заднице. По этой причине мы напишем сборку ARM, которая намного проще для понимания людьми.Наш компьютер не может запускать ассемблерный код сам, потому что ему нужен машинный код. Инструмент, который мы будем использовать для сборки кода сборки в машинный код, — это GNU Assembler из проекта GNU Binutils с именем as , который работает с исходными файлами, имеющими расширение * .s.

После того, как вы написали файл сборки с расширением * .s, вам нужно собрать его с помощью as и связать с ld:

 $ как program.s -o program.o
$ ld program.o -o программа 

Давайте начнем с самого низа и перейдем к языку ассемблера.На самом низком уровне у нас есть электрические сигналы в нашей цепи. Сигналы формируются путем переключения электрического напряжения на один из двух уровней, например, 0 вольт («выключено») или 5 вольт («включено»). Поскольку просто посмотрев, мы не можем легко определить, какое напряжение находится в цепи, мы решили записать шаблоны включенных / выключенных напряжений, используя визуальные представления, цифры 0 и 1, чтобы не только представить идею отсутствия или наличия сигнал, но также потому, что 0 и 1 — цифры двоичной системы. Затем мы группируем последовательность 0 и 1, чтобы сформировать инструкцию машинного кода, которая является наименьшей рабочей единицей процессора компьютера.Вот пример инструкции на машинном языке:

1110 0001 1010 0000 0010 0000 0000 0001

Пока все хорошо, но мы не можем вспомнить, что означает каждый из этих шаблонов (0 и 1). По этой причине мы используем так называемую мнемонику, аббревиатуры, чтобы помочь нам запомнить эти двоичные шаблоны, где каждой инструкции машинного кода дается имя. Эти мнемоники часто состоят из трех букв, но это не обязательно. Мы можем написать программу, используя эту мнемонику в качестве инструкций.Эта программа называется программой на языке ассемблера, а набор мнемоник, который используется для представления машинного кода компьютера, называется языком ассемблера этого компьютера. Следовательно, язык ассемблера — это самый низкий уровень, используемый людьми для программирования компьютера. Операнды инструкции идут после мнемоники. Вот пример:

MOV R2, R1

Теперь, когда мы знаем, что программа сборки состоит из текстовой информации, называемой мнемоникой, нам нужно преобразовать ее в машинный код.Как упоминалось выше, в случае сборки ARM проект GNU Binutils предоставляет нам инструмент с именем как . Процесс использования ассемблера, такого как как , для преобразования из языка ассемблера (ARM) в машинный код (ARM) называется сборкой.

Таким образом, мы узнали, что компьютеры понимают (реагируют) на наличие или отсутствие напряжений (сигналов) и что мы можем представлять несколько сигналов в виде последовательности нулей и единиц (битов). Мы можем использовать машинный код (последовательности сигналов), чтобы заставить компьютер реагировать определенным образом.Поскольку мы не можем вспомнить, что означают все эти последовательности, мы даем им сокращения — мнемонику и используем их для представления инструкций. Этот набор мнемоник является языком ассемблера компьютера, и мы используем программу под названием Assembler для преобразования кода из мнемонического представления в машиночитаемый машинный код так же, как это делает компилятор для языков высокого уровня.

Руководство пользователя ассемблера

: IT

If-Then.

Синтаксис

IT { x { y { z }}} { конд }

где:

x

определяет переключатель условий для второй инструкции в ИТ-блоке.

y

определяет переключатель условий для третьей инструкции в ИТ-блоке.

z

определяет переключатель условий для четвертой инструкции в ИТ-блоке.

конд

определяет условие для первой инструкции в ИТ-блоке.

Переключатель состояния для второй, третьей и четвертой инструкции в блоке IT может быть:

т

Тогда.Применяет условие cond к Инструкция.

E

Остальное. Применяет обратное условие cond к Инструкция.

Использование

Инструкция IT составляет до четырех следующих инструкций ( IT блок ) условный. Условия могут быть одинаковыми, или некоторые из них. может быть логическим обратным по отношению к другим.

Инструкции (включая ответвления) в ИТ-блоке, кроме BKPT инструкция, должна указывать условие в { cond } часть их синтаксиса.

Вы не обязаны писать инструкции IT в вашем коде, потому что ассемблер генерирует их автоматически в соответствии с условиями, указанными в следующих инструкциях. Тем не мение, если вы напишете инструкции IT , ассемблер проверяет условия, указанные в инструкциях IT с условиями, указанными в следующих инструкциях.

Написание инструкций IT гарантирует что вы учитываете размещение условных инструкций, и выбор условий, в оформлении вашего кода.

При ассемблировании в код ARM ассемблер выполняет то же самое проверяет, но не генерирует инструкции IT .

За исключением CMP , CMN, и TST , 16-битные инструкции, которые обычно влияют на флаги условий, не влияют на них при использовании внутри IT-блока.

A Инструкция BKPT в IT-блоке всегда выполняется, поэтому для него не требуется условие в { cond } часть его синтаксиса.Блок IT продолжается со следующей инструкции.

Примечание

Вы можете использовать блок IT для безусловного инструкции, используя условие AL .

Условные ветви внутри IT-блока имеют более длинную ветвь диапазона, чем те, которые находятся за пределами ИТ-блока.

Ограничения

Следующие инструкции не разрешены в блоке IT:

  • IT .

  • CBZ и CBNZ .

  • TBB и TBH .

  • CPS , CPSID и CPSIE .

  • СЕТЕНД .

Другие ограничения при использовании IT-блока:

  • Ветвь или любая инструкция, изменяющая ПК разрешено только в IT-блоке, если это последняя инструкция в блок.

  • Вы не можете перейти к какой-либо инструкции в блоке IT, кроме случаев возврата из обработчика исключений.

  • Вы не можете использовать директивы ассемблера в ИТ-среде. блокировать.

Примечание

Ассемблер показывает диагностическое сообщение, когда любой из этих инструкции используются в блоке IT .

Флаги состояния

Эта инструкция не изменяет флаги.

Исключения

Исключения могут возникать между инструкцией IT и соответствующий ИТ-блок или внутри ИТ-блока.Это исключение приводит к входу в соответствующий обработчик исключений с подходящим вернуть информацию в LR и SPSR.

Инструкции, предназначенные для использования в качестве возврата исключения, могут быть используется как обычно для возврата из исключения, и выполнение ИТ-блок возобновляется правильно. Это единственный способ, которым ПК-модифицирует инструкция может перейти к инструкции в IT-блоке.

Архитектуры

Эта 16-битная инструкция Thumb доступна в ARMv6T2 и выше.

В коде ARM IT — псевдо-инструкция это не генерирует никакого кода.

32-битной версии этой инструкции не существует.

Правильные примеры

    ITTE NE; IT можно опустить
    ANDNE r0, r0, r1; 16-битное И, а не И
    ADDSNE r2, r2, # 1; 32-битные ADDS (16-битные ADDS не устанавливают флаги в
                     ; ИТ блок)
    MOVEQ r2, r3; 16-битный MOV
    ITT AL; испустить 2 16-битные инструкции без установки флага
    АДДАЛ r0, r0, r1; 16-битное ADD, а не ADDS
    SUBAL r2, r2, # 1; 16-битный SUB, не SUB
    ДОБАВИТЬ r0, r0, r1; расширяется до 32-битного ADD и не находится в IT-блоке
    ITT EQ
    MOVEQ r0, r1
    BEQ dloop; ветвь в конце IT-блока разрешена
    ITT EQ
    MOVEQ r0, r1
    БКПТ №1; BKPT всегда выполняет
    ADDEQ r0, r0, # 1
 

Неправильный пример

    IT NE
    ДОБАВИТЬ r0, r0, r1; синтаксическая ошибка: в ИТ-блоке не используется код условия
 

Учимся читать язык ассемблера x86

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

Чтение языка ассемблера , с другой стороны, не так сложно и может быть полезным навыком: когда-нибудь вам может понадобиться отлаживать код, не имея первоисточник.Вы начнете понимать, на что способен микропроцессор, и не может этого сделать, читая его язык напрямую. И ты оценишь и понять свой любимый язык программирования еще больше, увидев свой собственный код переведен в машинные инструкции низкого уровня.

Но самое главное, изучение языка ассемблера может быть очень интересным.

Обновление : Ахмад Каримов только что опубликовал русский перевод этого статья в его сети сайт.

Обычно читать язык ассемблера совсем неинтересно

К сожалению, большинство из нас видит язык ассемблера только после того, как что-то исчезло. неправильно, ужасно неправильно, когда мы сталкиваемся с чем-то вроде этого:

Так выглядит ошибка сегментации в отладчике.Отладчик показывает я ассемблер, потому что он не знает, что мне еще показать. А «Ошибка сегментации» означает одну из инструкций на языке ассемблера, для например, строка movb $ 0x6c, 0x1 (% rax) выше, имеет попытался записать в часть памяти, которая не разрешена.

Неудивительно, что большинству из нас не нравится такое чтение низкоуровневого кода. Мы только когда мы находимся в процессе отладки чего-либо, когда язык и инструменты, на которые мы обычно полагаемся, нас подвели. Мы никогда не видим сборки язык в более счастливых обстоятельствах; он всегда несет плохие новости.

Преобразование собственного кода в язык ассемблера

На этой неделе у меня было немного свободного времени, и я решил почитать ассемблер, просто ради забавы. Я хотел читать низкоуровневый код, который работал правильно, а не код это перезаписывало память какого-то другого процесса. Я хотел посмотреть, смогу ли я понимать его, как любой другой язык программирования. Чтобы было проще, я решил перевести часть своего кода на язык ассемблера, чтобы я мог сосредоточиться на синтаксисе языка ассемблера. Было легче понять, что за инструкции означали, потому что я знал, что они делали.

Я разработчик Ruby, поэтому мне было интересно узнать, как мой код Ruby будет посмотрите переведенный на ассемблер. К сожалению, интерпретатор Ruby (в по крайней мере, стандартная версия Ruby для МРТ никогда этого не делает. Вместо этого Ruby сам интерпретатор скомпилирован на машинный язык и запускает мой код с помощью виртуальная машина. Но я хотел увидеть, что будет делать настоящая машина, а не виртуальный.

Вместо этого я решил использовать Crystal, вариацию на Ruby, использующий LLVM для компиляции Ruby на собственный компьютер язык перед запуском.И поскольку система LLVM также может производить версия кода на ассемблере, которую он производит, использование Crystal было идеальный способ увидеть мой код Ruby, переведенный так, чтобы микропроцессор мог понимать это.

Я начал с написания очень простой программы, которая добавляет 42 к заданному целое число:


def add_forty_two (п)
  п + 42
конец

кладет add_forty_two (10)
 

Это был код Ruby:

$ ruby ​​add_forty_two.rb
52
 

и код кристалла:

$ кристалл add_forty_two.rb
52
 

Разумеется, оба дали одинаковый результат. Но только Кристалл мог произвести копию на языке ассемблера:

$ crystal build add_forty_two.rb --emit asm
 

Таким образом был создан файл с именем add_forty_two.s, содержащий 10 000 строк код языка ассемблера. (По большей части это была скомпилированная версия Crystal библиотека времени выполнения.) Я открыл add_forty_two.s в текстовом редакторе и поискал «Add_forty_two», имя моей функции. Сначала я нашел сайт звонка, код который вызывает мою функцию add_forty_two:

Я вернусь к этому чуть позже.Поискав снова, я нашел сборку x86 языковая версия моей функции:

Затем я удалил все директивы ассемблера, такие как .globl и .cfi_offset. Когда-нибудь было бы интересно узнать об этом, но я хотел сосредоточиться на фактические машинные инструкции. И, наконец, я вставил оставшийся код внутрь моей функции Ruby.

Затем я увидел, что на самом деле делает мой компьютер, когда выполняет add_forty_two:

Язык ассемблера x86: почти легко читается

Этот код почти легко понять.Я могу догадаться, что означает каждая инструкция: нажимать, добавлять, перемещать и т. д., но я не могу понять, что здесь происходит. mov вероятно означает переехать, но что это за компьютер движущийся? А откуда куда?


Ассемблер x86 был разработан в Венгрии?

Проблема в том, что ассемблер x86 был разработан венграми. Я не означает это буквально; на самом деле я понятия не имею, кто проектировал сборку x86 язык. Я имею в виду, что код x86 напоминает мне венгерский язык.

В 1992 году я прожил в Будапеште около года и успел стать разговорный на венгерском, хотя с тех пор я все это забыл. А красивый язык, венгерский, как известно, трудно выучить иностранцам. Связанный только с финским и эстонским, его грамматика не похожа на итальянскую, Французский или другие романские языки; он не похож ни на русский, ни на какой-либо из другие славянские языки из Восточной Европы.

Я до сих пор помню одну часть венгерской грамматики: вместо использования отдельные слова для предлогов, например, внутри, снаружи и т. д.вы добавляете разные суффиксы к целевому слову. Например, «внутри дома» будет a házban . Дом ház , а внутри — запрет . Точно так же «в Будапеште» быть Budapesten — суффикс en означает «дюйм.» код языка ассемблера x86 напоминает мне венгерский. Вы не используете mov для перемещения что-нибудь; вы используете movq. Вы ничего не добавляете; вы используете addl инструкция.

Оказывается, сборка x86 намного проще венгерской; есть только несколько простые суффиксы, которые относятся к размеру данных, с которыми вы работаете.Здесь два примера:

Инструкция addl на самом деле означает «добавить длинное», где «Длинный» относится к 4-байтовому или 32-битному значению. В Crystal это соответствует Тип Int32, который является целочисленным типом по умолчанию, и введите мой метод add_forty_two.

Вот еще один пример:

Буква q относится к «четверному» слову или 8-байтовому или 64-битному значению. Большинство x86 код в наши дни работает с 64-битными или 32-битными значениями, поэтому вы чаще всего будете видеть инструкции, заканчивающиеся на q или l .Другие суффиксы: w для слова (16 бит или 2 байта) или b для 1 байта или 8 бит.

Регистры x86

А как насчет всех операндов инструкций? Почему у всех есть Префикс «%», например% rsp или% edi? Чтение ассемблера x86 также напоминает мне чтение кода Perl. Множество знаков препинания без видимой причины. Похожий в Perl язык ассемблера x86 использует сигилов, или магические знаки препинания. чтобы указать тип каждого значения операнда.

Вот еще раз два моих примера инструкций:

Здесь символ «$» означает, что 42 является буквальным или «непосредственным» значением. Как и ты Можно догадаться, что это строка кода, которая к чему-то прибавляет 42. Но что значит это добавить? По символу «%» мы видим, что код x86 добавляет 42 к регистр edi.

А что такое реестр? Короче говоря, микропроцессор внутри вашего компьютера использует регистры для хранения значений во время выполнения вашего кода. Итак, инструкция выше добавляет 42 к любому значению, содержащемуся в регистре edi, и сохраняет его обратно в edi.

Вот еще раз второй пример:

Эта инструкция movq относится к двум регистрам: rsp и rbp. Как вы можете думаю, он перемещает любое значение, найденное в rsp зарегистрироваться в регистре rbp.

Сколько там регистров? Как они называются? Давайте посмотрим на них, используя LLDB:

(lldb) регистр читать
Регистры общего назначения:
       rax = 0x0000000100300268
       rbx = 0x0000000000000000
       rcx = 0x00007fffd8132201 libsystem_kernel.dylib`__shmsys + 9
       rdx = 0x0000000000000000
       rdi = 0x000000000000000a
       rsi = 0x00007fff5fbff898
       rbp = 0x00007fff5fbffa30
       rsp = 0x00007fff5fbff908
        r8 = 0x0000000100014b60 add`sigfault_handler
        r9 = 0x0000000100400000
       r10 = 0x0000000000000000
       r11 = 0x0000000000000206
       r12 = 0x0000000000000000
       r13 = 0x0000000000000000
       r14 = 0x0000000000000000
       r15 = 0x0000000000000000
       rip = 0x0000000100013cd0 add` * add_forty_two: Int32
    rflags = 0x0000000000000202
        cs = 0x000000000000002b
        fs = 0x0000000000000000
        gs = 0x0000000000000000
 

Как видите, в процессоре Intel моего Mac более 20 регистров, каждый содержащий 64-битное или 8-байтовое значение.LLDB показывает значения в шестнадцатеричном формате. я сегодня нет времени объяснять, для чего используются все эти регистры, но вот несколько основных моментов:

  • rax, rbx, rcx и rdx являются универсальными регистры, используемые для хранения промежуточных значений, загруженных из памяти или используемых во время какого-то расчета.

  • rsp — указатель стека, в котором хранится память. расположение вершины стека.

  • rbp — это базовый указатель, в котором хранится память. расположение базы текущего кадра стека

  • rip — это указатель инструкции, в которой место в памяти следующей инструкции для выполнения

  • и rflags содержит серию флагов, используемых инструкции по сравнению, например.

Фактически, в современном микропроцессоре x86 гораздо больше регистров; LLDB — это показаны только наиболее часто используемые регистры. Для полного объяснения, исчерпывающее руководство по всему этому — от Intel Software Developer Руководство по эксплуатации. К счастью, код моей функции на языке ассемблера использует только несколько регистров. я не нужно понимать их все.

Но подождите минутку. Почему моя инструкция addl ссылается на в реестр edi? Этого нет в списке регистры показаны LLDB.Где происходит эта операция добавления? Какой регистр он использует?

Это снова венгерские дизайнеры. Оказывается, язык ассемблера x86 также украшает имена регистров, чтобы указать их размеры, аналогично тому, что мы видел выше с суффиксами имени инструкции. Но для имен регистров синтаксис x86 использует префиксы, а не суффиксы. (В программировании на C венгерская нотация на самом деле относится к практике использования префиксов в именах переменных для обозначения их тип.)

Что? Это безумие! Зачем какой-либо язык программирования использовать префиксы для укажите размер данных в одном месте, но затем используйте суффиксы, чтобы указать то же самое вещь где-нибудь еще? Чтобы понять это, вы должны помнить, что сборка синтаксис языка не был разработан в одночасье.Вместо этого он постепенно эволюционировал из на протяжении многих лет. Первоначально в регистрах использовались простые двухбуквенные имена: ax, bx, cx. dx, sp и ip. Это были регистры на оригинальном 16-битном микропроцессоре 8086 1970-х годов. Позже 1980-е годы, когда Intel построила 32-битные микропроцессоры, начиная с 80386, они переименовали (или расширили ) регистры ax, bx, cx и т. д., чтобы они стали eax, ebx, ecx и т. д. Позднее они были снова переименованы в rax, rbx и т. д. для 64-битной версии. процессоры.

Как вы можете видеть здесь, даже сегодня ассемблерный код x86 может относиться к тому же зарегистрируйтесь, используя много разных имен, например al или ah для 8-битных, ax bit 16 биты, eax для 32 бит и rax для 64 бит.

Язык ассемблера x86: читается слева направо, кроме случаев, когда он читается справа налево

Возвращаясь к инструкции движения сверху, как мы узнаем, в какую сторону двигаться? бывает?

То есть перемещает ли эта инструкция данные из rsp в rbp? Или с rbp на rsp? Читается ли он слева направо или справа налево?

Может быть и так! Оказывается, есть две версии x86 синтаксис: синтаксис «AT&T или GNU Assembler (GAS)», который я использовал до сих пор, а также синтаксис Intel.ГАЗ читает слева направо:


Синтаксис AT & T / GAS

Но столь же действенным и распространенным является синтаксис Intel, который читается справа налево:


Синтаксис Intel

Если вы видите символы, подобные Perl (например,% rsp и% rbp), значит, вы читаете синтаксис и значения GAS. будет двигаться слева направо. Если вы не видите знаков «%» или «$», значит, вы имеют синтаксис Intel и значения перемещаются справа налево. Также обратите внимание на синтаксис Intel не добавляет «q» или «l» к именам инструкций.Этот статья делает отличная работа по объяснению различий между двумя стилями.

Что за крушение поезда! Трудно представить более запутанное положение вещей. Но опять же, помните, что все это развивалось в течение 40 лет. Это не было разработан любым человеком в любое время. Огромное количество история каждой инструкции языка ассемблера x86.

Выполнение моей простой программы

Теперь, когда я разбираюсь в основах синтаксиса ассемблера x86, я готов вернуться к моему коду add_forty_two и попробовать понять, как это работает.Вот он снова:

Читая 6 инструкций внутри add_forty_two, выполняются три разные операции. Сначала мы устанавливаем новый стек рамка для нашей функции:

Фрейм стека — это область памяти, которую мой код может использовать для сохранения локальных переменная и другая информация. Я не буду тратить на это время сегодня, потому что мой код настолько прост, что не использует никаких локальных переменных. Последние две инструкции очистите этот кадр стека и вернитесь к вызывающему коду:

Я тоже не буду говорить об этом сегодня.В следующей статье я немного расскажу более сложный пример, содержащий локальные переменные и объясняющий, как x86 ассемблерный код обращается к ним в стеке.

Сегодня я хочу сосредоточиться на двух инструкциях посередине, которые на самом деле реализовать add_forty_two:

У нас осталось две инструкции на ассемблере, но до очевидно, что означает этот код! Ключ к пониманию этих двух инструкций состоит в том, чтобы понять, что аргументом моей функции n является передано в регистр:

Мы можем убедиться, что это правда, вернувшись к месту вызова в add_forty_two.s файл, в код, который вызывает мою функцию:

Обратите внимание, как первая инструкция movl копирует значение 10 в регистр edi (младшие 32 бита регистр rdi):

Далее инструкция callq вызывает мою функцию с 10 в редакции:

Итак, когда команда addl будет запущена, она добавит 42 к аргумент 10.

Далее выполняется инструкция movl и копирует результат 52 с edi на eax:

Это, в свою очередь, становится значением, возвращаемым моей функцией:

Опять же, мы можем убедиться в этом, снова прочитав код сайта звонка:

Что происходит после возврата add_forty_two? Он движется % eax, возвращаемое значение, в% edi, где оно становится аргументом второй функции вызов, вызов ставит.

Я не уверен, что этот шаблон использования% edi и регистры% eax для хранения аргументов функции и возвращаемые значения — стандартное соглашение x86. Я предполагаю, что вместо этого шаблон, который использует генератор кода LLVM. Возможно, LLVM использует только это метод для функции с одним аргументом и одним возвращаемым значением, например add_forty_two.

В следующий раз

Я мало что сделал, но уже начинаю разбираться в сборке x86 язык. Почти неразборчиво, когда я впервые увидел это, теперь я могу начать следить что делают машинные инструкции при выполнении моего кода.Ключом было обучение как меняются имена инструкций и регистров в зависимости от размера ценность, которой они оперируют.

Конечно, есть чему поучиться. В следующей статье я рассмотрю как микропроцессор x86 использует стек для сохранения значений и как это соотносится с Ruby на более сложном примере. Попутно я узнаю о Еще несколько важных синтаксических правил ассемблера x86.

c — Как перейти от сборки к машинному коду (генерация кода)

Первое, что вам понадобится, это что-то вроде этого файла.Это база данных инструкций для процессоров x86, используемая ассемблером NASM (который я помогал писать, но не те части, которые фактически переводят инструкции). Выберем произвольную строку из базы данных:

  ДОБАВИТЬ rm32, imm8 [mi: hle o32 83/0 ib, s] 386, LOCK
  

Это означает, что он описывает инструкцию ADD . Существует несколько вариантов этой инструкции, и конкретный, описанный здесь, представляет собой вариант, который принимает либо 32-битный регистр, либо адрес памяти и сразу же добавляет 8-битное значение (т.е. константа, прямо включенная в инструкцию). Пример инструкции по сборке, в которой будет использоваться эта версия:

  добавить eax, 42
  

Теперь вам нужно взять введенный текст и разобрать его на отдельные инструкции и операнды. Для приведенной выше инструкции это, вероятно, приведет к структуре, содержащей инструкцию ADD и массив операндов (ссылка на регистр EAX и значение 42 ). Получив эту структуру, вы просматриваете базу данных инструкций и находите строку, которая соответствует как имени инструкции, так и типам операндов.Если вы не найдете совпадения, это ошибка, которую необходимо сообщить пользователю («недопустимая комбинация кода операции и операндов» или аналогичный — это обычный текст).

Получив строку из базы данных, мы смотрим на третий столбец, который для этой инструкции равен:

  [mi: hle o32 83/0 ib, s]
  

Это набор инструкций, описывающих, как сгенерировать необходимую инструкцию машинного кода:

  • mi — это описание операндов: один операнд modr / m (регистр или память) (что означает, что нам нужно добавить байт modr / m в конец инструкции, который мы вернемся к нему позже) и одна непосредственная инструкция (которая будет использоваться в описании инструкции).
  • Далее идет hle . Это определяет, как мы обрабатываем префикс «блокировки». Мы не использовали «замок», поэтому игнорируем его.
  • Далее идет o32 . Это говорит нам о том, что если мы собираем код для 16-битного формата вывода, инструкции нужен префикс переопределения размера операнда. Если бы мы производили 16-битный вывод, мы бы создали префикс сейчас ( 0x66 ), но я предполагаю, что это не так, и продолжаем.
  • Далее идет 83 . Это буквальный байт в шестнадцатеричном формате.Выводим его.
  • Далее /0 . Это определяет некоторые дополнительные биты, которые нам понадобятся в байтеме modr / m, и заставляет нас его сгенерировать. modr / m байт используется для кодирования регистров или косвенных ссылок на память. У нас есть единственный такой операнд — регистр. Регистр имеет номер, который указан в другом файле данных:

    .
      eax REG_EAX reg32 0
      
  • Проверяем, что reg32 соответствует требуемому размеру инструкции из исходной базы (соответствует). 0 — это номер регистра. modr / m байт — это структура данных, заданная процессором, которая выглядит следующим образом:

      (старший бит)
     2 бита mod - 00 => косвенный, например [eax]
                           01 => косвенное плюс байтовое смещение
                           10 => косвенное смещение плюс слова
                           11 => зарегистрироваться
     3 бита reg - идентифицирует регистр
     3 бита rm - идентифицирует второй регистр или дополнительные данные
     (младший бит)
      
  • Поскольку мы работаем с регистром, поле mod составляет 0b11 .

  • Поле reg — это номер регистра, который мы используем, 0b000
  • Поскольку в этой инструкции только один регистр, нам нужно чем-то заполнить поле rm . Для этого нужны дополнительные данные, указанные в /0 , поэтому мы помещаем их в поле rm , 0b000 .
  • modr / m байт, следовательно, 0b11000000 или 0xC0 . Выводим это.
  • Далее идет ib, s .Это указывает непосредственный байт со знаком. Мы смотрим на операнды и замечаем, что у нас есть немедленное доступное значение. Преобразуем его в байт со знаком и выводим ( 42 => 0x2A ).

Таким образом, полная собранная инструкция имеет следующий вид: 0x83 0xC0 0x2A . Отправьте его в свой модуль вывода вместе с примечанием, что ни один из байтов не является ссылками на память (модулю вывода может потребоваться знать, соответствуют ли они).

Повторяйте для каждой инструкции. Следите за ярлыками, чтобы знать, что вставлять, когда на них ссылаются.Добавьте средства для макросов и директив, которые передаются в модули вывода объектного файла. И так работает ассемблер.

Инструкции по сборке и разборке

— Драйверы для Windows

  • 2 минуты на чтение

В этой статье

Механизм отладчика поддерживает использование языка ассемблера для отображения и изменения кода в целевом объекте.Обзор использования языка ассемблера в отладчике см. В разделе «Отладка в режиме сборки».

Примечание Язык ассемблера поддерживается не для всех архитектур. А на некоторых архитектурах поддерживаются не все инструкции.

Чтобы собрать одну инструкцию на языке ассемблера и поместить получившуюся инструкцию процессора в целевую память, используйте Assemble .

Чтобы дизассемблировать отдельную инструкцию, взяв инструкцию процессора от цели и создав строку, представляющую инструкцию ассемблера, используйте Disassemble .

Метод GetDisassembleEffectiveOffset возвращает первый действующий адрес последней инструкции, подлежащей дизассемблированию. Например, если последняя дизассемблируемая инструкция — move ax, [ebp + 4] , эффективным адресом будет значение ebp + 4 . Это соответствует псевдорегистратору $ ea .

Чтобы отправить дизассемблированные инструкции в обратные вызовы вывода, используйте методы OutputDisassembly и OutputDisassemblyLines .

У модуля отладчика есть несколько параметров, которые управляют сборкой и разборкой. Эти параметры возвращаются GetAssemblyOptions . Их можно установить с помощью SetAssemblyOptions , а некоторые параметры можно включить с помощью AddAssemblyOptions или отключить с помощью RemoveAssemblyOptions .

Синтаксис языка ассемблера

от Valvano

Синтаксис языка ассемблера от Valvano

Разработка программного обеспечения на языке ассемблера
Синтаксис
Джонатан У.Valvano

В этой статье обсуждается программирование на языке ассемблера, прилагается к книге Embedded Microcomputer Systems: Real Time Interfacing , опубликованной Brooks-Cole 1999. В этом документе всего четыре части
Обзор
Синтаксис (поля, псевдооперации) (этот документ)
Локальные переменные
Примеры


Синтаксис языка ассемблера
Программы, написанные на языке ассемблера, состоят из последовательности исходных заявлений.Каждый исходный оператор состоит из последовательности символов ASCII, оканчивающихся символом возврата каретки. Каждое исходное заявление может включать до четырех полей: метка, операция (инструкция мнемоническая или ассемблерная директива), операнд и комментарий. В ниже приведены примеры директивы сборки и обычного машинная инструкция.
PORTAequ $ 0000; Постоянная времени сборки
ИнплдааПОРТА; Чтение данных из порта данных ввода / вывода с фиксированным адресом

Оператор на языке ассемблера содержит следующие поля.
Label Field может использоваться для определения символа.
Operation Field определяет код операции или псевдооперацию.
Operand Field определяет адрес или данные.
Поле комментариев позволяет программисту документировать программное обеспечение.

Иногда не все четыре поля присутствуют в ассемблере утверждение. Строка может содержать просто комментарий. Первый токен в этих строках должны начинаться со звездочки (*) или точки с запятой (;). Например,
; Эта строка является комментарием
* Это тоже комментарий
* Эта строка является комментарием

Команды с адресацией в собственном режиме не имеют операнда поле.Например,
labelclracomment
decacomment
clicomment
incacomment


Рекомендация : Для небольших программ вы включаете автоматическую сборку цветов. В После этого редактор раскрасит каждое поле в соответствии с его типом.

Рекомендация : Для больших программ отключите автоматические цвета сборки, потому что система будет работать слишком медленно. Вместо этого используйте ассемблер для раскрашивания исходный код.

————————————————- ————————————-
Поле метки
Поле метки появляется как первое поле исходной выписки. Поле метки может принимать одну из следующих трех форм:

A. Звездочка (*) или точка с запятой (;) в качестве первого символа в поле метки указывает, что остальная часть исходной инструкции это комментарий. Комментарии игнорируются Ассемблером и печатаются в списке источников только для информации программиста.Примеры:
* Эта строка представляет собой комментарий
; Эта строка также является комментарием

B. Пробельный символ (пробел или табуляция) в качестве первого символа. указывает, что поле метки пусто. У линии нет метки и это не комментарий. На этих сборочных линиях нет этикеток:
ldaa0
rmb10


C. Символ символа в качестве первого символа указывает на то, что строка имеет метку. Символы символов в верхнем или нижнем регистре. буквы a-z, цифры 0-9 и специальные символы, точка (.), знак доллара ($) и подчеркивание (_). Символы состоят от одного до 15 символов, первый из которых должен быть буквенным или специальным. символы точка (.) или подчеркивание (_). Все персонажи значительны буквы верхнего и нижнего регистра различны.

Символ может встречаться в поле метки только один раз. Если символ встречается более одного раза в поле метки, затем каждая ссылка на этот символ будет отмечен ошибкой. Исключение из этого Правило — это псевдооперация set , которая позволяет вам определять и переопределять один и тот же символ.Обычно мы используем set для определения смещения стека для локальных переменные в подпрограмме. Для получения дополнительной информации см. Примеры локальных переменных . Set позволяет двум отдельным подпрограммам повторно использовать одно и то же имя для их локальных переменных.

За исключением директив equ = andset, метке присваивается значение программного счетчика. первого байта собираемой инструкции или данных. Значение, присвоенное метке, является абсолютным. Этикетки могут по желанию заканчиваться двоеточием (:).Если используется двоеточие, оно не является частью ярлыка, но просто действует, чтобы отделить ярлык от остальных исходной строки. Таким образом, следующие фрагменты кода эквивалентны:
здесь: deca
bnehere


heredeca
bnehere


Метка может появляться в строке сама по себе. Ассемблер интерпретирует это как установить значение метки, равное текущему значению счетчика программ. Метка может находиться в строке с псевдооперацией.

Таблица символов вмещает не менее 2000 символов длиной 8 символов или меньше.Допускаются дополнительные символы до 15 за счет уменьшения максимально возможного количества символов в таблице.

————————————————- ————————————-
Поле операции
Поле операции находится после метки поле, и должен предшествовать хотя бы одному символу пробела. Операция Поле должно содержать допустимую мнемонику кода операции или директиву ассемблера. Символы верхнего регистра в этом поле преобразуются в нижний регистр. перед проверкой как юридическая мнемоника.Таким образом, «nop», «NOP» и «NoP» распознаются как один и тот же мнемоник. Записи в операции поле может быть одного из двух типов:

Код операции . Они прямо соответствуют машинным инструкциям. Код операции включает в себя любое имя регистра, связанное с инструкцией. Эти имена регистров не должны отделяться от кода операции никакими символы пробела. Таким образом, clra означает очистить аккумулятор A, но ‘clr a’ означает очищенную ячейку памяти, обозначенную меткой ‘а’.Доступные инструкции зависят от микрокомпьютера, который вы используете. используют

Директива . Это специальные коды операций, известные Ассемблеру, которые контролировать процесс сборки, а не переводить в машинные инструкции. Коды псевдоопераций, поддерживаемые этим ассемблером

Группа A Группа B Группа C означает
орг org.org Конкретный абсолютный адрес для последующего кодирования объекта
= экв. Определить постоянный символ
комплект Определить или переопределить постоянный символ
dc.b db fcb. Байта Выделить байты памяти с инициализированными значениями
ГЦК Создать строку ASCII (без символа завершения)
постоянного тока.ш dw fdb. Слово Выделить слово (а) памяти с инициализированными значениями
dc.l dl. Длинный Выделить 32-битное слово (слова) памяти с инициализированными значениями
DS DSB юаней .blkb Выделить байты памяти без инициализации
ds.w .blkw Выделить байты памяти без инициализации
дс.л .blkl Выделить 32-битные слова памяти без инициализации
конец конец. Конец Обозначает конец исходного кода ( TExaS игнорирует их)

————————————————- ————————————-
Поле операнда
Интерпретация поля операнда зависит от содержимое поля операции.Поле операнда, если требуется, должно следовать поле операции и должно предшествовать хотя бы одному пробелу персонаж. Поле операнда может содержать символ, выражение, или сочетание символов и выражений, разделенных запятыми. В поле операнда не может быть пробелов. Например следующие две строки создают идентичный объектный код, потому что пробела между данными и + в первой строке:
ldaadata + 1
ldaadata

Поле операнда машинных команд используется для указания режим адресации инструкции, а также операнд Инструкция.В следующей таблице приведены поля операнда. форматы.

Операнд Формат 6811/6812 пример
без операнда аккумулятор и свой clra
<выражение> прямой, удлиненный или относительный ldaa 4
# <выражение> немедленная ldaa # 4
<выражение>, R индексируется адресным регистром ldaa 4, х
, бит установлен или сброшен bset 4, № $ 01
, , бит тест и ветка брсет 4, # 01 $, там
<выражение>, R, <выражение>, <выражение> бит тест и ветка brset 4, x, # 01 $, там


Допустимый синтаксис поля операнда зависит от микрокомпьютера. |

Каждый символ связан с 16-битным целым значением, которое используется вместо символа во время вычисления выражения.Звездочка (*), используемая в выражении как символ, представляет текущее значение счетчика местоположения (первый байт многобайтовая инструкция)

Константы представляют собой количества данных, которые не изменяются в значение во время выполнения программы. Константы могут быть представлены ассемблеру в одном из четырех форматов: десятичный, шестнадцатеричный, двоичный или ASCII . Программист указывает формат числа ассемблеру со следующими префиксами:

0xhexadecimal, синтаксис C
% двоичный
‘c’ Код ASCII для одной буквы c

Константы без префикса интерпретируются как десятичные.Ассемблер преобразует все константы в двоичный машинный код и отображаются в листинге сборки в шестнадцатеричном формате.

Десятичная константа состоит из строки числовых цифр. В значение десятичной константы должно находиться в диапазоне 0–65535 включительно. В следующем примере показаны как допустимые, так и недопустимые десятичные константы:

ДЕЙСТВИТЕЛЬНО НЕДЕЙСТВИТЕЛЬНО НЕВЕРНАЯ ПРИЧИНА
12 123456 более 5 цифр
12345 12.3 недопустимый символ


Шестнадцатеричная константа состоит максимум из четырех символов. из набора цифр (0-9) и заглавных букв алфавита (A-F), и перед ним стоит знак доллара ($). Шестнадцатеричные константы должен быть в диапазоне от $ 0000 до $ FFFF. В следующем примере показано как действительные, так и недопустимые шестнадцатеричные константы:

ДЕЙСТВИТЕЛЬНО НЕДЕЙСТВИТЕЛЬНО НЕВЕРНАЯ ПРИЧИНА
$ 12 ABCD без предшествующего «$»
$ ABCD $ G2A недопустимый символ
$ 001F $ 2F018 слишком много цифр


Двоичная константа состоит максимум из 16 единиц или нулей, которым предшествуют знаком процента (%).В следующем примере показаны оба действительных и недопустимые двоичные константы:

ДЕЙСТВИТЕЛЬНО НЕДЕЙСТВИТЕЛЬНО НЕВЕРНАЯ ПРИЧИНА
% 00101 1010101 недостающие проценты
% 1% 10011000101010111 слишком много цифр
% 10100% 210101 неверная цифра


Один символ ASCII может использоваться как константа в выражениях. ASCII Константы заключены в одинарные кавычки (‘). Любой персонаж, кроме одинарной кавычки, может использоваться как символьная константа. В следующем примере показаны допустимые и недопустимые символьные константы:

ДЕЙСТВИТЕЛЬНО НЕДЕЙСТВИТЕЛЬНО НЕВЕРНАЯ ПРИЧИНА
‘*’ ДЕЙСТВИТЕЛЬНЫЙ слишком длинный


Для неверного случая выше ассемблер не будет указывать ошибка.Скорее он соберет первого персонажа и проигнорирует остаток.

————————————————- ————————————-
Поле комментария
Последнее поле исходного кода Ассемблера заявление это комментарий поле. Это поле является необязательным и печатается только в источнике листинг для документации. Поле комментария отделено из поля операнда (или из поля операции, если операнд отсутствует требуется) хотя бы одним пробелом.Комментарий Поле может содержать любые печатаемые символы ASCII.
Как разработчики программного обеспечения, наша цель — создать код, который не только решает нашу текущую проблему, но может служить основой наших будущих проблем. Чтобы повторно использовать программное обеспечение, мы должны оставить наш код в таком состоянии, что будущий программист (в том числе мы сами) можем легко понять его цель, ограничения и выполнение. Документация — это не что-то прикрепленное к программному обеспечению после того, как это сделано, а дисциплина, встроенная в него на каждом стадия развития.Мы тщательно разрабатываем стиль программирования предоставление соответствующих комментариев. Я чувствую комментарий, который говорит нам почему мы выполняем определенные функции информативнее, чем комментарии которые говорят нам, каковы функции. Примеры плохих комментариев будет:
clrFlagFlag = 0
seiSet I = 1
ldaa $ 1003 Читать PortC


Это плохие комментарии, потому что они не содержат информации помогите нам в будущем понять, что делает программа. Пример хороших комментариев:
clrFlagSignify ключ не был набран
sei Следующий код не будет прерван
ldaa $ 1003Bit7 = 1, если переключатель нажат


Это хорошие комментарии, потому что они упрощают внесение изменений программа на будущее.
Самодокументирующийся код — это программа, написанная простым и очевидным таким образом, чтобы его цель и функция были очевидны. К напишите такой замечательный код, сначала мы должны сформулировать проблему Организуя его в четко определенные подзадачи. Как мы ломаемся сложная проблема на мелкие части проходит долгий путь, делая программное самодокументирование. Оба понятия абстракции (представленные в последнем разделе) и модульный код (будет представлен в следующий раздел) обращается к этому важному вопросу организации программного обеспечения.
Сопровождение программного обеспечения — это процесс исправления ошибок, добавления новые функции, оптимизация по скорости или объему памяти, перенос на новое компьютерное оборудование и настройку программного обеспечения для новые ситуации. Это НАИБОЛЕЕ ВАЖНЫЙ этап разработки программного обеспечения. Мое личное мнение таково, что блок-схемы или руководства по программному обеспечению не являются хорошими механизмами для документирования программ, потому что это трудно поддерживать эти типы документации в актуальном состоянии, когда внесены изменения.
Мы должны использовать осторожные отступы и описательные имена для переменные, функции, метки, порты ввода / вывода.Либеральное использование equ provide объяснение функции программного обеспечения без затрат на скорость выполнения или требования к памяти. Дисциплинированный подход к программированию заключается в разработке шаблонов письма, которым вы постоянно следуете. Разработчики программного обеспечения не похожи на писателей рассказов. Это нормально используйте один и тот же контур подпрограммы снова и снова. В следующей программе обратите внимание на следующее вопросов стиля:

1) Начинается и заканчивается строкой из *
2) Указывает цель подпрограммы
3) Предоставляет параметры ввода / вывода, что они означают и как они передаются
4) Различные фазы (подмодули) кода, обозначенные строка

******************* Макс. ***************************** **
* Цель: возвращает максимум два 16-битных числа
* Эта подпрограмма создает три 16-битных локальных переменных
* Входные данные: Num1 и Num2 — два 16-битных беззнаковых числа
*, переданных в стек
* Выход: RegX — это максимум X, Y
* Уничтожено: CCR
* Последовательность вызовов
* ldx # 100
* pshxNum1 помещается в стек
* ldx # 200
* pshx Num2 помещается в стек
* jsrMax
* pulyBalance стек
* pulyResult
Firstset0 Первая 16-битная локальная переменная
Secondset2 Вторая 16-битная локальная переменная
Resultset4 Максимум первой, второй
Num1set12 Входной параметр1
Num2set10 Входной параметр2
Регистры MaxpshySave, которые будут изменены
* — — — — — — — — — — — — — — — — — — — — — — — — — — —
pshxAllocate Локальная переменная результата
pshxAllocate Вторая локальная переменная
pshxAllocate Первая локальная переменная
* — — — — — — — — — — — — — — — — — — — — — — — — — — —
tsxCreate указатель фрейма стека
ldyNum1, X
styFirst, XInitialize First = Num1
ldyNum2, X
stySecond, XInitialize Second = Num2
ldyFirst, X
styResult, результат = Первый
cpySecond, X
bhsMaxOKSkip if First> = Second
ldySecond, XSince First styResult, Xmake Result = Second
MaxOKldxResult, XReturn Result в RegX
* — — — — — — — — — — — — — — — — — — — — — — — — — — —
puly Разместите локальные переменные
puly
puly
* — — — — — — — — — — — — — — — — — — — — — — — — — — —
pulyRestore регистры
rts

****************** Конец максимального количества *************************************************************************************************************************************************************************************************************** *

————————————————- ————————————-
Листинг ассемблера
Выходные данные ассемблера включают необязательный листинг принадлежащий исходная программа и объектные файлы.Файл листинга создается, когда открыт файл TheList.RTF .
Каждая строка списка содержит номер ссылочной строки, адрес и байты собраны, и исходный исходный ввод линия. Если строка ввода вызывает вывод более 8 байтов (например, длинная директива FCC), дополнительные байты включены в объектный код (файл S19 или загружен в память), но не показан в листинг. Есть три варианта сборки, каждый из которых можно переключать. включение / выключение с помощью команды Сборка-> Параметры.

(4) цикла показывает количество циклов для выполнения этой инструкции
[100] всего дает общее количество рабочих циклов с момента последней псевдооперации организации
{PPP} тип дает тип цикла


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

————————————————- ————————————-
Ошибки сборки

Ошибки программирования делятся на две категории. Простой набор текста / синтаксис ошибка будет помечена ассемблером TExaS как ошибка , когда ассемблер пытается перевести исходный код в машину код.Ошибки программирования, которые сложнее найти и удалить это функциональные ошибки, которые могут быть обнаружены во время выполнения, когда программа работает не так, как ожидалось. Имеются в виду сообщения об ошибках чтобы быть понятным. Ассемблер имеет режим verbose (см. Команду Assembler-> Options), который предоставляет более подробную информацию. об ошибке и предлагает возможные решения.

Типы ошибок ассемблера
1) Неопределенный символ: Программа ссылается на метку, которая не существует
Как исправить: проверьте орфографию определения и доступа
2) Неопределенный код операции или псевдооперация
Как исправить: проверьте орфографию / наличие инструкции
3) Режим адресации недоступен
Как исправить: найдите режимы адресации, доступные для инструкция
4) Ошибка выражения
Как исправить: проверьте скобки, начните с более простого выражения
5) Ошибка фазирования возникает, когда значение символа изменяется с pass1 на pass2
Как исправить: сначала удалите все неопределенные символы, затем удалите пересылка ссылок
6) Ошибка адреса
Как исправить: используйте псевдооперации org для сопоставления доступной памяти.
Диагностические сообщения об ошибках помещаются в файл листинга просто после строки, содержащей ошибку. Если файл TheList.RTF отсутствует, то ошибки сборки сообщаются в файле TheLog.RTF . Если файлов TheList.RTF или TheLog.RTF нет, то ошибки сборки не выводятся.

————————————————- ————————————-
Ошибки фазировки
Ошибка фазировки во время прохода 2 ассемблера, когда адрес метки отличается от того, когда он был ранее рассчитано.Цель первого этапа ассемблера — создать таблица символов. Чтобы вычислить адрес каждой сборки строки, ассемблер должен уметь определить точное число байтов займет каждая строка. Для большинства инструкций номер требуемого байта фиксировано и легко вычисляется, но для других инструкции, количество байтов может варьироваться. Возникают ошибки фазировки когда ассемблер вычисляет размер другой инструкции в проходе 2, чем ранее рассчитывалось на проходе 2.Иногда фазировка ошибка часто возникает в строке программы ниже, чем где возникает ошибка. Ошибка фазирования обычно возникает из-за использование прямых ссылок. В этом примере 6812 символ «index» недоступен во время сборки ldaa index, x. Ассемблер неправильно выбирает 2-х байтовую адресацию IDX. версия режима, а не правильный 3-байтовый режим IDX1.
ldaaindex, x
indexequ 100
; …
loopldaa # 0

В листинге показана ошибка фазирования.
Copyright 1999-2000 Test EXecute And Simulate
$ 0000A6E064ldaaindex, x
$ 0064indexequ100
;…
$ 00038600loopldaa # 0
#####
Ошибка фазирования
Эта строка находилась по адресу $ 0002 на проходе 1, теперь на проходе 2 это $ 0003

*************** Таблица символов ********************
индекс $ 0064
цикл $ 0002
##### Сборка завершилась неудачно, 1 ошибка!

Когда ассемблер переходит в цикл, значения Pass 1 и Pass 2 отключаются из-за ошибки фазирования в инструкции ldaa # 0 цикла. Решение здесь — сначала поставить индекс, равный 100.

————————————————- ————————————-
Ассемблер псевдооператора s

Псевдооперации — это специальные команды для ассемблера, которые интерпретируются в процессе сборки. Некоторые из них создают объектный код, но большинство этого не делают. Есть два распространенных формата псевдоопераций используется при разработке языка ассемблера Motorola. Ассемблер TExaS поддерживает обе категории. Если вы планируете экспортировать ПО разработан с помощью TExaS для другого приложения, тогда вам следует ограничить использование только psuedo-op совместим с этим приложением.

Group A поддерживается Motorola MCUez, HiWare и ImageCraft. ICC11 и ICC12
Group B поддерживается Motorola DOS уровня AS05, AS08, AS11 и AS12
Group C — некоторые альтернативные определения

Группа A Группа B Группа C означает
орг org .org Конкретный абсолютный адрес для последующего кодирования объекта
= экв. Определить постоянный символ
комплект Определить или переопределить постоянный символ
постоянного тока.б дб fcb. Байта Выделить байты памяти с инициализированными значениями
ГЦК Создать строку ASCII (без символа завершения)
dc.w dw fdb. Слово Выделить слово (а) памяти с инициализированными значениями
dc.l dl. Длинный Выделить 32-битное слово (слова) памяти с инициализированными значениями
дс дс.б юаней .blkb Выделить байты памяти без инициализации
ds.w .blkw Выделить байты памяти без инициализации
DSL .blkl Выделить 32-битные слова памяти без инициализации
конец конец. Конец Обозначает конец исходного кода ( TExaS игнорирует их)

————————————————- ————————————-
приравнивает символ к значению

<метка> equ <выражение> (<комментарий>)
<метка> = <выражение> (<комментарий>)

Директива EQU (или =) присваивает значение выражения в поле операнда к метке.Директива equ присваивает значение кроме программного счетчика на этикетке. Этикетка не может быть переопределенным где-нибудь еще в программе. Выражение не может содержать любые прямые ссылки или неопределенные символы. Приравнивается к прямые ссылки помечаются как Ошибки фазирования phasing_error.
В следующем примере имена локальных переменных не могут быть повторно используется в другой подпрограмме:
; MC68HC812A4
; ***** фаза привязки ***************
Iequ-4
PTequ-3
Ansequ-1
; ******* Фаза распределения *********
functionpshxsave old Reg X
tsxcreate указатель кадра стека
leas-4, spallocate четыре байта для I, PT, Result
; ******** Фаза доступа ************
clrI, xClear I
ldyPT, xReg Y — это копия PT
staaAns, xstore в Ans
; ******** Фаза освобождения *****
txsdeallocation
pulxrestore old X
rts

В следующем примере псевдооперация equ используется для определения порты ввода-вывода и для доступа к различным элементам связанных состав.
* *********** Moore.RTF *********************
* Джонатан В. Вальвано 18.07.98 10: 54:28 PM
* Контроллер конечного автомата Мура
* PC1, PC0 — двоичные входы, PB1, PB0 — двоичные выходы
PORTBequ0x01
DDRBequ0x03
PORTCequ0x04
DDRCequ0x06
TCNTequ0x84; 16-битные тактовые импульсы без знака, увеличивающиеся каждый цикл
TSCRequ0x86; установите бит 7 = 1, чтобы включить TCNT
* Контроллер конечного автомата
* C1, C0 — это входы B1, B0 — выходы
org $ 800 Переменные идут в RAM
StatePtrmb2Pointer в текущее состояние
org $ F000 Поместить в EEPROM, чтобы его можно было изменить
Outequ0offset для выходного значения
* 2-битный шаблон, сохраненный в младшей части 8-битного байта
Waitequ1offset для времени ожидания
Nextequ2offset для 4 следующих состояний
* Четыре 16-битных абсолютных адреса без знака
InitStatefdbS1Initial state
S1fcb% 01Outbput
fdbS2, S1, S2, S3
S2fcb% 10 Выход
fcb10 Время ожидания
fdbS3, S1, S2, S3
S3fcb% 11 Выход
fcb20 Время ожидания
$ fdbS1, S1, S2, go в S1 9000 $ программ C00
movb # $ FF, TSCR enable TCNT
ldaa #% 11111111
staaDDRB B1, B0 — светодиодные выходы
ldaa #% 00000000
staaDDRC C1, C0 — входы переключателя
ldxInitState Указатель состояния
stxStatePt
stxStatePt
* 1.Выполнить вывод для текущего состояния
* 2. Подождать заданное время
* 3. Вход от переключателей
* 4. Перейти к следующему состоянию в зависимости от входа
* StatePt — указатель текущего состояния
FSMldxStatePt1. Вывести
ldabOut, xOutput значение для этого состояния в битах 1,0
stabPORTB
ldaaWait, x2. Ждать в этом состоянии
bsrWAIT
ldabPORTC3. Чтение ввода
andb # $ 03 просто интересует бит 1,0
lslb 2 байта на 16-битный адрес
abx добавить 0,2,4,6 в зависимости от ввода
ldxNext, x4.Следующее состояние в зависимости от входа
stxStatePt
braFSM
* Reg A — время ожидания (по 256 циклов)
WAITtfra, b
clraRegD = количество циклов ожидания
adddTCNTTCNT значение в конце задержки
WloopcpdTCNTEndT-TCNT когда EndT bplWloop
rts
org $ FFFE
fdbMainreset vector

————————————————- ————————————-
установить символ приравнивания к значению

<метка> set <выражение> (<комментарий>)

Директива SET присваивает значение выражения в операнде. поле к метке.Директива set присваивает значение, отличное от счетчик программы на этикетке. В отличие от псевдооперации equ, метку можно переопределить где угодно в программе. Выражение не должен содержать прямых ссылок или неопределенных символов. Использование этой псевдооперации с прямыми ссылками не допускается. отмечен ошибками фазирования.

В следующем примере имена локальных переменных можно использовать повторно. в другой подпрограмме:
; MC68HC812A4
; ***** фаза привязки ***************
Исеть-4
ПЦсет-3
Анссет-1
; ******* Фаза распределения *********
functionpshxsave old Reg X
tsxcreate указатель кадра стека
leas-4, spallocate четыре байта для I, PT, Result
; ******** Фаза доступа ************
clrI, xClear I
ldyPT, xReg Y — это копия PT
staaAns, xstore в Ans
; ******** Фаза освобождения *****
txsdeallocation
pulxrestore old X
rts


———————————————— —————————————
fcb Form Constant Byte

(<метка>) fcb (, ,…, ) ()
(

Директива FCB может иметь один или несколько операндов, разделенных запятыми. Значение каждого операнда усекается до восьми бит и сохраняется. в одном байте объектной программы. Несколько операндов хранятся в последовательных байтах.Операнд может быть числовой константой, символьная константа, символ или выражение. Если несколько присутствуют операнды, один или несколько из них могут быть нулевыми (два соседних запятые), и в этом случае будет назначен один нулевой байт для этого операнда. Ошибка возникнет, если старшие восемь бит из значений оцененных операндов не все единицы или все нули.
Может быть включена строка, которая хранится как последовательность Символы ASCII. Разделители, поддерживаемые TExaS , — это «‘и \.Строка не заканчивается, поэтому программист должен явно прекратить его. Например:
str1 fcb «Hello World», 0

В следующем конечном автомате определения fcb используется для хранения выходных данных и времени ожидания.
Outequ0offset для выходного значения
* 2-битный шаблон, сохраненный в младшей части 8-битного байта
Waitequ1offset для времени ожидания
Nextequ2offset для 4 следующих состояний
* Четыре 16-битных абсолютных адреса без знака
InitStatefdbS1 Начальное состояние
S1fcbit
fdbS2, S1, S2, S3
S2fcb% 10 Выход
fcb10 Время ожидания
fdbS3, S1, S2, S3
S3fcb% 11 Выход
fcb20 Время ожидания
fdbS1, S10003, S2, S1
fdbS1, S10003, S2, S1

————————————————- ————————————-
fcc Форма Константа Символьная Строка

(<метка>) FCC <разделитель> <строка> <разделитель> (<комментарий>)

Директива FCC используется для хранения строк ASCII в последовательных байтах памяти.Начинается байтовое хранилище на текущем программном счетчике. Метка присваивается первому байт в строке. В строке может содержаться любой из печатаемых символов ASCII . Строка указана между двумя одинаковыми разделителями. Первый непустой символ после директивы FCC используется в качестве разделителя. Разделители поддерживаются TExaS : «‘и \.

Примеры:

LABEL1FCC’ABC ‘
LABEL2fcc «Джон Вальвано»
LABEL4fcc / Добро пожаловать в FunCity! /

Первая строка создает ASCII символа ABC в ячейке LABEL1.Будьте осторожны, чтобы разместить код FCC подальше от исполняемых инструкций. Сборщик произведет объектный код, как и для обычных инструкций, одна строка в время. Например, следующее приведет к сбою, потому что после выполнения инструкции LDX, 6811 будет пытаться выполнить ASCII символов «Проблема» в качестве инструкций.
ldaa100
ldx # Strg
Strgfcc «Trouble»

Обычно мы собираем все fcc, fcb, fdb вместе и помещаем их в конец нашей программы, чтобы микрокомпьютер не пытается выполнить постоянные данные.Например,
ldaaCon8
ldyCon16
ldx # Strg
braloop
* Поскольку петля бюстгальтера безусловна,
* 6811 не выйдет за эту точку.
Strgfcc «Нет проблем»
Con8fcb100
Con16fdb1000


———————————————— —————————————
fdb Form Double Byte

(<метка>) fdb (, , …, ) ()
(

Директива FDB может иметь один или несколько операндов, разделенных запятыми. 16-битное значение, соответствующее каждому операнду, сохраняется в два последовательных байта объектной программы. Хранение начинается на текущем программном счетчике. Метка присваивается первому 16-битное значение.Несколько операндов хранятся в последовательных байтах. Операнд может быть числовой константой, символьной константой, символ или выражение. Если присутствует несколько операндов, один или несколько из них могут быть нулевыми (две соседние запятые), и в этом случае для этого операнда будут назначены два байта нулей.

В следующем конечном автомате определения fdb используются для определения указателей состояния. Например, InitState и четыре указателя Next.
Outequ0offset для выходного значения
* 2-битный шаблон, сохраненный в младшей части 8-битного байта
Waitequ1offset для времени ожидания
Nextequ2offset для 4 следующих состояний
* Четыре 16-битных абсолютных адреса без знака
InitStatefdbS1 Начальное состояние
S1fcbit
fdbS2, S1, S2, S3
S2fcb% 10 Выход
fcb10 Время ожидания
fdbS3, S1, S2, S3
S3fcb% 11 Выход
fcb20 Время ожидания
fdbS1, S10003, S2, S1
fdbS1, S10003, S2, S1

————————————————- ————————————-
постоянного тока.l Определить 32-битную константу

(<метка>) dc.l <выражение> (, <выражение>, …, <выражение>) (<комментарий>)
(<метка>) dl <выражение> (, <выражение>, … , ) ()
(

Директива dl может иметь один или несколько операндов, разделенных запятыми. 32-битное значение, соответствующее каждому операнду, сохраняется в четыре последовательных байта объектной программы (big endian).В сохранение начинается с текущего программного счетчика. Метка присвоена к первому 32-битному значению. Несколько операндов хранятся в последовательном байты. Операнд может быть числовой константой, символьной константой, символ или выражение. Если присутствует несколько операндов, один или несколько из них могут быть нулевыми (две соседние запятые), в которых case четыре байта нулей будут присвоены этому операнду.

В следующем конечном автомате определения dl используются для определения 32-битных констант.
S1dl100000, $ 12345678
S2.long1,10,100,1000,10000,100000,1000000,10000000
S3dc.l-1,0,1


———————————————— —————————————
org Установить счетчик программы на исходную точку

org <выражение> (<комментарий>)
.org <выражение> (<комментарий>)

Директива ORG изменяет счетчик программы на указанное значение. выражением в поле операнда. Последующие заявления собираются в ячейки памяти, начиная с новой программы значение счетчика.Если в источнике не встречается директива ORG программы, счетчик программы обнуляется. Выражения не может содержать прямых ссылок или неопределенных символов.

Операторы org в следующем скелете помещают переменные в ОЗУ. и программы в EEPROM MC68HC812A4
* ********** <<Имя>> ********************
org $ 800 переменные идут в ОЗУ
* << глобальные объекты, определенные с помощью rmb, идут сюда >>
org $ F000программы в EEPROM
Основная часть: lds # $ 0C00 инициализирует стек в ОЗУ
* << сюда идут однократные инициализации >>
цикл:
* << повторяющиеся операции перейдите сюда >>
braloop
* << подпрограммы перейдите сюда >>
org $ FFFE
fdbMainreset vector

————————————————- ————————————-
юаней Резервное несколько байтов

(<метка>) rmb <выражение> (<комментарий>)
(<метка>) ds <выражение> (<комментарий>)
(<метка>) ds.b <выражение> (<комментарий>)
(<метка>) .blkb <выражение> (<комментарий>)

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

————————————————- ————————————-
ds.w Зарезервировать несколько слов

(<метка>) ds.w <выражение> (<комментарий>)
(<метка>) .blkw <выражение> (<комментарий>)

Директива ds.w приводит к увеличению счетчика местоположения. в 2 раза больше значения выражения в поле операнда. Этот директива резервирует блок памяти, длина которого в словах (16 бит) равно значению выражения.Блок зарезервированная память не инициализируется никаким заданным значением. Выражение не может содержать прямых ссылок или неопределенных символов. Этот директива обычно используется для резервирования области блокнота или таблицы для последующего использования.

————————————————- ————————————-
ds.l Зарезервировать несколько 32-битных слов

(<метка>) ds.l <выражение> (<комментарий>)
(<метка>) .blkl <выражение> (<комментарий>)

Модель DS.Директива l заставляет счетчик местоположения быть продвинутым в 4 раза больше значения выражения в поле операнда. Этот директива резервирует блок памяти, длина которого в словах (32 бита) равно значению выражения. Блок зарезервированная память не инициализируется никаким заданным значением. Выражение не может содержать прямых ссылок или неопределенных символов. Этот директива обычно используется для резервирования области блокнота или таблицы для последующего использования.


———————————————— —————————————
конец Конец программы (необязательно)

конец (<комментарий>)
.конец (<комментарий>)

Директива END означает конец исходного кода. Ассемблер TExaS игнорирует эти коды псевдоопераций.

————————————————- ————————————-
Коды символов ASCII

БИТЫ от 4 до 6

0 1 2 3 4 5 6 7
0 NUL DLE СП 0 @ ` с.
Б 1 SOH DC1: 1 А Q a q
I 2 STX DC2! 2 B R б г
т 3 ETX DC3 # 3 С S с с
S 4 EOT DC4 $ 4 D Т д т
5 ENQ НАК% 5 E U и u
0 6 ACK SYN и 6 F В f v
7 BEL ETB 7 G Вт г Вт
т 8 BS CAN ( 8 H Х ч х
O 9 HT EM) 9 I Y и y
А LF ПОД *: Дж Z j z
3 B VT ESC +; К [ к {
С FF ФС, < L \ л;
D CR GS = M] м}
E SO RS. n ~
F S1 США/? O _ или DEL

————————————————- ————————————-
S-19 Код объекта
S-запись выходной формат кодирует программу и объект данных модули в формат для печати (ASCII).Это позволяет просматривать объектный файл со стандартным инструменты и позволяет отображать модуль при переходе из от одного компьютера к другому или во время нагрузок между хостом и целью. Формат S-записи также включает информацию для использования в случае ошибки. проверка для обеспечения целостности передачи данных.
S-записи — это символьные строки, состоящие из нескольких полей, которые определить тип записи, длину записи, адрес памяти, код / ​​данные, и контрольная сумма. Каждый байт двоичных данных кодируется как 2-символьный шестнадцатеричное число: первый символ, представляющий старший 4 бита, а второй — 4 младших бита байта.

5 полей, которые составляют S-запись:
1) Тип S0, S1 или S9
2) Длина записи
3) Адрес
4) Код / данные
5) Контрольная сумма

Было определено восемь типов S-записей для различных требуется кодирование, транспортировка и декодирование, но в большинстве микроконтроллеров Motorola используются только три типа . Запись S0 — это запись заголовка, содержащая имя файла в формате ASCII в поле «Код / данные». Адресное поле этот тип обычно 0000.Запись S1 — это запись данных, содержащая информацию, которая должна быть загружена последовательно. начиная с указанного адреса. Запись S9 является маркером конца файла и иногда содержит начальную адрес для начала исполнения. Во встроенной микрокомпьютерной среде, начальный адрес должен быть запрограммирован в соответствующем месте. Для большинства микроконтроллеров Motorola вектор сброса является последним. два байта ПЗУ или EEPROM.

Длина записи содержит количество пар символов в записи длины, без учета типа и длины записи.

Для типов записей S0, S1, S9 поле Address представляет собой 4-байтовое значение. Для типа записи S1 адрес указывает где поле данных должно быть загружено в память.

В поле Code / Data содержится от 0 до n байтов. Эта информация содержит исполняемый код, загружаемую память данные или описательная информация.

Поле Checksum состоит из 2 символов ASCII, используемых для проверки ошибок. В мере значащий байт дополнения суммы значений до единицы представлен парами символов, составляющими длину записи, адрес и поля кода / данных.При генерации контрольной суммы один добавляет (назовите результат суммой ) длину записи, адрес и поле кода / данных, используя 8-битный модуль арифметика (игнорирование переполнений). Контрольная сумма вычисляется
контрольная сумма = $ FF — сумма
При проверке контрольной суммы добавляется (вызывается результат сумма ) длина записи, адресный код / ​​поле данных и контрольная сумма, используя 8-битная арифметика по модулю (без учета переполнения). Сумма должна быть $ FF.

Каждая запись может заканчиваться CR / LF / NULL.

Ниже приведен типичный модуль S-записи:

S1130000285F245F2212226A0004242
237C2A
S113001000020008000826253812341001813
S113002041E
4E42234300182342000824A952
S107003000144ED00
S107003000144ED00

Модуль состоит из четырех записей кода / данных и завершения S9. записывать.

Первый код / ​​запись данных S1 объясняется следующим образом:

S1S-запись типа S1, указывающая, что код / ​​запись данных должна быть загружен / проверен по 2-байтовому адресу.

13 Hex 13 (19 в десятичной системе), обозначающее 19 пар символов, представляющих Далее следуют 19 байт двоичных данных.

00 Четырехсимвольное 2-байтовое поле адреса: шестнадцатеричный адрес 0000, указывает место, куда должны быть загружены следующие данные.

Следующие 16 пар символов представляют собой байты ASCII фактического программный код / ​​данные

2A Контрольная сумма первой записи S1.

Вторая и третья записи кода / данных S1 также содержат 13 долларов США. пары символов и заканчиваются контрольными суммами.Четвертый код / ​​данные S1 запись содержит 7 пар символов.

Запись о завершении S9 объясняется следующим образом:

S9S-запись типа S9, указывающая на завершение записи.

03Hex 03, указывающий на три пары символов (3 байта) для следить.

00 Четырехсимвольное 2-байтовое поле адреса, нули 00

FCC Контрольная сумма записи S9.

Этот документ состоит из четырех общих частей
Обзор
Синтаксис (поля, псевдооперации) (этот документ)
Локальные переменные
Примеры

Как собрать велосипед | Инструкции по сборке велосипеда

1.Подготовка к сборке велосипеда


После доставки велосипеда с BikeFlight вам нужно будет собрать его заново - это просто!

Соберите свои инструменты. Для сборки велосипеда вам понадобится следующее:

  • Нож или острый край
  • Шестигранные ключи
  • Ключи Torx
  • Ножницы или кусачки
  • Инструмент для центрального замка

2.Откройте ящик для велосипеда, сумку для велосипеда или чемодан для велосипеда.


Если вы отправляете нашу коробку BikeFlights, ее следует заклеить упаковочной лентой.

Осторожно разрежьте скотчем край с помощью ножа.

3. Снимите крышку


Положите велосипедный бокс на пол, снимите верх и отложите в сторону.

4.Отсоединение велосипеда


Снимите сумки для колес и снимите раму с ремней или эластичных ремней, закрепляющих ее в велосипедном ящике.

Оставьте велосипед в коробке для велосипеда, чтобы начать сборку. Бокс для велосипеда станет барьером между полом и велосипедом.

5. Отсоедините все закрепленные детали


Закрепите все стяжки и отсоедините надежную сумку с аксессуарами, подседельный штырь и руль от велосипеда.

6. Удалите все прокладки с велосипеда


Закрепите все стяжки и снимите все прокладки с рамы, вилки, руля, шатунов и переключателя передач.

7.Установите подседельный штырь


Вставьте подседельный штырь в подседельную трубу.

Выровняйте и отрегулируйте высоту седла, указанную ранее. Затяните зажим сиденья до крутящего момента рамы.

8. Закрепите велосипед на подставке для велосипеда


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

9. Установите переключатель


Установите переключатель на подвеску переключателя, соединив несколько первых ниток резьбы.

9. Выровняйте и затяните свой переключатель


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

Медленно затяните болт крепления переключателя к подвеске, зацепившись за язычок B-винта на краю подвески переключателя.

11. Установите руль


Отцентрируйте рули и поверните их в отмеченное положение.

Затяните в соответствии со спецификацией крутящего момента вашего штока.

12.Установите аксессуары


Установите флягодержатели, крылья, фонари, GPS и другие аксессуары.

Затяжка с надлежащим крутящим моментом.

13. Установите роторы дискового тормоза


Установите роторы дискового тормоза на ступицы и убедитесь, что они обращены в правильном направлении.

Затяните роторы дисковых тормозов до крутящего момента ступицы.

14. Установите колеса


Установите колеса в раму велосипеда и закрепите их сквозными осями или шпажками.

15. Установите педали


Установите педали на шатуны.

Правая педаль заправлена ​​регулярно (по часовой стрелке для затяжки), а левая педаль имеет обратную резьбу (против часовой стрелки для затяжки).

16. Проверьте свои передачи


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

При необходимости отрегулируйте.

17.Проверьте свои тормоза


Проверните колеса, чтобы убедиться, что тормоза не трутся.

Сожмите тормозные рычаги, чтобы убедиться, что они правильно вошли в зацепление.

При необходимости отрегулируйте.

18. Проверка собранного велосипеда


Еще раз проверьте, что все болты затянуты должным образом и на вашем велосипеде безопасно ездить.

19. Пробная поездка на готовом велосипеде


Надев шлем, совершите короткую безопасную поездку на велосипеде, чтобы проверить свой велосипед.

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

20.Соберите упаковочные материалы


Соберите всю упаковочную пену, упаковочные ремни, эластичные ремни, застежки-молнии, ленты, пакеты для аксессуаров и другие предметы, используемые для упаковки.

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

21.Поездка!


После того, как ваш байк будет надежно собран и протестирован, выходите и наслаждайтесь поездкой!

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *