Здравствуйте, развейте мои сомнения и подскажите правильно ли я думаю,
у меня процессор Intel core i7 (x64) имеется книга В.И.Юров Assembler 2-издание но она на IA-32, верно же что данная информация и примеры не подойдет под мою архитектуру и так как регистры и команды отличаются или же нет?
Стоит ли искать книгу на архитектуру x86_64 ?
Большое спасибо за внимание!
Книга по Ассемблеру вопрос.
Модератор: Модераторы разделов
-
- Модератор
- Сообщения: 20976
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Книга по Ассемблеру вопрос.
x86_64 — расширение старых x86-архитектур, так что все примеры должны работать. Другой вопрос — стоит ли тратить время на изучение старья.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
- Сообщения: 2913
- ОС: Gentoo
Re: Книга по Ассемблеру вопрос.
Там разница не особо отличается. Вполне подойдёт, там разница в разрядности. Обычно для 64 бит регистры начинаются с буквы r(rax, rcx...), ну а команды обычно с окончанием q(movq) - но это зависит от ассемблера который используете.Maria von Weber писал(а): ↑31.05.2021 17:37Здравствуйте, развейте мои сомнения и подскажите правильно ли я думаю,
у меня процессор Intel core i7 (x64) имеется книга В.И.Юров Assembler 2-издание но она на IA-32, верно же что данная информация и примеры не подойдет под мою архитектуру и так как регистры и команды отличаются или же нет?
Стоит ли искать книгу на архитектуру x86_64 ?
А вот практикум Юрова в некоторых местах желает лучшего, некоторые примеры не рабочие, много косяков, скорее всего его студенты писали. Для основ вполне подойдёт, но нужно знать что поправить чтобы перенести на 64 бита.
-
- Сообщения: 900
- ОС: debian, fedora (i3-wm)
Re: Книга по Ассемблеру вопрос.
Главное отличие в соглашении о передачи параметров не через стек, а через регистры. (для системных вызовов,
конечно ни кто не запрещает любой порядок передачи в пользовательские функции)
Наткнулась как то на записки "старого программиста" где все регистры были
заменены на 64 битные, но прерывание вызывалось не через syscall, а через int $0x80
Код: Выделить всё
man syscall
со всеми их номерами и порядком передачи параметров.
P.S Предвижу возможные возражения. Я тоже написала что за такое надо руки отбивать, ведь серия статей
предназначена была для обучения и меня забанили.
Добавлено (20:59):
Это смотря каким ассемблером вы пользуетесь. По моему есть книга для fasm. Все примеры выполнены в убунте на x86-64
Если нужна могу найти и выложить. Если по gas x86-64 с синтаксисом AT&T, то есть хорошие отрывки из книги которые для начала могут многое прояснить. Могу подобрать ссылки
Добавлено (21:10):
А, забыла сказать, что почти все на английском. И извиняюсь, в книжке используется не fasm, а yasm ассемблер с синтаксисом intel
Последний раз редактировалось olecya 31.05.2021 21:21, всего редактировалось 5 раз.
-
- Сообщения: 2913
- ОС: Gentoo
Re: Книга по Ассемблеру вопрос.
Ну да, скорее всего он сам не пробовал эти примеры воспроизвести на 64 битной системе. Ну и там сохранение в регистры зависит от числа параметров, стек там тоже может использоваться.
Я у Юрова находил реально не рабочие примеры, например сортировка методом Хора, там если ввести в порядке убывания либо возрастания, то сортировка работает, но если ввести белиберду, то белиберда и выходит. Там просто не правильное представление алгоритма, перевели функциональный подход на использование стека, но не разобрались как правильно осуществить рекурсию на асме. Просто упустили важную деталь в работе функций - при возврате необходимо возвращать ещё значения параметров.
Спасибо сказали:
-
- Сообщения: 6
Re: Книга по Ассемблеру вопрос.
Только ради интереса и ради знаний истории расширения x86-архитектур, а так да, смысла особо в этом нет.Bizdelnick писал: ↑31.05.2021 17:50x86_64 — расширение старых x86-архитектур, так что все примеры должны работать. Другой вопрос — стоит ли тратить время на изучение старья.
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Книга по Ассемблеру вопрос.
В общем, да, обратная совместимость гарантирована, хотя эффекты могут быть заметны. Тем не менее, все же, 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
Каждое поколение процессоров содержит свои фичи, и хотя в семействе 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)
"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)