|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 10.11.2013, 18:47 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 6 Лексема — смысловая единица языка ассемблер. К лексемам относятся имена или идентификаторы, числа, константы, зарезервированные слова, операторы и строки.СИНТАКСИС АССЕМБЛЕРА (часть 1/3) Лексемы Каждая единица информации, хранимая в ячейках памяти компьютера, имеет свой адрес. На практике заранее неизвестно, в каких конкретно ячейках памяти во время работы программы будут записаны ее данные, поэтому в языках программирования введено понятие переменной, позволяющее отвлечься от конкретных адресов и обращаться к содержимому памяти с помощью идентификатора или имени. Имена указывают на значение, о реальном адресе и способе хранения которого можно забыть. В процессе работы содержимое соответствующих ячеек можно менять, обращаясь к переменной по имени. Кроме имени и значения, переменная обычно имеет тип, определяющий, какая информация хранится в данной переменной (число, адрес и т.д.). В зависимости от объема памяти, отведенного для хранения переменной, оно (значение) должно укладываться в допустимый диапазон. Например, значение типа байт имеет диапазон от –128 до 255. Максимальное беззнаковое число равно 28 – 1=255 (8 по количеству битов в байте), минимальное беззнаковое число 0. Максимальное число со знаком равно 127, минимальное число со знаком –128 (1 бит для знака и 7 бит для значения). Идентификаторы Идентификаторы — последовательность из латинских букв, цифр и знаков «?», «.», «@» «_», «$». Ограничение набора символов восходит к ранним языкам программирования, которые возникли еще в эпоху 6-битной кодировки символов.При записи идентификатора придерживаются следующих правил:
Целые числа Целые числа могут быть записаны в десятичной, двоичной, восьмеричной и шестнадцатеричной системах счисления. Десятичная форма записи числа записываются как обычно, а вот при записи вида чисел в других системах счисления в конце записи числа ставится спецификатор — буква, которая указывает, в какой системе счисления записано это число. В конце двоичного вида числа ставится буква b или буква y (binary), в конце восьмеричного — o (octal) или буква q, в конце шестнадцатеричного вида числа — буква h (hexadecimal), в конце десятичного вида числа можно поставить букву d (decimal) или букву t (ten), хотя употребление спецификатора в этом случае и не обязательно.При записи шестнадцатеричных чисел соблюдают следующие правила:
Символьные и строковые константы Для записи текстов, которые программа в последствие выведет на экран/файл/принтер, используют либо систему ASCII (American Standard Code for Information Interchange), либо Windows-кодировку. Символьная константа состоит просто из одного символа ASCII. Символьные константы заключаются либо в одинарные, либо в двойные кавычки. Открывающая и закрывающая кавычки должны быть одинаковы. Строковые константы содержат два или более символов ASCII. Строковые константы также заключаются либо в одинарные, либо в двойные кавычки.
Предложения Программа на языке ассемблера — это последовательность предложений, каждое из которых записывается в отдельной строке. Переносить предложение на следующую строку можно используя символ «\», записывать два предложения в одной строке нельзя. Если в предложении более 255 символа, то 256-ой и все следующие за ним символы игнорируются.Правила расстановки пробелов в предложении:
По смыслу все предложения делятся на три группы:
Команды управляют работой микропроцессора. Для команд транслятор с языка ассемблера всегда генерирует код машинных команд. Директивы управляют работой компилятора по компоновке программы, а не работой микропроцессора. Директивы используются для сообщения компилятору, какие константы и переменные применяются в программе. Как они должны быть расположены в памяти компьютера. Большинство директив не генерирует код машинных команд. Комментарии Комментарии не влияют на смысл программы, при трансляции ассемблер игнорирует строки комментария. Комментарием считается любое предложение, начинающееся со знака «точка с запятой». Перед знаком «точка с запятой» может быть любое количество пробелов. В комментариях можно использовать буквы кириллицы и символы псевдографики. Предложения-комментарии используются для пояснения не одной команды, а целой группы команд, следующих за этим комментарием. Старайтесь комментировать задачу, а не инструкции ассемблера. Пустые строки используют для отделения одной части программы от другой — для наглядности. В языке ассемблера допустим и многострочный комментарий. Многострочный комментарий должен начинаться со строчки COMMENT. В качестве маркерамногострочного комментария берется первый за словом COMMENT символ, отличный от пробела; этот символ начинает комментарий. Концом многострочного комментария является конец первой из последующих строк программы, в которой в любой позиции снова встретился этот же маркер. Такой вид комментария обычно используется, когда, например, при отладке программы необходимо временно исключить какой-либо фрагмент программы. Команды Предложения-команды — символьная форма записи машинных команд. Общий синтаксис предложения-команды таков:[<метка>:] <мнемокод> [<операнды>] [;<комментарий>] Метка — это имя. Каждая метка может быть определена только однажды и будет доступна из любой части текущего файла (даже перед местом, где она была определена). Существуют разные способы определения меток. Простейший из них — двоеточие после названия метки. За этой директивой на той же строке даже может следовать другая инструкция. Она определяет метку, значение которой равно смещению точки, в которой она определена. Этот метод обычно используется, чтобы пометить места в коде. Другой способ — это следование за именем метки (без двоеточия) какой-нибудь директивы описания данных. Метка является адресом начала определенных в директиве данных и запоминается компилятором как адрес данных.Метка Метка может быть обработана как константа со значением, равным смещению помеченного кода или данных. Например, если вы определяете данные, используя помеченную директиву «char db 224», для того, чтобы поместить адрес начала этих данных в регистр EBX, вам нужно использовать инструкцию «mov ebx,offset char», а для того, чтобы поместить в регистр DL значение байта, на который ссылается «char», нужно использовать «mov dl,char». Последний и самый гибкий способ задания меток — это использование директивы «label». Перед этой директивой должно следовать имя метки, далее, размер оператора, и далее, числовое выражение, определяющее адрес, на который данная метка должна ссылаться. Метка нужна для ссылок на команду из других мест программы, например, для перехода на команду, перед которой стоит метка. Мнемокод Мнемокод («легко запоминающийся код») является обязательной частью команды. Это служебное слово, указывающее в символьной форме операцию, которую должна выполнить команда.Операнды Операнды команды, если они есть, отделяются друг от друга запятыми. Операнды обычно записываются в виде выражений. Частными случаями выражений являются числа и имена переменных.Операнды, которые используются в командах ассемблера, могут быть регистром reg, адресом памяти mem, непосредственным значением, задаваемым прямо в команде imm, сегментным регистром sreg. Машинные коды для всех возможных сочетаний Описание машинного кода производится в шестнадцатеричном виде. При описании машинного кода используются следующие обозначения:операторов команды /цифра — (цифра от 0 до 7) показывает, что байт mod r/m кода операции использует только операнд r/m. Поле reg содержит цифры которые обеспечивает расширение опкода; /r — показывает, что байт mod r/m команды содержит как регистровый операнд, так и операнд r/m; cb, cw, cd, cp, cq — одно-, двух-, четырех, шести-, восьмибайтное значение, следующее за полем код операции и используемое для смещения сегменте кода и возможно задает новое значение для регистра; ib, iw, id, iq — одно-, двух-, четырех-, восьмибайтное непосредственное значение (число). Следует за опкод, Mod R/M или SIB (если таковые есть), при этом код операции определяет, является ли непосредственный операнд знаковым значением, а все слова, двойные и четверные слова приводятся в порядке «младший байт по младшему адресу»; +rb, +rw, +rd, +rq, +i — код регистра от 0 до 7. Добавляется к байту слева от знака «+». В результате получается окончательный опкод. Коды регистров Машинные коды команды сопровождаются описанием синтаксиса команды для соответствующего сочетания операндов. При описании синтаксиса используются следующие обозначения:
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|