Книга по Ассемблеру вопрос.

Обсуждение различной литературы о Linux

Модератор: Модераторы разделов

Ответить
Maria von Weber
Сообщения: 21

Книга по Ассемблеру вопрос.

Сообщение Maria von Weber »

Здравствуйте, развейте мои сомнения и подскажите правильно ли я думаю,
у меня процессор Intel core i7 (x64) имеется книга В.И.Юров Assembler 2-издание но она на IA-32, верно же что данная информация и примеры не подойдет под мою архитектуру и так как регистры и команды отличаются или же нет?
Стоит ли искать книгу на архитектуру x86_64 ?

Большое спасибо за внимание!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Книга по Ассемблеру вопрос.

Сообщение Bizdelnick »

x86_64 — расширение старых x86-архитектур, так что все примеры должны работать. Другой вопрос — стоит ли тратить время на изучение старья.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2652
ОС: Gentoo

Re: Книга по Ассемблеру вопрос.

Сообщение ormorph »

Maria von Weber писал(а):
31.05.2021 17:37
Здравствуйте, развейте мои сомнения и подскажите правильно ли я думаю,
у меня процессор Intel core i7 (x64) имеется книга В.И.Юров Assembler 2-издание но она на IA-32, верно же что данная информация и примеры не подойдет под мою архитектуру и так как регистры и команды отличаются или же нет?
Стоит ли искать книгу на архитектуру x86_64 ?
Там разница не особо отличается. Вполне подойдёт, там разница в разрядности. Обычно для 64 бит регистры начинаются с буквы r(rax, rcx...), ну а команды обычно с окончанием q(movq) - но это зависит от ассемблера который используете.
А вот практикум Юрова в некоторых местах желает лучшего, некоторые примеры не рабочие, много косяков, скорее всего его студенты писали. Для основ вполне подойдёт, но нужно знать что поправить чтобы перенести на 64 бита.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: Книга по Ассемблеру вопрос.

Сообщение olecya »

ormorph писал(а):
31.05.2021 18:12
Там разница не особо отличается.
Главное отличие в соглашении о передачи параметров не через стек, а через регистры. (для системных вызовов,
конечно ни кто не запрещает любой порядок передачи в пользовательские функции)
Наткнулась как то на записки "старого программиста" где все регистры были
заменены на 64 битные, но прерывание вызывалось не через syscall, а через int $0x80

Код: Выделить всё

man syscall
Оказалось что даже не указывая явно архитектуру сборки компилятор применял все системные вызовы из i386
со всеми их номерами и порядком передачи параметров.

P.S Предвижу возможные возражения. Я тоже написала что за такое надо руки отбивать, ведь серия статей
предназначена была для обучения и меня забанили. :)
Добавлено (20:59):
Maria von Weber писал(а):
31.05.2021 17:37
Стоит ли искать книгу на архитектуру x86_64 ?
Это смотря каким ассемблером вы пользуетесь. По моему есть книга для fasm. Все примеры выполнены в убунте на x86-64
Если нужна могу найти и выложить. Если по gas x86-64 с синтаксисом AT&T, то есть хорошие отрывки из книги которые для начала могут многое прояснить. Могу подобрать ссылки
Добавлено (21:10):
А, забыла сказать, что почти все на английском. И извиняюсь, в книжке используется не fasm, а yasm ассемблер с синтаксисом intel
Последний раз редактировалось olecya 31.05.2021 21:21, всего редактировалось 5 раз.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2652
ОС: Gentoo

Re: Книга по Ассемблеру вопрос.

Сообщение ormorph »

olecya писала:
31.05.2021 20:53
Наткнулась как то на записки "старого программиста" где все регистры были
заменены на 64 битные, но прерывание вызвалось не через syscall, а через int $0x80
Ну да, скорее всего он сам не пробовал эти примеры воспроизвести на 64 битной системе. Ну и там сохранение в регистры зависит от числа параметров, стек там тоже может использоваться.
Я у Юрова находил реально не рабочие примеры, например сортировка методом Хора, там если ввести в порядке убывания либо возрастания, то сортировка работает, но если ввести белиберду, то белиберда и выходит. Там просто не правильное представление алгоритма, перевели функциональный подход на использование стека, но не разобрались как правильно осуществить рекурсию на асме. Просто упустили важную деталь в работе функций - при возврате необходимо возвращать ещё значения параметров.
Спасибо сказали:
pauldjohn8
Сообщения: 6

Re: Книга по Ассемблеру вопрос.

Сообщение pauldjohn8 »

Bizdelnick писал:
31.05.2021 17:50
x86_64 — расширение старых x86-архитектур, так что все примеры должны работать. Другой вопрос — стоит ли тратить время на изучение старья.
Только ради интереса и ради знаний истории расширения x86-архитектур, а так да, смысла особо в этом нет.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Книга по Ассемблеру вопрос.

Сообщение Stauffenberg »

В общем, да, обратная совместимость гарантирована, хотя эффекты могут быть заметны. Тем не менее, все же, x86 и x86_64 это не просто 32 и 64 бита.
Каждое поколение процессоров содержит свои фичи, и хотя в семействе x86 это не так сильно заметно как, например, в ARM, все же это далеко не просто удвоенный размер ячеек регистров процессора :)

* Во-первых, сразу же... режим безопасности (так называемый NX-бит): x86_64 включает поддержку защиты от выполнения кода в областях памяти данных, что усиливает безопасность системы.
* x86_64 увеличивает количество регистров сопроцессора с 8 до 16.
* x86_64 включает новые инструкции и расширения команд, такие как SSE (Streaming SIMD Extensions), SSE2, SSE3, SSSE3, SSE4, AVX (Advanced Vector Extensions) и другие, которые позволяют выполнять более сложные операции и улучшают производительность.
* + Немаловажные изменения и в архитектуре регистров общего назначения.

Все это не так важно, если программировать на python или С, но если речь заходит об ассемблере(чем-то сложнее, чем hello world или циклов), то изменения архитектур могут быть заметны. А вообще, если уже браться за ассемблер, то для ARM ;)
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Ответить