
- •Оглавление
- •Введение
- •Основные отличия архитектур i686 и amd64
- •Общие принципы программирования на языке Assembler для платформ i686 и amd64
- •Регистры
- •Принцип передачи параметров в функции
- •Работа со стеком
- •Адресация
- •Листинг программы для сравнения архитектур i686 и amd64
- •Пример работы программы
- •Сравнение программ
- •Список литературы
Оглавление
Введение 3
Основные отличия архитектур i686 и amd64 4
Общие принципы программирования на языке Assembler для платформ i686 и amd64 5
Регистры 5
Принцип передачи параметров в функции 6
Работа со стеком 7
Адресация 7
Листинг программы для сравнения архитектур i686 и amd64 8
Пример работы программы 11
Сравнение программ 11
Вывод 12
Список литературы 13
Введение
В нашу жизнь уже давно вошли процессоры с 64-х разрядной архитектурой. Не смотря на то, что все еще активно используются 32-х разрядные процессоры, и что программ для них в разы больше, новая архитектура приобретает все больше поклонников. 64-х разрядные процессоры позволяют использовать больше ресурсов, чем 32-х разрядные, позволяют оперировать с большим количеством данных за единицу времени, что в свою очередь повышает скорость и точность вычислений . В тоже время использование 64-х разрядной архитектуры влечет за собой повышенное потребление оперативной памяти и некоторые проблемы с совместимостью программ, написанных, для 32-х разрядной архитектуры.
Можно предположить, что новая архитектура будет требовать других способов программирования, и это окажется правдой. Например, были изменены регистры, стек, правила передачи аргументов в функции и другое.
В данной работе будет приведено сравнение особенностей программирования для 32-х разрядных и 64-разрядных процессоров на языке ассемблера. В качестве ОС будет применяться операционная система Ubuntu 12.10 LTS, компилятор gcc. Также мы будем придерживаться AT&T нотации языка программирования Assembler.
Основные отличия архитектур i686 и amd64
Нововведения в архитектуре 64-х разрядных процессоров позволили значительно увеличить объем используемой памяти для одного ядра процессора .
Таблица 1. Общие ограничения на память
Характеристика |
32-разрядные модели |
64-х разрядные модели |
Виртуальное адресное пространство (один роцесс) |
4 ГБ |
16 ТБ |
Виртуальное адресное пространство (32-х разрядный процесс) |
2 ГБ (3 ГБ, при запуске системы с ключом /3GB) |
4 ГБ |
Виртуальное адресное пространство (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, 3RDX, 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-х разрядной архитектуры позволит более быстро, качественно и удобно решать поставленные как научные, так и общие задачи.
Стоит заметить, что результаты тестирования программ на различных платформах показывают, что в большинстве случаев использование 64-х разрядной архитектуры дает прирост производительности, по сравнению с 32-х разрядной архитектурой.