Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail



Результаты опроса: Хотите ли вы читать эту книгу?
Хочу 140 79.10%
Не хочу 28 15.82%
уже прочитал 9 5.08%
Голосовавшие: 177. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы
Старый 21.04.2011, 12:48   #1
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Адрес: Солнечное Тбилиси
Сообщений: 4,727
Репутация: 1884
По умолчанию Программирование на ассемблере на платформе x86-64



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


Отрывок из введения книги
Цитата:
....
А теперь расскажем вкратце, о чём идёт речь в данной книге. О программировании на языке ассемблер написано немало книг, и придумать что-то новое, что было бы интересно читателю, – не самая лёгкая задача. При написании книги была поставлена цель: изложить тот материал, который либо трудно, либо попросту невозможно найти в русскоязычной технической литературе о языке ассемблер и работе процессора вообще.
В данной книге описывается работа процессора в двух его основных режимах: защищённом и 64-разрядном (который также называют long mode, или «длинный режим»). Книга посвящена программированию на ассемблере в этих режимах, включая программирование под операционными системами Windows, т. к. системы Windows работают в защищённом и 64-разрядном режимах.
Большинство книг об ассемблере рассказывают о режиме реальных адресов, а также о наборе команд ассемблера, который использовался в 1990-95 гг. С учётом того что подавляющее большинство современных операционных систем (Windows и UNIX) работают в защищённом и 64-разрядном режимах, большинство книг об ассемблере без преувеличения можно назвать устаревшими, поскольку они рассказывают о том режиме процессора, который уже почти не используется. Иногда даже удивляешься, что в высших учебных заведениях на занятиях, посвящённых архитектуре ЭВМ, изучают работу процессора в том режиме, который 20 лет как устарел, и при этом ничего не говорят про режим, в котором работают современные операционные системы. Данная книга поможет не только узнать, как работает процессор, но и изучить основные принципы разработки операционных систем.
После изложения принципов и механизмов работы процессора в защищённом и 64-битном режимах речь пойдёт о программировании на ассемблере в самых распространённых операционных системах, работающих в этих двух режимах, а именно системах семейства Windows – как в 32-битных, так и в 64-битных версиях. Будут рассмотрены не только создание обычных приложений для операционных систем Windows, но и разработка драйверов.
Последняя глава книги освещает принципы работы многопроцессорных систем, а также работу с расширенным программируемым контроллером прерываний.
При написании книги большое внимание уделялось практической составляющей. Здесь рассматривается только то, что необходимо знать любому системному программисту и программисту, разрабатывающему низкоуровневые приложения.
Книга построена так, чтобы приведённый в ней материал мог усвоить каждый интересующийся. Поэтому первая глава посвящена основам языка ассемблер – после её прочтения даже тот, кто никогда не сталкивался с ассемблером, получит хоть и не большой, но всё-таки фундамент для изучения следующих глав книги.
В каждом разделе (за исключением первой главы) есть как минимум один практический пример для закрепления изученного материала. Полный исходный код всех примеров книги можно найти на компакт-диске, прилагающемся к книге.

Обсуждение книги все коментарии не касающиеся ассемблера писать в той теме.

Просьба оставлять здесь коментарии только касающиеся тематики книги, недочётов, ошибок и "недоделок".

Последний раз редактировалось rpy3uH; 14.08.2011 в 11:33.
rpy3uH вне форума   Ответить с цитированием
Старый 08.08.2011, 09:52   #2
Mikl___
Профессионал
 
Регистрация: 11.01.2010
Сообщений: 1,067
Репутация: 855
По умолчанию Программирование на ассемблере на платформе x86-64 - Неточности в книге

rpy3uH
Спасибо за книгу. Если интересно, вот обнаруженные неточности и опечатки, вдруг соберешься делать второе издание
стр 25 "Разумеется в защищенном режиме вместе с командой MOC" имеется в виду команда MOV
стр 29 "SAL - арифметический сдвиг влево. Команда полностью идентична команде SHL. Это одна и та же команда, только имена разные" код команды SAL -- D0Ex код команды SHL -- D0Fx просто некоторые трансляторы (MASM, TASM, FASM) по команде «SAL» генерируют код команды SHL, но это разные команды
стр 30. Работа с флагами процессора пропущена команда CMC (0F5h)
Работа со стеком "Операнд может иметь размер 2, 4, 8 байт в зависимости от режима; также он может быть сегментным регистром" следовало сказать о том, что команды POP CS в отличие от команд POP DS/ES/SS/FS/GS нет в природе и изменить текущий CS в программе можно только командами JMP FAR, RETF, IRET
стр 37-38 таблица 1.5 команды условных переходов сказано, что "JE то же, что и JZ" но тоже самое можно было написать про JC=JNAE=JB и т.п.
стр 38 "Иногда имеет смысл использовать команду TEST. Формат этой команды почти такой же, как и у команды CMP, но только в качестве второго операнда не может выступать значение памяти. Эта команда осуществляет операцию логического И" Стоило наверное написать, что CMP осуществляет операцию вычитания
стр 42 таблица 1.6. примеры сложения разных чисел и результаты
колонку "интерпретация для беззнаковых чисел и результаты" стоило делать на примере шестнадцатеричных чисел, тогда результат всегда выглядит верно
Код:

беззнак инерпр |знак интерпретация|результат
80h+80h=(1)00h | (-127)+(-127)=0  | CF=1 OF=1
40h+40h=80h    | 64+64=-128       | CF=0 OF=1
7Fh+1=80h      | 127+1=-128       | CF=0 OF=1
FCh+5=(1)01h   | (-4)+5=1         | CF=1 OF=0
60h+E0h=(1)40h | 96+(-32)=64      | CF=1 OF=0
C0h+C0h=(1)80h | (-64)+(-64)=-128 | CF=1 OF=0
C0h+BFh=(1)7Fh | (-64)+(-63)=127  | CF=1 OF=1
FFh+1=(1)00h   | (-1)+1=0         | CF=1 OF=0

единичка в скобках соответствует CF=1
флаг OF=1 только тогда, когда интерпретация для знаковых чисел выглядит "неверно" и чтобы не запутаться во флагах "переполнения" и "переноса" предлагается более простая формула:
S1 xor S2 xor SR xor CF = OF
где S1 и S2 значение знакового разряда операндов 1 и 2, а SR значение знакового разряда результата
стр 48 опечатка "OUTS/W/D" вместо "OUTSB/W/D"
стр 187 опечатка "LoadDriver:
invoke, 0, 0, SC_MANAGER_ALL_ACCESS" пропущена OpenSCManager

Последний раз редактировалось Mikl___; 09.08.2011 в 05:33.
Mikl___ вне форума   Ответить с цитированием
Старый 08.08.2011, 10:29   #3
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Адрес: Солнечное Тбилиси
Сообщений: 4,727
Репутация: 1884
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
rpy3uH
Спасибо за книгу. Если интересно, вот обнаруженные неточности и опечатки, вдруг соберешься делать второе издание
уже работаю над вторым изданием. но пока что-то всё у меня захрясло...

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
rpy3uH
стр 29 "SAL - арифметический сдвиг влево. Команда полностью идентична команде SHL. Это одна и та же команда, только имена разные" код команды SAL -- D0Ex код команды SHL -- D0Fx просто некоторые трансляторы (MASM, TASM, FASM) по команде «SAL» генерируют код команды SHL, но это разные команды
признаюсь, я сам об этом узнал только недавно при исследовании системы команд Intel

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
rpy3uH
стр 30. Работа с флагами процессора пропущена команда CMC (0F5h)
Работа со стеком "Операнд может иметь размер 2, 4, 8 байт в зависимости от режима; также он может быть сегментным регистром" следовало сказать о том, что команды POP CS в отличие от команд POP DS/ES/SS/FS/GS нет в природе и роль POP CS выполняют JMP FAR, RETF, IRET
спасибо, если честно не знал этого.

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
rpy3uH
стр 37-38 таблица 1.5 команды условных переходов сказано, что "JE то же, что и JZ" но тоже самое можно было написать про JC=JNAE=JB и т.п.
я тоже задумался над этим, но уже после выхода книги.

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
rpy3uH
стр 38 "Иногда имеет смысл использовать команду TEST. Формат этой команды почти такой же, как и у команды CMP, но только в качестве второго операнда не может выступать значение памяти. Эта команда осуществляет операцию логического И" Стоило наверное написать, что CMP осуществляет операцию вычитания

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
rpy3uH
стр 42 таблица 1.6. примеры сложения разных чисел и результаты
колонку "интерпретация для беззнаковых чисел и результаты" стоило делать на примере шестнадцатеричных чисел, тогда результат всегда выглядит верно
80h+80h=(1)00h
40h+40h=80h
7Fh+1=80h
FCh+5=(1)01h
60h+E0h=(1)40h
C0h+C0h=(1)80h
FFh+1=(1)00h единичка в скобках соответствует CF=1
флаг OF=1 только тогда, когда интерпретация для знаковых чисел выглядит "неверно" и чтобы не запутаться во флагах "переполнения" и "переноса" предлагается более простая формула S1 xor S2 xor SR xor CF = OF где S1 и S2 значение знакового разряда операндов 1 и 2, а SR значение знакового разряда результата
спасибо за формулу. но примеры с шестнадцатеричными числами выглядят как-то неоднозначно...
rpy3uH вне форума   Ответить с цитированием
Старый 13.03.2012, 21:10   #4
RedCrystal
Новичок
 
Регистрация: 13.03.2012
Адрес: Санкт-Петербург
Сообщений: 4
Репутация: 10

skype: compositum78
По умолчанию

Ранее, много лет назад, я несколько раз пробовал начать изучение с книги В.И. Юрова - не осилил...

Недавно купил указанную книгу Р.Аблязова. Начал читать, но пошла с большим скрежетом, точнее я бы сказал - совсем не пошла... (( Отложил, и взял Питера Абеля 5-е издание "Ассемблер и язык программирования для IBM PC" (купил вместе с Р.Аблязовым). Абель пошёл довольно таки легко... Форма изложения материала весьма понятна и доступна.

После Абеля попробую снова Р. Аблязова, т.к. Абель к сожалению пишет только об x86, а я надеюсь разобраться и с x64.

С уважением =RedCrystal=
RedCrystal вне форума   Ответить с цитированием
Старый 13.03.2012, 21:49   #5
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 20,840
Репутация: 3322

icq: 446843180
skype: phoenix_proger
По умолчанию

ну как бы прежде чем переходить в 64 битный код, нужно хоть основы подучить.
хотя я книгу не читал, не знаю как там с основами.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 21.04.2012, 19:58   #6
Станислав1
http://www.asmcode
Пользователь
 
Регистрация: 16.11.2011
Адрес: Новосибирск
Сообщений: 15
Репутация: 10

icq: 618871826
По умолчанию

Книжка супер, пример, где включается APIC и настраиваются прерывания в защищёнке таймера и клавы я перевел на загрузчик и всё работало. Но добавить к примеру включение мышки PS/2 как делал для PIC не получилось. Если подскажите почему буду рад.
Станислав1 вне форума   Ответить с цитированием
Старый 03.05.2012, 06:54   #7
Станислав1
http://www.asmcode
Пользователь
 
Регистрация: 16.11.2011
Адрес: Новосибирск
Сообщений: 15
Репутация: 10

icq: 618871826
По умолчанию

Вопрос отпал, после чтения количества аппорантых прерываний(ножек) у контроллера LAPIC сделал цикл для настройки их на вектора, после чего заработало не только 12е но и все 24.
Станислав1 вне форума   Ответить с цитированием
Старый 29.08.2012, 19:07   #8
Kastaneda
Пользователь
 
Регистрация: 26.02.2010
Адрес: Новосибирск
Сообщений: 22
Репутация: 10
По умолчанию

Здравствуйте!
Нашел в вашей книге ошибку, решил сообщить вам об этом, поиски привели меня на этот форум.
В листинге lmstructures.asm (sample 4.3) присутствует макрос
Код:

macro DEFINE_GATE64 selector, offset, IST, gate_type, DPL
{
	dd (offset and 0FFFFh) or (selector shl 16)
	dd (8000h or (DPL shl 13) or (gate_type shl 8) or IST) or ((offset shr 16) and 0FFFFh)
	dd (offset shr 32)
	dd 0
}

воспользовавшись им я неделю потратил на поиск ошибки в своем коде, пока не решил проверить правильность макроса (конечно сам виноват, надо проверять, что копипастишь)
Правильно должно быть так:
Код:

macro DEFINE_GATE64 selector, offset, IST, gate_type, DPL
{
	dd (offset and 0FFFFh) or (selector shl 16)
	dd (8000h or (DPL shl 13) or (gate_type shl 8) or IST) or (((offset shr 16) and 0FFFFh) shl 16) ; здесь нужен сдвиг влево
	dd (offset shr 32)
	dd 0
}

Все примеры из вашей книги успешно работают с этим макросом потому, что оффсет обработчика не превышает 2 байта (т.е. ((offset shr 16) and 0FFFFh) в результате дает ноль). А у меня оффсет был больше 2 байт, поэтому в результате получался не правильный дескриптор.

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

Последний раз редактировалось Kastaneda; 29.08.2012 в 19:47.
Kastaneda вне форума   Ответить с цитированием
Старый 23.07.2013, 12:01   #9
int16h
Новичок
 
Регистрация: 23.07.2013
Сообщений: 4
Репутация: 11
По умолчанию

Здравствуйте!
Данная книга мне показалась интересной!

Годится ли она, в качестве первого путеводителя в программинг под Win32/64 ?

п.с. основа (база) по асм'у (16 бит) имеется, т.е. не полный ноль
int16h вне форума   Ответить с цитированием
Старый 25.07.2013, 09:50   #10
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Адрес: Солнечное Тбилиси
Сообщений: 4,727
Репутация: 1884
По умолчанию

Цитата:
Сообщение от int16h Посмотреть сообщение
З
Годится ли она, в качестве первого путеводителя в программинг под Win32/64 ?
Годится .
rpy3uH вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Руслан Аблязов - Программирование на ассемблере на платформе x86-64 (+ CD-ROM) Alar Свободное общение 107 10.10.2015 13:58
Программирование на Ассемблере Николай ПН Помощь студентам 3 23.03.2010 01:56
Программирование микроконтроллера 80С196КС на ассемблере KOCT9IH Фриланс 3 07.11.2008 14:03




03:35.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


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

RusProfile.ru


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