
- •Введение
- •Основные отличия архитектур i686 и amd64
- •Общие принципы программирования на языке Assembler для платформ i686 и amd64
- •Регистры
- •Принцип передачи параметров в функции
- •Работа со стеком
- •Адресация
- •Листинг программы для сравнения архитектур i686 и amd64
- •Пример работы программы
- •Сравнение программ
- •Вывод
- •Список литературы
Оглавление |
|
Введение................................................................................................................................................... |
2 |
Основные отличия архитектур i686 и amd64........................................................................................ |
3 |
Общие принципы программирования на языке Assembler для платформ i686 и amd64.................. |
5 |
Регистры.............................................................................................................................................. |
5 |
Принцип передачи параметров в функции....................................................................................... |
6 |
Работа со стеком................................................................................................................................. |
7 |
Адресация............................................................................................................................................ |
7 |
Листинг программы для сравнения архитектур i686 и amd64............................................................ |
8 |
Пример работы программы.................................................................................................................. |
12 |
Сравнение программ............................................................................................................................. |
13 |
Вывод...................................................................................................................................................... |
14 |
Список литературы............................................................................................................................... |
15 |
1
Введение
В нашу жизнь уже давно вошли процессоры с 64-х разрядной архитектурой. Не смотря на то, что все еще активно используются 32-х разрядные процессоры, и что программ для них в разы больше, новая архитектура приобретает все больше поклонников.
64-х разрядные процессоры позволяют использовать больше ресурсов, чем 32-х разрядные, позволяют оперировать с большим количеством данных за единицу времени, что в свою очередь повышает скорость и точность вычислений и т. д. Но в тоже время использование 64-х разрядной архитектуры влечет за собой повышенное потребление оперативной памяти и небольшие проблемы с совместимостью программ, написанных, для 32-х разрядной архитектуры.
Можно предположить, что новая архитектура будет требовать других способов программирования, и это окажется правдой. Например, были изменены регистры, стек, правила передачи аргументов в функции и другое.
Учитывая это, в данной работе мы сравним особенности программирования для 32-х разрядных и 64-разрядных процессоров на языке ассемблера. Для компиляции программ будет применяться операционная система Ubuntu GNU\Linux 12.10, компилятор gcc 4.7.2. Также мы будем придерживаться AT&T нотации языка программирования Assembler.
2
Основные отличия архитектур i686 и amd64
Нововведения в архитектуре 64-х разрядных процессоров позволили значительно увеличить объем используемой памяти для одного ядра процессора (таблица 1).
Таблица 1. Общие ограничения на память
Характеристика |
32-разрядные модели |
64-х разрядные модели |
|
Виртуальное адресное |
4 ГБ |
16 ТБ |
|
пространство (один процесс) |
|||
|
|
||
Виртуальное адресное |
2 ГБ (3 ГБ, при |
|
|
пространство (32-х разрядный |
запуске системы с |
4 ГБ |
|
процесс) |
ключом /3GB) |
|
|
Виртуальное адресное |
|
|
|
пространство (64-х разрядный |
Неприменимо |
8 ТБ |
|
процесс) |
|
|
|
Пул подкачиваемой памяти |
470 МБ |
128 ГБ |
|
(режим ядра) |
|||
|
|
||
Пул неподкачиваемой памяти |
156 МБ |
128 ГБ |
|
(режим ядра) |
|||
|
|
||
Элемент системной таблицы |
660-900 МБ |
128 ГБ |
|
страниц |
|||
|
|
Также использование 64-х разрядной архитектуры позволяет обращаться к большему количеству регистров большего объема во время работы программы. Если при использовании 32-х разрядного режима мы могли обращаться к восьми 32-х разрядным регистрам общего назначения: EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP, к восьми 64-х разрядным регистрам для работы медиа данными и с числами с плавающей точкой: MMX0/FPR0, MMX1/FPR1, MMX2/FPR2, MMX3/FPR3, MMX4/FPR4, MMX5/FPR5, MMX6/FPR6, MMX7/FPR7, к флаговому 32-х разрядному регистру EFLAGS и к 32-х разрядному регистру-указателю на следующую инструкцию EIP, то в 64-х разрядном режиме у нас гораздо больше возможностей:
•Регистры общего назначения были расширены до 64-х разрядов с сохранением старой структуры и получили названия RAX, RBX, RCX,
3
RDX, RBP, RSI, RDI и RSP;
•Были введены новые 64-х разрядные регистры в количестве восьми штук: R8, R9, R10, R11, R12, R13, R14, R15;
•Флаговый регистр и регистр-указатель на следующую инструкцию процессора были расширены до 64-х разрядов и получили названия RFLAGS и RIP соответственно;
•Было добавлено 16 128-разрядных медиа-регистров под названиями XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15.
Из вышесказанного можно сделать вывод о том, что использование 64-х разрядной архитектуры позволит более быстро, качественно и удобно решать поставленные как научные, так и общие задачи.
Стоит заметить, что результаты тестирования программ (см. [4], [5], [6]) на различных платформах показывают, что в большинстве случаев использование 64-х разрядной архитектуры дает прирост производительности, по сравнению с 32-х разрядной архитектурой.
4