|
Ушел с форума
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|