Разное

Программирование на ассемблере на платформе x86 64: Книга Программирование на ассемблере на платформе x86-64, Аблязов, 978-5-97060-364-2, купить, цена

Книга «Программирование на ассемблере на платформе x86-64. (+ 1 CD)» Аблязов Р З

  • Книги
    • Художественная литература
    • Нехудожественная литература
    • Детская литература
    • Литература на иностранных языках
    • Путешествия. Хобби. Досуг
    • Книги по искусству
    • Биографии.
      Мемуары. Публицистика
    • Комиксы. Манга. Графические романы
    • Журналы
    • Печать по требованию
    • Книги с автографом
    • Книги в подарок
    • «Москва» рекомендует
    • Авторы • Серии • Издательства • Жанр

  • Электронные книги
    • Русская классика
    • Детективы
    • Экономика
    • Журналы
    • Пособия
    • История
    • Политика
    • Биографии и мемуары
    • Публицистика
  • Aудиокниги
    • Электронные аудиокниги
    • CD – диски
  • Коллекционные издания
    • Зарубежная проза и поэзия
    • Русская проза и поэзия
    • Детская литература
    • История
    • Искусство
    • Энциклопедии
    • Кулинария. Виноделие
    • Религия, теология
    • Все тематики
  • Антикварные книги
    • Детская литература
    • Собрания сочинений
    • Искусство
    • История России до 1917 года
    • Художественная литература.
      Зарубежная
    • Художественная литература. Русская
    • Все тематики
    • Предварительный заказ
    • Прием книг на комиссию
  • Подарки
    • Книги в подарок
    • Авторские работы
    • Бизнес-подарки
    • Литературные подарки
    • Миниатюрные издания
    • Подарки детям
    • Подарочные ручки
    • Открытки
    • Календари
    • Все тематики подарков
    • Подарочные сертификаты
    • Подарочные наборы
    • Идеи подарков
  • Канцтовары
    • Аксессуары делового человека
    • Необычная канцелярия
    • Бумажно-беловые принадлежности
    • Письменные принадлежности
    • Мелкоофисный товар
    • Для художников
  • Услуги
    • Бонусная программа
    • Подарочные сертификаты
    • Доставка по всему миру
    • Корпоративное обслуживание
    • Vip-обслуживание
    • Услуги антикварно-букинистического отдела
    • Подбор и оформление подарков
    • Изготовление эксклюзивных изданий
    • Формирование семейной библиотеки

Расширенный поиск

Аблязов Р. З.

Издательство:
ДМК Пресс
Год издания:
2011
Место издания:
Москва
Язык текста:
русский
Тип обложки:
Мягкая обложка
Формат:
70х100 1/16
Размеры в мм (ДхШхВ):
240×170
Вес:
310 гр.
Страниц:
304
Тираж:
1000 экз.
Код товара:
557932
Артикул:
61820
ISBN:
978-5-94074-676-8
В продаже с:
08. 04.2011

Дополнительная информация

Аннотация к книге «Программирование на ассемблере на платформе x86-64. (+ 1 CD)» Аблязов Р. З.:
В данной книге речь идет о работе процессора в двух его основных режимах: защищенном режиме и 64-битном, который также называют long mode («длинный режим»). Также помимо изложения принципов и механизмов работы процессора в защищенном и 64-битном режимах, речь пойдет о программировании на ассемблере в операционных системах семейства Windows, как в 32-битных, так и 64-битных версиях. Рассматривается не только разработка обычных приложений для операционных систем Windows, но и разработка драйверов на ассемблере. При написании книги уделялось большое внимание именно практической составляющей, т. е. изложение материала идет только по делу и только то, что необходимо знать любому системному и низко-уровневому программисту. Последний раздел книги посвящен принципам работы многопроцессорных систем, а также работе с расширенным программируемым контроллером прерываний (APIC).
На диске, прилагаемом к книге, находятся полные исходные коды примеров к книге, а также дополнительные программы и материалы.
Издание предназначено для системных и низкоуровневых программистов, а также для студентов и преподавателей технических специальностей высших и средне-специальных учебных заведений.
Читать дальше…

Программирование на ассемблере

Поделиться

Аблязов Руслан Зуфярович «Программирование на ассемблере на платформе x86-64» ДМК Пресс, 2011 год, ( PDF)

В книге «Программирование на ассемблере…» рассказывается о работе процессора в двух его основных режимах: защищенном режиме и 64-битном, который также называют long mode («длинный режим»). Изложены, как принципы и механизмы работы процессора в защищенном и 64-битном режимах, так и основы программирования на ассемблере в операционных системах семейства Windows, как в 32-битных, так и 64-битных версиях. Изучается не только создание обычных приложений для операционных систем Windows, но и процесс разработки драйверов на ассемблере.
Автор акцентировал основное внимание на самых основных практических вопросах разработки, что необходимо знать каждому системному администратору и программисту низко-уровневых программ. Заключительный раздел книги расскажет о принципах работы многопроцессорных систем, а также работе с расширенным программируемым контроллером прерываний (APIC). Издание предназначено для системных и низкоуровневых программистов, рекомендовано студентам и преподавателям технических специальностей высших и средне-специальных учебных заведений. Исходники присутствуют.

Оглавление книги***Link

PDF (RU)                   pdf  (ru) 

key                     Vi49nY44pdNk7Snq453-FRM8AYYAN1jd7uHgtDyZt5Y
Содержание
Используемый компилятор 9

Глава 1. Основы 11
1.1. Основные понятия 11
1.1.1. Что такое процессор 11
1.1.2. Небольшая предыстория 14
1.1.3. Процессоры х86-64 16
1.1.4. Регистры процессоров х86-64 18
1.1.5. Память 19
1.1.6. Работа с внешними устройствами 21
1.1.7. Резюме 21
1.2. Основы ассемблера 22
1.2.1. Немного о языке ассемблера 22
1.2.2. Регистр флагов 23
1.2.3. Команда MOV 24
1.2.4. Формат хранения данных в памяти 26
1.2.5. Команды SUB и ADD 27
1.2.6. Логические операции 27
1.2.7. Сдвиги 28
1.2.8. Работа с флагами процессора 30
1.2.9. Работа со стеком 30
1.2.10. Резюме 30
1.3. Метки, данные, переходы 31
1.3.1. Данные 31
1.3.2. Метки 32
1.3.3. Переходы 35
1.3.4. Безымянные метки 38
1.3.5. Работа с битами 39
1.3.6. Резюме 39
1.4. Изучаем ассемблер подробнее 39
1.4.1. Работа с памятью и стеком 40
1.4.2. Работа с числами на ассемблере 41
1.4.3. Умножение и деление 44
1.4.4. Порты ввода-вывода 46
1. 4.5. Циклы 46
1.4.6. Обработка блоков данных 47
1.4.7. Макросы 50
1.4.8. Структуры 52
1.4.9. Работа с MSR-регистрами 53
1.4.10. Команда CPUID 54
1.4.11. Команда UD 2 55
1.4.12. Включение файлов 55
1.4.13. Резюме 55

Глава 2 . Защищённый режим 56
2.1. Введение в защищённый режим 56
2.1.1. Уровни привилегий 56
2.1.2. Сегменты в защищённом режиме 58
2.1.3. Глобальная дескрипторная таблица 61
2.1.4. Практика 63
2.1.5. Резюме 70
2.2. Прерывания в защищённом режиме 71
2.2.2. Дескрипторы шлюзов 72
2.2.3. Исключения 74
2.2.4. Коды ошибок 76
2.2.5. Программные прерывания 77
2.2.6. Аппаратные прерывания 77
2.2.7. Обработчик прерывания 79
2.2.8. Практика 80
2.2.9. Резюме 85
2.3. Механизм трансляции адресов 85
2.3.1. Что это такое 85
2.3.2. Обычный режим трансляции адресов 87
2.3.3. Режим расширенной физической трансляции адресов 91
2.3.4. Обработчик страничного нарушения 94
2. 3.5. Флаг WP в регистре CR0 95
2.3.6. Практика 96
2.3.7. Резюме 102
2.4. Многозадачность 102
2.4.1. Общие сведения 102
2.4.2. Сегмент задачи (TSS 103
2.4.3. Дескриптор TSS 105
2.4.4. Локальная дескрипторная таблица 105
2.4.5. Регистр задачи (TR 106
2.4.6. Управление задачами 106
2.4.7. Шлюз задачи 109
2.4.8. Уровень привилегий ввода-вывода 109
2.4.9. Карта разрешения ввода-вывода 110
2.4.10. Включение многозадачности 110
2.4.11. Практическая реализация 111
2.4.12. Резюме 118
2.5. Механизмы защиты 119
2.5.1. Поля и флаги, используемые для защиты на уровне сегментов и страниц 119
2.5.2. Проверка лимитов сегментов 120
2.5.3. Проверки типов 120
2.5.4. Уровни привилегий 122
2.5.5. Проверка уровня привилегий при доступе к сегментам данных 123
2.5.6. Проверка уровней привилегий при межсегментной передаче управления 124
2.5.7. Шлюзы вызова 125
2.5.8. Переключение стека 128
2.5.9. Использование инструкций SYSENTER и SYSEXIT 129
2. 5.10. Практика 130
2.5.11. Резюме 133

Глава 3 . ПРОГРАММИРОВАНИЕ В WIN 32 134
3.1. Введение в Win32 134
3.1.1. Основные сведения 135
3.1.2. Память в Win32 135
3.1.3. Исполняемые компоненты Windows 136
3.1.4. Системные библиотеки и подсистемы 137
3.1.5. Модель вызова функций в Win32 138
3.1.6. Выполнение программ в Win32: общая картина 138
3.1.7. Практика 139
3.1.8. Резюме 147
3.2. Программирование в третьем кольце 148
3.2.1. Общий обзор 148
3.2.2. Работа с объектами 149
3.2.3. Работа с файлами 149
3.2.4. Обработка ошибок API-функций 152
3.2.5. Консольные программы 152
3.2.6. GUI-программы 153
3.2.7. Динамически подключаемые библиотеки 156
3.2.8. Обработка исключений в программе 159
3.2.9. Практика 162
3.2.10. Резюме 171
3.3. Программирование в нулевом кольце 171
3.3.1. Службы 172
3.3.2. Общий обзор 173
3.3.3. Driver Development Kit (DDK 174
3.3.4. Контекст потока и уровни запросов прерываний 175
3. 3.5. Пример простого драйвера 176
3.3.6. Строки в ядре Windows 179
3.3.7. Подсистема ввода-вывода 180
3.3.8. Практика 186
3.3.9. Резюме 201

Глава 4. LONG MODE 202
4.1. Введение в long mode 202
4.1.1. Общий обзор 202
4.1.2. Сегментация в long mode 204
4.1.3. Механизм трансляции страниц 205
4.1.4. Переход в long mode 205
4.1.5. Практика 206
4.1.6. Резюме 208
4.2. Работа с памятью в long m od e 208
4.2.1. Общий обзор 209
4.2.2. Страницы размером 4 Кб 209
4.2.3. Страницы размером 2 Мб 211
4.2.4. Страницы размером 1 Гб 212
4.2.5. Регистр CR3 213
4.2.6. Проверки защиты 214
4.2.7. Практика 214
4.2.8. Резюме 221
4.3. Прерывания в long m ode 221
4.3.1. Дескрипторы шлюзов 221
4.3.2. Таблица ЮТ 64-битный TSS и механизм 1ST 222
4.3.3. Вызов обработчика прерывания 223
4.3.4. Практика 224
4.3.5. Резюме 230
4.4. Защита и многозадачность 230
4.4.1. Сегменты 231
4.4. 2. Шлюзы вызова 231
4.4.3. Инструкции SYSCALL и SYS RET 232
4.4.4. Многозадачность 233
4.4.5. Практика 235
4.4.6. Резюме 238

Глава 5 . ПРОГРАММИРОВАНИЕ В WIN 64 239
5.1. Введение в Win64 239
5.1.1. Преимущества и недостатки 239
5.1.2. Память в Win64 240
5.1.3. Модель вызова 240
5.1.4. Режим совместимости 242
5.1.5. Win64 API и системные библиотеки 242
5.1.6. Практика 243
5.1.7. Резюме 244
5.2. Программирование в Win64 244
5.2.1. Изменения в типах данных 245
5.2.2. Выравнивание стека 245
5.2.3. GUI-приложения 246
5.2.4. Программирование драйверов 250
5.2.5. Отладка приложений в Win64 254
5.2.6. Резюме 254

Глава 6 . МНОГОПРОЦЕССОРНЫЕ СИСТЕМЫ 255
6.1. Работа с APIC 255
6.1.1. Общий обзор 255
6.1.2. Включение APIC 256
6.1.3. Local APIC ID 257
6.1.4. Локальная векторная таблица 257
6.1.5. Local APIC Timer 259
6.1.6. Обработка прерываний 261
6. 1.7. Работа с I/O APIC 263
6.1.8. Практика 266
6.1.9. Резюме 270
6.2. Межпроцессорное взаимодействие 270
6.2.1. Общий обзор 270
6.2.2. Межпроцессорные прерывания 271
6.2.3. Синхронизация доступа к данным 273
6.2.4. Инициализация многопроцессорной системы 275
6.2.5. Практика 276
6.2.6. Резюме 280

Приложение А. MSR-регистры 281
А. 1. Регистр IA32_EFER 281
А.2. Регистры, используемые командами SYSENTER/SYSEXIT 281
А.З. Регистры, используемые командами SYSCALL/SYSRET 282
А.4. Регистры APIC 282
А.5. Регистры для управления сегментами в long mode 283
А.6. Вспомогательные регистры 283
Приложение Б. Системные регистры 283
Б.1. Регистр CR0 283
Б.2. Регистры CR2 и CR3 285
Б.З. Регистр CR4 286
Б.4. Регистры GDTR и IDTR 287
Б.5. Регистры LDTR и TR 288
Б.6. Регистр флагов 288
Б.7. Регистр CR8 290

Приложение В. Системные команды 290
В.1. Работа с системными регистрами 290
В. 2. Системные команды 293
В.З. Работа с кэшем процессора 295
В.4. Дополнительные команды 295
Алфавитный указатель 297

 

Похожая литература

642

https://www.htbook.ru/kompjutery_i_seti/programmirovanie/programmirovanie_na_assemblereПрограммирование на ассемблереhttps://www.htbook.ru/wp-content/uploads/2015/06/assembler_platforma_x86-64.jpg

https://www.htbook.ru/wp-content/uploads/2015/06/assembler_platforma_x86-64.jpg

Программирование и БДассемблер,компьютерное железо,компьютеры,ПрограммированиеАссемблер для платформы x86-64. Аблязов Руслан Зуфярович ‘Программирование на ассемблере на платформе x86-64’ ДМК Пресс, 2011 год, ( PDF) В книге ‘Программирование на ассемблере. ..’ рассказывается о работе процессора в двух его основных режимах: защищенном режиме и 64-битном, который также называют long mode (‘длинный режим’). Изложены, как принципы и механизмы работы процессора…SomМихаил Михайлов[email protected]Техническая литература


Поделиться

Assembler

Ассемблер на примерах

 

Assembler
Автор: Рудольф Марек
Издательство: Наука и Техника, 2005
PDF, 240 страниц, 7.20 МБ

Оценка: 

Эта книга представляет собой великолепное практическое руководство по основам программирования на языке ассемблера. Изложение сопровождается большим количеством подробно откомментированных примеров, что способствует наилучшему пониманию и усвоению материала. Доходчиво объясняются все основные вопросы программирования на этом языке. Вы узнаете, как писать ассемблерные программы под разные операционные системы (Windows, DOS, Linux), как создавать резидентные программы, как писать ассемблерные вставки в программы на языках высокого уровня и многое другое. Попутно вам будут разъяснены основные моменты работы процессора, операционных систем, управления памятью и взаимодействия программ с аппаратными устройствами ПК — то есть все то, без знания чего нельзя обойтись при программировании на языке низкого уровня, которым и является ассемблер. Книга написана доступным языком. Лучший выбор для начинающих.
868 admin 22 апреля 2009  Скачать книгу
Ассемблер на примерах

 

Assembler
Автор: Пирогов В. Ю.
Издательство: БХВ-Петербург, 2005
DOC, 416 страниц, 1.00 МБ

Оценка: 

На практических примерах рассмотрен широкий круг вопросов программирования на языке ассемблера, начиная от азов и заканчивая основами многозадачного программирования в операционных системах Windows NT\2000\XP\2003. Описаны команды микропроцессора, использование MASM, создание консольных и оконных приложений в Windows, работа с файлами и др. Все примеры сопровождаются подробными комментариями. Большое внимание уделяется совместному использованию языков ассемблера и C++, а также основам API-программирования. Для программистов, преподавателей и студентов.
1505 delovar 02 сентября 2010  Скачать книгу
Ассемблер: эффективный учебный курс: Основы компьютерных вычислений (+ CD-ROM)

 

Assembler
Автор: Голубь Н. Г.
Издательство: Diasoft, 2005
PDF, 832 страницы, 24.96 МБ

Оценка: 

В книге дано описание следующих элементов языка Ассемблера процессоров Intel x86: системы счисления, внутреннее представление данных и команд, основы 16- и 32-разрядного программирования, программирование сопроцессора, ввод-вывод информации в DOS и Windows, использование макросредств, потоковых мультимедийных ММХ- и ХММ-команд (расширения SSE/SSE2/SSE3). Подробно, шаг за шагом на многочисленных примерах законченных программ рассматриваются идеи и принципы организации вычислений на Ассемблере от простого к сложному, используя аналогию и прямую поддержку со стороны алгоритмических языков Pascal (Borland Pascal~7.x, Borland Delphi-5.0/6.0/7.0) или C/C++ (Borland C++ 3.1/4.5/5.02, Borland C++ Builder 5.0/6.0, Microsoft Visual C++ 6. 0, Microsoft Visual Studio.NET 2002/2003). Для разработчиков разнообразного программного обеспечения, желающих повысить качество, надежность и эффективность своих программ, преподавателей и студентов, профессионально изучающих программирование, а также для всех желающих познакомиться с нижним уровнем программирования процессоров Intel x86.
3010 immer 05 июня 2009  Скачать книгу
Ассемблер для Win 32

 

Assembler
Автор: Галисеев Г.В.
Издательство: Диалектика / Вильямс, 2007
DOC, 368 страниц, 1. 00 МБ

Оценка: 

Эта книга-самоучитель поможет читателю самостоятельно освоить основы языка ассемблера и научиться создавать программы на этом языке. Здесь подробно рассказано о том, как начать работать с ассемблером и как писать программы на этом языке. В книге рассматривается в основном 32-разрядный режим работы ассемблера, позволяющий обращаться к процедурам прикладного интерфейса (API) Windows. Тем не менее, приведены и некоторые сведения, специфичные только для 16-разрядного режима, например, описание работы прерываний и понятие о программировании для DOS. Однако книга является лишь введением в язык ассемблера, поэтому в ней не отражены расширенные возможности языка ассемблера и команды, разработанные для новейших версий процессоров. Книга не является учебником по программированию для начинающих и для работы с ней необходимо иметь базовые понятия о программировании, а также хотя бы минимальное представление о том, как работает операционная система Windows.
1332 lubacha 10 декабря 2009  Скачать книгу
Программирование на языке ассемблера для микроконтроллеров семейства i8051

 

Assembler
Автор: Каспер Э.
Издательство: Горячая линия — Телеком, 2004
PDF, 191 страниц, 5.73 МБ

Оценка: 

Изложены основы программирования на языке Ассемблера для популярного семейства микроконтроллеров i8051. Описаны особенности архитектуры микроконтроллеров семейства i8051. Приведены сведения о технологии разработки программ, системе и форматах команд. Книга содержит информацию о программировании некоторых типов задач, в том числе задач цифровой фильтрации сигналов, а также несколько рекомендаций о стиле программирования для начинающих программистов.
690 krakuza 14 февраля 2009  Скачать книгу
BIOS: Дизассемблирование, модификация, программирование (+ CD-ROM)

 

Assembler
Автор: Салихан Д.М.
Издательство: БХВ-Петербург, 2007
DOC, 784 страницы, 1. 00 МБ

Оценка: 

Книга посвящена аспектам дезассемблирования кода BIOS материнской платы и BIOS плат расширения. На практических примерах рассматриваются вопросы разработки специализированного кода BIOS и методы его внедрения в двоичные файлы BIOS, а также необходимый дли этого инструментарий. Подробно описаны все аспекты реализации BIOS материнской платы и BIOS плат расширения, в том числе и новейшие шинные протоколы HyperTransport и PCI Express. Особое внимание уделено безопасности BIOS, в том числе методам эксплуатации уязвимостей и защите BIOS от несанкционированных модификаций. Освещаются вопросы разработки кода для встроенных систем х86. Дается обзор дальнейших перспектив развития технологий BIOS. Прилагаемый диск содержит примеры исходного кода, фрагменты дизассемблированных листингов, а также все иллюстрации, приведенные в книге. Для системных программистов и специалистов в области компьютерной безопасности.
2839 andreich 11 июня 2009  Скачать книгу
Ассемблер для Windows (+ CD-ROM)

 

Assembler
Автор: Пирогов В.Ю.
Издательство: БХВ-Петербург, 2012
PDF, 896 страниц, 26.88 МБ

Оценка: 

Рассмотрены необходимые сведения для программирования Windows-приложений на ассемблерах MASM и TASM: разработка оконных и консольных приложений; создание динамических библиотек; многозадачное программирование; программирование в локальной сети, в том числе и с использованием сокетов; создание драйверов, работающих в режиме ядра; простые методы исследования программ и др. В 4-м издании материал существенно переработан в соответствии с новыми возможностями ОС. Значительно шире рассмотрены вопросы управления файлами и API-программирования в Windows. Добавлен материал по программированию в ОС семейства Windows NT: Windows 2000/XP/Server 2003/Vista. На компакт-диске приведены многочисленные примеры, сопровождающие текст и проверенные на работоспособность в операционной системе Windows Vista.
3253 bablo 16 марта 2015  Скачать книгу
Программирование на языке ассемблера IBM PC

 

Assembler
Автор: Пильщиков В. Н.
Издательство: Диалог-МИФИ, 2014
PDF, 288 страниц, 8.64 МБ

Оценка: 

Книга представляет собой учебное пособие по языку ассемблер для персональных компьютеров типа IBM_РС. Подробно рассмотрены команды этих ЭВМ, конструкция языка и методы программирования на нем. Изложение сопровождается многочисленными примерами. Для студентов и преподавателей ВУЗов, для всех желающих детально изучить язык ассемблер и приемы программирования на нем.
1046 vitalysev 15 июня 2016  Скачать книгу
Ассемблер (+ дискета)

 

Assembler
Автор: Жуков Андрей
Издательство: БХВ-Петербург, 2014
DjVu, 448 страниц, 17. 92 МБ

Оценка: 

«Книга является руководством по программированию на ассемблере для микропроцессорных систем на базе «i80x86» и посвящена практическому применению этого языка на примере и с использованием ассемблера «а86». Рассматриваются дополнительные возможности языков ассемблера: макрокоманды и связь с языками высокого уровня. Приводится обзор стилей языков ассемблера для разных вычислительных систем. В качестве иллюстрации применения ассемблеров рассмотрены различные вопросы, связанные с многозадачностью, — обработка прерываний и резидентные программы. Изложенный материал снабжен примерами, контрольными вопросами и заданиями к практическим работам. Для начинающих программистов.»
1628 vtormai 25 июня 2016  Скачать книгу
Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера

 

Assembler
Автор: Ревич Юрий Всеволодович
Издательство: БХВ-Петербург, 2012
DjVu, 352 страницы, 14. 08 МБ

Оценка: 

Изложены принципы функционирования, особенности архитектуры и приемы программирования микроконтроллеров Atmel AVR. Приведены готовые рецепты для программирования основных функций современной микроэлектронной аппаратуры: от реакции на нажатие кнопки или построения динамической индикации до сложных протоколов записи данных во внешнюю память или особенностей подключения часов реального времени. Особое внимание уделяется обмену данными микроэлектронных устройств с персональным компьютером, приводятся примеры программ. В книге учтены особенности современных моделей AVR и сопутствующих микросхем последних лет выпуска. Приложения содержат основные параметры микроконтроллеров AVR, перечень команд и тексты программ для них, а также список используемых терминов и аббревиатур.
1277 anarho 25 мая 2015  Скачать книгу
Программирование на ассемблере: Учебное пособие для вузов

 

Assembler
Автор: Одиноков Владимир Викторович
Издательство: Горячая линия — Телеком, 2011
PDF, 280 страниц, 8. 40 МБ

Оценка: 

«Изучение самого «древнего» из языков программирования — ассемблера абсолютно необходимо для всех, кто желает в совершенстве овладеть искусством программирования. Почему же ассемблер столь важен? Во-первых, ни один язык программирования кроме него не дает такого ясного представления о строении аппаратуры ЭВМ. Во-вторых, язык ассемблера незаменим для разработки программ для встроенных устройств — микропроцессорных систем и микроконтроллеров, используемых в LCD телевизорах, автомагнитолах, сотовых телефонах, медицинской аппаратуре и других подобных разработках. Эти устройства часто не имеют операционных систем и поэтому управляющие программы должны быть автономными. Материал изложен от написания и отладки простейших программ в среде отладчика debug до практической разработки автономных программ, не использующих не только операционную систему, но и BIOS. Приведенные сведения иллюстрируются примером достаточно сложной программы — шестнадцатеричного редактора, который позволяет редактировать как содержимое оперативной памяти, так и файлы на диске. Теоретический материал в совокупности с предлагаемыми индивидуальными заданиями оформлен в виде лабораторных работ, что значительно облегчает индивидуальное восприятие Предмета читателем и повышает ценность книги при использовании в учебном процессе. Для студентов технических вузов, будет полезна для широкого круга специалистов, желающих систематизировать свои познания в области программирования и устройства микропроцессорных систем.»
1016 admin 14 июля 2012  Скачать книгу
Ассемблер — это просто: Учимся программировать (+ CD-ROM)

 

Assembler
Автор: Калашников О. А.
Издательство: БХВ-Петербург, 2016
PDF, 336 страниц, 10.08 МБ

Оценка: 

Подробно и доходчиво объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, основы работы с сопроцессором, сегментация памяти в реальном масштабе времени, управление клавиатурой и последовательным портом, работа с дисками и многое другое. Описано, как разработать безобидный нерезидентный вирус и антивирус против этого вируса, как написать файловую оболочку (типа Norton Commander или FAR Manager) и как писать резидентные программы. Каждая глава состоит из объяснения новой темы, описания алгоритмов программ, многочисленных примеров и ответов на часто задаваемые вопросы. Во второе издание внесены исправления и добавлены новые примеры. Компакт-диск содержит исходные коды всех примеров, приведенных в книге, с подробными описаниями.
1222 phoenix7 20 декабря 2018  Скачать книгу
Программирование на ассемблере на платформе x86-64 (+ CD-ROM)

 

Assembler
Автор: Аблязов Руслан Зуфярович
Издательство: ДМК Пресс, 2011
DjVu, 304 страницы, 12.16 МБ

Оценка: 

«В данной книге речь идет о работе процессора в двух его основных режимах: защищенном режиме и 64-битном, который также называют long mode («длинный режим»). Также помимо изложения принципов и механизмов работы процессора в защищенном и 64-битном режимах, речь пойдет о программировании на ассемблере в операционных системах семейства Windows, как в 32-битных, так и 64-битных версиях. Рассматривается не только разработка обычных приложений для операционных систем Windows, но и разработка драйверов на ассемблере. При написании книги уделялось большое внимание именно практической составляющей, т.е. изложение материала идет только по делу и только то, что необходимо знать любому системному и низкоуровневому программисту. Последний раздел книги посвящен принципам работы многопроцессорных систем, а также работе с расширенным программируемым контроллером прерываний (APIC). На диске, прилагаемом к книге, находятся полные исходные коды примеров к книге, а также дополнительные программы и материалы. Издание предназначено для системных и низкоуровневых программистов, а также для студентов и преподавателей технических специальностей высших и средне-специальных учебных заведений. »
1103 stalker1965 7 октрября 2014  Скачать книгу
Основы языка Ассемблера

 

Assembler
Автор: Финогенов К.
Издательство: Горячая Линия — Телеком, Радио и связь, 2001
PDF, 288 страниц, 8.64 МБ

Оценка: 

Книга представляет собой учебное пособие по языку ассемблера персональных компьютеров типа IBM PC. Описаны особенности архитектуры микропроцессоров Intel и всего компьютера в целом, правила составления программ, основные конструкции языка и приемы программирования, принципы программирования подключаемой к компьютеру аппаратуры. Рассмотрены возможности использования в 16-разрядных приложениях реального режима средств современных 32-разрядных процессоров. Дано сжатое описание принципов защищенного режима с примером программирования. В приложении дан перечень команд процессора Pentium с примерами и пояснениями. Для студентов и преподавателей средних и высших учебных заведений, а также для всех желающих познакомиться с основами современных микропроцессоров и их программированием.
1039 vitalysev 12 марта 2009  Скачать книгу
Assembler для DOS, Windows и Linux

 

Assembler
Автор: Зубков С. В.
Издательство: ДМК Пресс, 2013
DOC, 640 страниц, 1.00 МБ

Оценка: 

В книге полностью освещены все аспекты современного программирования на ассемблере, включая системное и прикладное программирование для DOS, Windows и UNIX (Solaris, Linux, и FreeBSD), работу с устройствами напрямую, взаимодействие с языками высокого уровня и многое другое. Здесь рассмотрены наборы команд, особенности процессоров Intel, вплоть до Pentium III, и архитектура компьютеров на их основе. Кроме того, описаны популярные алгоритмы — генераторы случайных чисел, быстрые вычисления с фиксированной запятой, вывод графики в SVGA-режимах. В качестве иллюстраций для каждого нового алгоритма или приема программирования приведены свыше 50 рабочих текстов программ, которые могут компилироваться как средствами Borland, так и средствами Microsoft или Watcom. Все базовые понятия вводятся с нуля, поэтому предварительного знакомства с другими языками программирования не требуется. Книга ориентирована как на профессионалов, так и на начинающих без опыта программирования.
2324 admin 21 октрября 2016  Скачать книгу
Assembler для DOS, Windows и UNIX: Руководство

 

Assembler
Автор: Зубков Сергей Владимирович
Издательство: ДМК Пресс, 2015
DOC, 640 страниц, 1.00 МБ

Оценка: 

В книге описываются все аспекты современного программирования на ассемблере для DOS, Windows и Unix (Solaris, Linux и FreeBSD), включая создание резидентных программ и драйверов, прямое программирование периферийных устройств, управление защищенным режимом и многое другое. Подробно рассмотрена архитектура процессоров Intel вплоть до Pentium II. Все главы иллюстрированы подробными примерами работоспособных программ. Книга ориентирована как на профессионалов, так и на начинающих без опыта программирования.
2327 admin 23 августа 2017  Скачать книгу
Программирование на ассемблере на платформе x86-64: Руководство

 

Assembler
Автор: Аблязов Руслан Зуфярович
Издательство: ДМК Пресс, 2016
DjVu, 302 страницы, 12.08 МБ

Оценка: 

В данной книге речь идёт о работе процессора в двух его основных режимах: защищенном режиме и 64-битном, который также называют long mode («длинный режим»). Также помимо изложения принципов и механизмов работы процессора в защищенном и 64-битном режимах, речь пойдёт о программировании на ассемблере в операционных системах семейства Windows, как в 32-битных, так и 64-битных версиях. Рассматривается не только разработка обычных приложений для операционных систем Windows, но и разработка драйверов на ассемблере. При написании книги уделялось большое внимание именно практической составляющей, т.е. изложение материала идёт только по делу и только то, что необходимо знать любому системному и низкоуровневому программисту. Последний раздел книги посвящен принципам работы многопроцессорных систем, а также работе с расширенным программируемым контроллером прерываний (APIC). На диске, прилагаемом к книге, находятся полные исходные коды примеров к книге, а также дополнительные программы и материалы. Издание предназначено для системных и низкоуровневых программистов, а также для студентов и преподавателей технических специальностей высших и средне-специальных учебных заведений.
1098 volshebnih 16 мая 2019  Скачать книгу

 

справочник по языку ассемблера x86-64

Машинный код x86-64 является родным языком процессоров в большинстве настольных и портативные компьютеры. Язык ассемблера x86-64 представляет собой удобочитаемую версию этого Машинный код.

x86-64 имеет сотни инструкций и компилирует программы в наиболее эффективный машинный код требует хорошего понимания всех их — действительно, самый быстрый компилятор C для процессоров x86-64 разработан Интел! Однако мы сможем разработать вполне функциональный компилятор. используя только небольшое подмножество инструкций x86-64.

Это руководство по этому подмножеству x86-64 и библиотеке OCaml, которая у нас есть. предназначен для создания инструкций x86-64.

язык ассемблера x86-64

Ассемблерные программы, созданные нашим компилятором, имеют следующий вид:

 ;; фронтматерия: глобальная и т.д.
вход:
        ;; инструкции
метка1:
        ;; больше инструкций
метка2:
        ;; больше инструкций
 

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

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

Директивы

Основным интерфейсом нашей библиотеки OCaml является директива типа . Директива соответствует одной строке ассемблерного кода; мы создадим файл .s из список этих директив. Директивы, таким образом, соответствуют непосредственно передовые декларации, этикетки и инструкции.

Операнды

Многие директивы принимают один или несколько аргументов. Для большинства инструкций эти аргументы являются экземплярами операнд тип. Операнд может быть любым из:

  • Регистр A, записанный как Reg <регистр> (например, Reg Rax или Reg Р8 ).
  • «Немедленное» числовое постоянное значение, записанное как Imm .
  • Смещение в памяти, определяемое двумя дополнительными операндами. Например, MemOffset(Reg Rsp, Reg Rax) относится к ячейке памяти по адресу rsp + rax .

Некоторые директивы — например, прыжки — получают 9 баллов. 0015 строка именующая метка вместо операнд .

Ссылка на директиву

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

Директива Пример asm Описание Примечания
Глобальная строка   Сообщает ассемблеру экспортировать метку  
глобальная запись      
Часть струны раздел .текст Записывает в сегмент сгенерированного двоичного файла  
Этикетка строки этикетка: Маркирует место программы  
DqLabel строки Этикетка dq1 Записывает адрес конкретной метки DqLabel
LeaLabel of (операнд * строка) рак, [этикетка1] Загружает адрес этикетки в регистр LeaLabel
Mov of (операнд * операнд) мов ракс, [rsp + -8] Перемещает данные между местоположениями  
Сумма (операнд * операнд) добавить р8, рсп Добавляет свои аргументы, сохраняя результат в первом  
Подмножество (операнд * операнд) суппорт, 4 Вычитает второй аргумент из первого, сохраняя результат в первом  
Раздел операнда Идив Р8 Делит 128-битное целое число со знаком rdx:rax на его аргумент, сохраняя результат в rax Дивизион и Мул
Мул операнда имул [rsp + -8] Умножает rax на его аргумент, сохраняя результат в rdx:rax Дивизион и Мул
Cqo кво Знак расширяет rax в rdx  
Шл из (операнд * операнд) шл ракс,2 Сдвигает первый аргумент влево на второй аргумент  
Shr of (операнд * операнд) ШР,3 Сдвигает свой первый аргумент вправо на второй аргумент, дополняя нулями слева  
Sar of (операнд * операнд) сарракс,3 Сдвигает первый аргумент вправо на второй аргумент, дополняя нулями или единицами для сохранения знака Сар
Cmp из (операнд * операнд) смр р8, [рсп + -16] Сравнивает два аргумента, устанавливая RFLAGS  
И (операнд * операнд) и ракс, р8 Выполняет побитовое И своих аргументов, сохраняя результат в первом аргументе  
Или (операнд * операнд) или r8, 15 Выполняет побитовое ИЛИ своих аргументов, сохраняя результат в своем первом аргументе  
Setz операнда набор Устанавливает для своего однобайтового аргумента текущее значение ЗФ Сетц и др.
Набор операндов нач. Устанавливает для своего однобайтового аргумента текущее значение (SF != OF) Сетл
Соединение строки JMP этикетка1 Переходит выполнение к заданной метке  
Струна этикетка1 Переходит выполнение к данной метке, если ZF установлен Прыжки
Единица строки jne label1 Переходит выполнение к данной метке, если ZF не установлен Прыжки
Jl струны этикетка1 Переход к заданной метке, если SF != OF Прыжки
Jnl строки JNL Этикетка1 Переходит выполнение к данной метке, если SF == OF Прыжки
Джг веревки JG этикетка1 Переход к заданной метке, если SF == OF AND !ZF Прыжки
Цепь струны JNG Этикетка1 Переходит выполнение к данной метке, если SF != ИЛИ ZF Прыжки
ComputedJmp операнда джмп ракс Переход к месту в заданном операнде  
Восстановленный Возвращает управление вызывающей функции  
Комментарий строки ;; полезный комментарий Комментарий  

DqLabel

DqLabel "label1" записывает адрес данной метки в программу как данные ( dq — сокращение от «данные, четверное слово»). Затем вы можете загрузить этот адрес с инструкцией mov . Вы должны убедиться, что выполнение вашей программы никогда не доходит до этой директивы — это просто данные, а не инструкция!

LeaLabel

LeaLabel (Reg Rax, "label1") загружает адрес данной метки в регистр. Вы будете использовать это при выполнении вычисляемого прыжка или при попытке загрузить данные с заданной метки (например, в сочетании с DqLabel ).

Разд. и Мл.

Div и Mul работают иначе, чем Add и Sub . Потому что умножение двух 64-битные числа часто переполняются, результат imul сохраняется в rdx:rax как 128-битный номер . Наш компилятор не обрабатывает переполнение, поэтому вам не нужно беспокоиться об этом для умножения; однако idiv выполняет обратная операция, деление rdx:rax своим аргументом. Если вы просто хотите разделите rax , вам нужно знак-удлинить rax на rdx с помощью cqo инструкция. Это устанавливает rdx на все 0, если rax положительное или нулевое и все 1 с если rax отрицательно.

Наконец, ни Div , ни Mul не могут принимать непосредственное значение в качестве своего значения. аргумент — это должен быть либо регистр, либо смещение памяти.

Сар

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

Сец

Setz(Reg Rax) устанавливает последний байт rax в 0b00000001 , если установлен ZF и до 0b00000000 иначе. В сборке на самом деле выглядит как setz al , т.к. al — это имя последнего байта rax . Библиотека сборки OCaml занимает заботиться об этом для вас.

Сетл

setl — сокращение от «установить, если меньше». Так же, как Setz устанавливает свой аргумент равным 1, если последняя инструкция cmp сравнивает равные аргументы, setl устанавливает свой аргумент равным 1 если в последней инструкции cmp первый операнд был меньше второй. Так

 смр р8, 40
установить аль
 

установит последний байт rax в 1, если r8 меньше 40 .

Это работает, потому что cmp arg1, arg2 устанавливает несколько флагов:

  • ZF если arg1 - arg2 = 0
  • SF , если arg1 - arg2 < 0
  • ИЗ , если arg1 - arg2 переполняется

setl переходит, если SF != OF , что означает, что значение со знаком arg1 меньше чем значение со знаком arg2 .

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

Условные переходы

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

 смр р8, 40
jng лейбл1
 

перейдет к метке 1, если значение в r8 было не больше 40.

Справочник по языку ассемблера x86-64

Машинный код x86-64 является родным языком процессоров в большинстве настольных и портативные компьютеры. Язык ассемблера x86-64 представляет собой удобочитаемую версию этого Машинный код.

x86-64 имеет сотни инструкций и компилирует программы в наиболее эффективный машинный код требует хорошего понимания всех их — действительно, самый быстрый компилятор C для процессоров x86-64 разработан Интел! Однако мы сможем разработать вполне функциональный компилятор. используя только небольшое подмножество инструкций x86-64.

Это руководство по этому подмножеству x86-64 и библиотеке OCaml, которая у нас есть. предназначен для создания инструкций x86-64.

язык ассемблера x86-64

Ассемблерные программы, созданные нашим компилятором, имеют следующий вид:

 ;; фронтматерия: глобальная и т. д.
вход:
        ;; инструкции
метка1:
        ;; больше инструкций
метка2:
        ;; больше инструкций
 

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

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

Директивы

Основным интерфейсом нашей библиотеки OCaml является директива типа . Директива соответствует одной строке ассемблерного кода; мы будем производить . s файл из список этих директив. Директивы, таким образом, соответствуют непосредственно передовые декларации, этикетки и инструкции.

Операнды

Многие директивы принимают один или несколько аргументов. Для большинства инструкций эти аргументы являются экземплярами операнда типа . Операнд может быть любым из:

  • Регистр A, записанный как Reg <регистр> (например, Reg Rax или Reg Р8 ).
  • «Немедленное» числовое постоянное значение, записанное Имм <число> .
  • Смещение в памяти, определяемое двумя дополнительными операндами. Например, MemOffset(Reg Rsp, Reg Rax) относится к ячейке памяти по адресу rsp + rax .

Некоторые директивы — например, переходы — принимают строку , именующую метку вместо операнд .

Ссылка на директиву

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

Директива Пример asm Описание Примечания
Глобальная строка   Сообщает ассемблеру экспортировать метку  
глобальная запись      
Часть струны раздел .текст Записывает в сегмент сгенерированного двоичного файла  
Этикетка строки этикетка: Маркирует местоположение программы  
DqLabel строки Этикетка dq1 Записывает адрес конкретной метки DqLabel
LeaLabel of (операнд * строка) леа ракс, [этикетка1] Загружает адрес этикетки в регистр LeaLabel
Mov of (операнд * операнд) мов ракс, [rsp + -8] Перемещает данные между местоположениями  
Сумма (операнд * операнд) добавить р8, рсп Добавляет свои аргументы, сохраняя результат в первом  
Подмножество (операнд * операнд) суппорт, 4 Вычитает второй аргумент из первого, сохраняя результат в первом  
Раздел операнда Идив Р8 Делит 128-битное целое число со знаком rdx:rax на его аргумент, сохраняя результат в rax Дивизион и Мул
Мул операнда имул [rsp + -8] Умножает rax на его аргумент, сохраняя результат в rdx:rax Дивизион и Мул
Cqo рядом с Знак расширяет rax в rdx  
Шл из (операнд * операнд) шл ракс,2 Сдвигает первый аргумент влево на второй аргумент  
Shr of (операнд * операнд) ШР,3 Сдвигает свой первый аргумент вправо на второй аргумент, дополняя нулями слева  
Sar of (операнд * операнд) сарракс,3 Сдвигает первый аргумент вправо на второй аргумент, дополняя нулями или единицами для сохранения знака Сар
Cmp из (операнд * операнд) смр р8, [рсп + -16] Сравнивает два аргумента, устанавливая RFLAGS  
И (операнд * операнд) и ракс, р8 Выполняет побитовое И своих аргументов, сохраняя результат в первом аргументе  
Или (операнд * операнд) или r8, 15 Выполняет побитовое ИЛИ своих аргументов, сохраняя результат в своем первом аргументе  
Setz операнда набор Устанавливает для своего однобайтового аргумента текущее значение ZF Сетц и др.
Набор операндов нач. Устанавливает для своего однобайтового аргумента текущее значение (SF != OF) Сетл
Соединение строки jmp этикетка1 Переходит выполнение к заданной метке  
Струна этикетка1 Переходит выполнение к данной метке, если ZF установлен Прыжки
Единица строки jne label1 Переходит выполнение к данной метке, если ZF не установлен Прыжки
Дж строки этикетка1 Переход к заданной метке, если SF != OF Прыжки
Jnl строки JNL Этикетка1 Переходит выполнение к данной метке, если SF == OF Прыжки
Джг веревки JG этикетка1 Переход к заданной метке, если SF == OF AND !ZF Прыжки
Цепь струны JNG Этикетка1 Переход к заданной метке, если SF != OF OR ZF Прыжки
ComputedJmp операнда джмп ракс Переход к месту в заданном операнде  
Восстановленный Возвращает управление вызывающей функции  
Комментарий строки ;; полезный комментарий Комментарий  

DqLabel

DqLabel "label1" записывает адрес данной метки в программу как данные ( dq — сокращение от «данные, четверное слово»). Затем вы можете загрузить этот адрес с инструкцией mov . Вы должны убедиться, что выполнение вашей программы никогда не доходит до этой директивы — это просто данные, а не инструкция!

LeaLabel

LeaLabel (Reg Rax, "label1") загружает адрес данной метки в регистр. Вы будете использовать это при выполнении вычисляемого прыжка или при попытке загрузить данные с заданной метки (например, в сочетании с DqLabel ).

Разд. и Мл.

Div и Mul работают иначе, чем Add и Sub . Потому что умножение двух 64-битные числа будут часто переполняться, результат imul хранится в rdx:rax как 128-битный номер . Наш компилятор не обрабатывает переполнение, поэтому вам не нужно беспокоиться об этом для умножения; однако idiv выполняет обратная операция, деление rdx:rax на его аргумент. Если вы просто хотите разделите rax , вам нужно знак-удлинить rax на rdx с помощью cqo инструкция. Это устанавливает rdx на все 0, если rax положительное или нулевое и все 1 с если rax отрицательный.

Наконец, ни Div , ни Mul не могут принимать непосредственное значение в качестве своего значения. аргумент — это должен быть либо регистр, либо смещение памяти.

Сар

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

Сец

Setz(Reg Rax) устанавливает последний байт rax в 0b00000001 , если ZF установлен и до 0b00000000 иначе. В сборке на самом деле выглядит как setz al , т.к. al — это имя последнего байта rax . Библиотека сборки OCaml занимает заботиться об этом для вас.

Сетл

setl — сокращение от «установить, если меньше». Так же, как Setz устанавливает свой аргумент равным 1, если последняя инструкция cmp сравнивает равные аргументы, setl устанавливает свой аргумент равным 1 если за последние cmp инструкция, первый операнд меньше второй. Так

 смр р8, 40
установить аль
 

установит последний байт rax в 1, если r8 меньше 40 .

Это работает, потому что cmp arg1, arg2 устанавливает несколько флагов:

  • ZF если arg1 - arg2 = 0
  • SF , если arg1 - arg2 < 0
  • ИЗ , если arg1 - arg2 переполняется

setl переходит, если SF != OF , что означает, что значение со знаком arg1 меньше чем значение со знаком arg2 .

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

Условные переходы

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

 смр р8, 40
jng лейбл1
 

перейдет к метке 1, если значение в r8 было не больше 40.

Справочник по языку ассемблера x86-64

Машинный код x86-64 является родным языком процессоров в большинстве настольных и портативные компьютеры. Язык ассемблера x86-64 представляет собой удобочитаемую версию этого Машинный код.

x86-64 имеет сотни инструкций и компилирует программы в наиболее эффективный машинный код требует хорошего понимания всех их — действительно, самый быстрый компилятор C для процессоров x86-64 разработан Интел! Однако мы сможем разработать вполне функциональный компилятор. используя только небольшое подмножество инструкций x86-64.

Это руководство по этому подмножеству x86-64 и библиотеке OCaml, которая у нас есть. предназначен для создания инструкций x86-64.

язык ассемблера x86-64

Ассемблерные программы, созданные нашим компилятором, имеют следующий вид:

 ;; фронтматерия: глобальная и т. д.
вход:
        ;; инструкции
метка1:
        ;; больше инструкций
метка2:
        ;; больше инструкций
 

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

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

Директивы

Основным интерфейсом нашей библиотеки OCaml является директива типа . Директива соответствует одной строке ассемблерного кода; мы создадим файл . s из список этих директив. Директивы, таким образом, соответствуют непосредственно передовые декларации, этикетки и инструкции.

Операнды

Многие директивы принимают один или несколько аргументов. Для большинства инструкций эти аргументы являются экземплярами операнд тип. Операнд может быть любым из:

  • Регистр A, записанный как Reg <регистр> (например, Reg Rax или Reg Р8 ).
  • «Немедленное» числовое постоянное значение, записанное как Imm .
  • Смещение в памяти, определяемое двумя дополнительными операндами. Например, MemOffset(Reg Rsp, Reg Rax) относится к ячейке памяти по адресу rsp + rax .

Некоторые директивы — например, прыжки — получают 9 баллов.0015 строка именующая метка вместо операнд .

Ссылка на директиву

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

Директива Пример asm Описание Примечания
Глобальная строка   Сообщает ассемблеру экспортировать метку  
глобальная запись      
Часть струны раздел .текст Записывает в сегмент сгенерированного двоичного файла  
Этикетка строки этикетка: Маркирует место программы  
DqLabel строки Этикетка dq1 Записывает адрес конкретной метки DqLabel
LeaLabel of (операнд * строка) рак, [этикетка1] Загружает адрес этикетки в регистр LeaLabel
Mov of (операнд * операнд) мов ракс, [rsp + -8] Перемещает данные между местоположениями  
Сумма (операнд * операнд) добавить р8, рсп Добавляет свои аргументы, сохраняя результат в первом  
Подмножество (операнд * операнд) суппорт, 4 Вычитает второй аргумент из первого, сохраняя результат в первом  
Раздел операнда Идив Р8 Делит 128-битное целое число со знаком rdx:rax на его аргумент, сохраняя результат в rax Дивизион и Мул
Мул операнда имул [rsp + -8] Умножает rax на его аргумент, сохраняя результат в rdx:rax Дивизион и Мул
Cqo кво Знак расширяет rax в rdx  
Шл из (операнд * операнд) шл ракс,2 Сдвигает первый аргумент влево на второй аргумент  
Shr of (операнд * операнд) ШР,3 Сдвигает свой первый аргумент вправо на второй аргумент, дополняя нулями слева  
Sar of (операнд * операнд) сарракс,3 Сдвигает первый аргумент вправо на второй аргумент, дополняя нулями или единицами для сохранения знака Сар
Cmp из (операнд * операнд) смр р8, [рсп + -16] Сравнивает два аргумента, устанавливая RFLAGS  
И (операнд * операнд) и ракс, р8 Выполняет побитовое И своих аргументов, сохраняя результат в первом аргументе  
Или (операнд * операнд) или r8, 15 Выполняет побитовое ИЛИ своих аргументов, сохраняя результат в своем первом аргументе  
Setz операнда набор Устанавливает для своего однобайтового аргумента текущее значение ЗФ Сетц и др.
Набор операндов нач. Устанавливает для своего однобайтового аргумента текущее значение (SF != OF) Сетл
Соединение строки JMP этикетка1 Переходит выполнение к заданной метке  
Струна этикетка1 Переходит выполнение к данной метке, если ZF установлен Прыжки
Единица строки jne label1 Переходит выполнение к данной метке, если ZF не установлен Прыжки
Jl струны этикетка1 Переход к заданной метке, если SF != OF Прыжки
Jnl строки JNL Этикетка1 Переходит выполнение к данной метке, если SF == OF Прыжки
Джг веревки JG этикетка1 Переход к заданной метке, если SF == OF AND !ZF Прыжки
Цепь струны JNG Этикетка1 Переходит выполнение к данной метке, если SF != ИЛИ ZF Прыжки
ComputedJmp операнда джмп ракс Переход к месту в заданном операнде  
Восстановленный Возвращает управление вызывающей функции  
Комментарий строки ;; полезный комментарий Комментарий  

DqLabel

DqLabel "label1" записывает адрес данной метки в программу как данные ( dq — сокращение от «данные, четверное слово»). Затем вы можете загрузить этот адрес с инструкцией mov . Вы должны убедиться, что выполнение вашей программы никогда не доходит до этой директивы — это просто данные, а не инструкция!

LeaLabel

LeaLabel (Reg Rax, "label1") загружает адрес данной метки в регистр. Вы будете использовать это при выполнении вычисляемого прыжка или при попытке загрузить данные с заданной метки (например, в сочетании с DqLabel ).

Разд. и Мл.

Div и Mul работают иначе, чем Add и Sub . Потому что умножение двух 64-битные числа часто переполняются, результат imul сохраняется в rdx:rax как 128-битный номер . Наш компилятор не обрабатывает переполнение, поэтому вам не нужно беспокоиться об этом для умножения; однако idiv выполняет обратная операция, деление rdx:rax своим аргументом. Если вы просто хотите разделите rax , вам нужно знак-удлинить rax на rdx с помощью cqo инструкция. Это устанавливает rdx на все 0, если rax положительное или нулевое и все 1 с если rax отрицательно.

Наконец, ни Div , ни Mul не могут принимать непосредственное значение в качестве своего значения. аргумент — это должен быть либо регистр, либо смещение памяти.

Сар

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

Сец

Setz(Reg Rax) устанавливает последний байт rax в 0b00000001 , если установлен ZF и до 0b00000000 иначе. В сборке на самом деле выглядит как setz al , т.к. al — это имя последнего байта rax . Библиотека сборки OCaml занимает заботиться об этом для вас.

Сетл

setl — сокращение от «установить, если меньше». Так же, как Setz устанавливает свой аргумент равным 1, если последняя инструкция cmp сравнивает равные аргументы, setl устанавливает свой аргумент равным 1 если в последней инструкции cmp первый операнд был меньше второй.

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

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