русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Микропроцессоры Hammer. Структурная схема


Дата добавления: 2014-04-18; просмотров: 792; Нарушение авторских прав


Новое семейство микропроцессоров АМD получило название Наmmег. Этот процессор произ­водится по технологии 0,13 мкм с медными соединениями и изолированной подложкой . Микропроцессоры данного семейства являются 64-раз­рядными, однако в отличие от архитектуры 1А-64 1п1е1, обеспечивают совмес­тимость с системой команд х86, в связи с чем архитектура получила название Х86-64.

Основные преимущества архитектуры х86-64 следующие: -- обратная совместимость с инструкциями х86;

- 64-битные версии регистров общего назначения;

- 8 новых РОН, доступных только для 64-битных приложений;

- величен объем адресуемой памяти;

- высокая производительность 32-битных приложений, поддержка 64-битных приложений.

Упрощенная структура микропроцессора Наmmег показана на рис, 2.15.

Создавая новую архитектуру, разработчики компании АМD стремились по­высить производительность микропроцессора не только за счет увеличения тактовой частоты или числа вычислительных блоков, но и за счет повыше­ния степени их загрузки. С этой целью в микропроцессор внесены следую­щие изменения:

- увеличена длина вычислительных конвейеров: целочисленного конвейера до 12 стадий, с плавающей точкой до 17 стадий;

- встроен контроллер памяти;

- усовершенствован блок предсказания ветвлений;

- встроен когерентный интерфейс НурегТгаnsport.

 

Размещая на кристалле контроллер па­мяти, АМD стремилась повысить производительность подсистемы обмена с основной памятью, которая в современных микропроцессорах является уз­ким местом. Оптимальный для данного процессора и максимально прибли­женный к нему контроллер позволяет организовать эффективный обмен с памятью, минуя системную шину, на частоте работы ядра.

Процессоры с архитектурой Наmmег оснащаются 64- либо 128-битным кон­троллером памяти. Встроенный когерентный интерфейс НурегТгаnsport обеспечивает возмож­ность использования Наmmег в мультипроцессорной конфигурации.



Улучшение блока предсказания ветвлений заключается в выявлении и учете информации о типе ветвлений: статическое ветвление, т. е. адрес перехода не изменяется, или динамическое.

Различия процессоров для одно- и многопроцессорных конфигураций за­ключаются, в основном, в размере кэш-памяти второго уровня и числе линков интерфейса НурегТгаnsport.

 

Технология HyperTransport™  
Технология HyperTransport™ – составляющая новой архитектуры AMD, представляющая собой высокопроизводительный интерфейс типа “точка-точка” предназначенный для связи интегральных микросхем и спроектированный для обеспечения необходимой пропускной способности для будущих вычислительных и коммуникационных платформ. Обеспечивая пиковую производительность до 12,8 Гб/c, технология HyperTransport™ предлагает идеальное решение для большинства требовательных к полосе пропускания системных приложений. Применение HyperTransport™ в вычислительных системах способствует увеличению общей производительности за счет устранения узких мест при передаче данных, увеличения пропускной способности и уменьшения задержек доступа.
Основные особенности технологии HyperTransport™:
· Может объединять до 32 устройств; · Требует небольшое количество сигнальных проводников, что значительно упрощает разработку системы; · Использование низковольтных дифференциальных сигналов помогает решить проблемы перекрестных помех и электромагнитной совместимости; · Продлевает жизненный цикл PCI, обеспечивая полную обратную совместимость с программной моделью PCI, драйверами и операционными системами при устранении узких мест и обеспечении пропускной способности необходимой для будущих быстродействующих чипов; · Использование низковольтных дифференциальных сигналов позволяет проектировщикам эффективно использовать технологии энергосбережения и разрабатывать простые и дешевые платы; · Поддержка ассиметричных связей и масштабируемость в скорости, ширине шины, частоте и направлении, позволяет разработчикам выбирать решение, соответствующее их задачам; · Обеспечивает широкую полосу пропускания, что позволяет легко добавлять новые высокопроизводительные части; · Сокращает время разработки проекта, поскольку добавление новых чипов может быть выполнено без полного перепроектирования системы. Занятие 34 (36) Двуядерные микропроцессоры Корпорация AMD первой представила стратегию двухядерных процессоров архитектуры x86 и первой объявила о завершении разработки двухядерного процессора архитектуры x86 для 64-разрядных вычислений. Двухядерный чип – это фактически два процессора в одном чипе. Преимущество такого процессора над одноядерным проявляется, прежде всего, при работе с многопоточными приложениями. Многопоточные задачи работают быстрее на двухядерных процессорах, потому что операционная система может распределять программные потоки отдельно по каждому ядру, в то время как на одноядерных процессорах задачи меняются по мере выполнения, то есть по очереди. Применение этой технологии позволит увеличить производительность процессоров нового поколения и одновременно избежать роста потребления энергии, которое накладывает ограничения на развитие одноядерных процессоров. Кроме того, чем выше частота процессора, тем больше он теряет производительность при обращении к памяти. Два ядра получаются предпочтительней, чем одно, так как в этом случае легче обеспечить процессор данными для обработки. Поскольку производительность памяти увеличивается медленнее, чем скорость процессоров, увеличение производительности путем использования нескольких ядер выглядит более предпочтительным, чем наращивание частоты. Имеющееся процессорная архитектура AMD позволила интегрировать на тот же кристалл второе ядро при переходе на технологический процесс 90 нм. В процессорах архитектуры AMD64 с двумя ядрами дублированию подвергнуто само вычислительное ядро и кэш-память, в то время как контроллер памяти и контроллер HyperTransport остаются в двухядерных процессорах в неизменном виде. В этой связи ключевое значение начинает играть блок System Request Interface (SRI), на который возлагается обязанность арбитража потоков команд и данных между двумя ядрами. Выпускаемые двухядерные процессоры AMD Opteron, имеют два раздельных кэша второго уровня объемом по 1 Мбайту, интегрированный контроллер памяти DDR SDRAM и три шины HyperTransport. Новые процессоры с парой ядер выпускаются в Socket 940 исполнении, совместимы с имеющимися системными платами, блоками питания и совпадают по тепловому конверту с однопроцессорными решениями (95 Вт), обеспечивая непревзойденную производительность на ватт потребляемой мощности.. Кроме того, двухядерные процессоры полностью совместимы со всеми приложениями архитектуры x86 и AMD64, демонструя высочайшую эффективность при работе в многозадачном и многопоточном режиме.     Занятие (37) Особенности программирования на языке Ассемблер. Формат машинных команд IA-32 Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение некоторой операции. Правила кодирования команд называются форматом команд. Команды процессоров архитектуры IA-32 считаются сложными. Максимальная длина машинной команды IA-32 со­ставляет 15 байт. Реальная команда может содержать гораздо меньшее количество полей, вплоть до одного — только код операции. Приведенный на рис. 3.1 формат машинной команды является наиболее полным.   Как на уровне формата машинной команды соответствуют между собой машин­ные команды и команды ассемблера? Для примера рассмотрим типичную коман­ду языка ассемблера: mov ebx, еах Команда M0V производит копирование содержимого регистра ЕАХ в регистр ЕВХ. Соответствующая машинная команда будет выглядеть так: 88 D8 Значение 8В — код операции. Еще один пример команды M0V есх, 128 Данная команда инициализирует содержимое регистра ЕСХ десятичным значе­нием 128. Соответствующая машинная команда выглядит так: 89 00000080 Значение поля с кодом операции — В9. Из примеров видно, что прямого соответствия между структурой команды ассемблера и соответствующей машинной командой нет. Несмотря на то, что команда ассемблера одна и та же (M0V), коды машинных команд — разные (8В и В9). Большинство команд ассемблера имеют несколько возможных вариантов сочетания операндов. Как показано в приве­денных примерах, несмотря на одинаковые названия команд ассемблера, для каждого возможного сочетания операндов имеется своя машинная команда, со сво­им значением поля кода операции (рис. 3.1). Это говорит о том, что машинная ко­манда всегда однозначна по отношению к производимым ею действиям на уровне аппаратуры. Несколько упрощая реальность, можно утверждать, что значение в поле кода операции является номером микропрограммы в блоке микропрограмм­ного управления для каждой конкретной команды ассемблера с каждым конкрет­ным вариантом сочетания операндов. Логически любая команда языка ассемблера содержит несколько элементов. Элемент, описывающий, что делать, называется кодом операции (КОП). Зна­чение в поле кода операции некоторым образом определяет в блоке микропрог­раммного управления подпрограмму, реализующую действия для данной ко­манды. Элементы, описывающие объекты, с которыми нужно что-то делать, являют­ся операндами. Операнды в команде могут и не задаваться, а подразумеваться по умолчанию. Элементы, описывающие, как делать, являются типами операндов и обычно задаются неявно. Они используются транслятором ассемблера при формиро­вании машинной команды для определения значения поля кода операции. Эти же элементы имеет и машинная команда, но в закодированном виде. Пере­вод команд ассемблера в соответствующие машинные команды осуществляет спе­циальная программа ~- ассемблер, которую можно также назвать транслятором (компилятором) ассемблера.     Поле префиксов Префиксы — необязательные однобайтные элементы машинной команды. Назна­чение префиксов — изменить действия, выполняемые командой. Префиксы могут указываться программистом явно при написании исходного текста программы, либо их, по определенным соображениям, может вставить ассемблер. Процессор распознает префиксы по их значениям. Машинная команда может иметь до четы­рех префиксов одновременно. В памяти префиксы предшествуют команде. Поря­док их следования при этом может быть любым.   Далее перечислены типы префиксов, которые может использовать прикладная программа. Префикс замены сегмента в явной форме указывает, какой сегментный регистр используется в данной команде для адресации стека или данных. Префикс от­меняет выбор сегментного регистра по умолчанию. Префиксы замены сегмента имеют следующие значения: 2Eh — замена сегмента CS; 36h — замена сегмента SS; 3Eh— замена сегмента DS; 26h — замена сегмента ES; 64h— замена сегмента FS; 65h — замена сегмента GS.   Префикс повторения используется с цепочечными командами (командами об­работки строк). Этот префикс «зацикливает» команду для обработки всех эле­ментов цепочки. Система команд поддерживает два типа префиксов: безуслов­ные (REP— 0F3h), заставляющие цепочечную команду повторяться некоторое количество раз, и условные (REPE/REPZ — 0F3h, REPNE/REPNZ — 0F2h), которые при зацикливании проверяют некоторые флаги, и в результате проверки возможен досрочный выход из цикла.   Префикс блокировки шины инициирует выдачу процессором сигнала L0CK# (зна­чение OFOh) для блокировки системной шины. Используется в многопроцес­сорных конфигурациях для обеспечения монопольного владения системной шиной. Сигнал L0CK# может формироваться лишь с определенной номенклату­рой команд процессора, работающих в цикле «чтение-модификация-запись».   Префикс размера адреса (значение 67h) уточняет разрядность адреса: 16 или 32 бита. Каждой команде, в которой используется адресный операнд, ставится в соответствие разрядность адреса этого операнда. Если разрядность адреса для данной команды составляет 16 битов, это означает, что команда содержит 16-раз­рядное смещение и оно соответствует 16-разрядному смещению адресного опе­ранда относительно начала некоторого сегмента (см. рис. 3.1). В контексте ма­териала главы 2 (см. рис. 2.7 и 2.8) это смещение называется эффективный адресом. Если разрядность адреса составляет 32 бита, это означает, что команда содержит 32-разрядное смещение, оно соответствует 32-разрядному смещению адресного операнда относительно начала сегмента и по его значению формируется 32-разрядное смещение в сегменте (см. рис. 3.1). С помощью префикса раз­рядности адреса можно изменить действующее по умолчанию значение разряд­ности адреса. Это изменение будет касаться только той команды, которой пред­шествует префикс.   Префикс размера операнда (значение 66h) аналогичен префиксу размера адре­са, но указывает на разрядность операндов (32 или 16 битов), с которыми рабо­тает команда. По каким правилам устанавливаются по умолчанию значения атрибутов раз­рядности адреса и операндов? Если команда имеет операнд в памяти, то его адрес представляет собой значение смещения относительно начала сегмента данных (если не используется префикс переопределения сегмента) и содержится в поле смеще­ния машинной команды. Размер этого поля зависит от текущего режима адреса­ции (атрибуты usel6 или use32 в директивах сегментации). При 16-разрядной адресации размер поля смещения в машинной команде составляет 16 битов. При 32-разрядной адресации размер поля смещения в машинной команде составляет 32 бита. Явное задание префикса размера адреса позволяет указать процессору зна­чение, отличающееся от действующего по умолчанию. Например, если действую­щий размер адреса равен 16 битам, то использование перед какой-либо командой префикса 67h определит для нее (и только для нее!) размер адреса в 32 бита. И на­оборот, если действующий размер адреса равен 32 бита, то указание перед коман­дой префикса 67h определит для нее (и только для нее!) размер адреса в 16 битов. Физически это будет отражаться на размере поля смещения в данной машинной команде. Префикс размера операнда ббп позволяет сменить действующий для данной команды атрибут размера операнда. Команда, которая по умолчанию работает со словом (16 битов) или с двойным словом (32 бита), имеет атрибут размера операн­да, равный 16 и 32 бита соответственно. Применение префикса размера операнда позволяет сменить действующий по умолчанию атрибут. При работе процессора i8086 в реальном и виртуальном режимах атрибуты раз­мера адреса и операнда по умолчанию равны 16 битов. В защищенном режиме зна­чения этих атрибутов зависят от значения бита D дескриптора сегмента. Если D = 0, то атрибуты размера адреса и операнда равны 16 битов, если D = 1, то эти атрибуты рав­ны 32 бита. Изменить действующие по умолчанию атрибуты адреса и размера опе­рандов можно применением атрибутов usel6 или use32 в директивах сегментации. Занятие (38) Особенности программирования на языке Ассемблер. Код операции Код операции — обязательный элемент, описывающий операцию, выполняе­мую командой. Код операции может занимать от одного до трех байт. Для некоторых машинных команд часть битов кода операции может находиться в байте mod r/m. Многим командам соответствует несколько кодов операций, каждый из кото­рых определяет нюансы выполнения операции. Отметим, что поле кода операции не имеет однозначной структуры (см. рис. 3.1). В зависимости от конкретных ко­манд, не обязательно разных с точки зрения языка ассемблера, оно может иметь в своем составе от одного до трех элементов, назначение которых описано в табл. 3.2. Один из этих трех элементов является непосредственно кодом операции или ее частью, остальные уточняют детали операции. Такое строение поля кода опера­ции усложняет, в частности, процесс дизассемблирования. Для определения размера и границ очередной команды необходимо полностью проанализировать ее Поле кода операции. Байт режима адресации mod r/m Байт режима адресации mod r/m, иногда называемый постбайтом, несет инфор­мацию об операндах и режиме адресации. Большинство команд процессора Intel — двухоперандные. Операнды могут находиться в памяти, а также в одном или двух регистрах. Архитектура IA-32 не допускает, чтобы оба операнда команды находи­лись в памяти. Если операнд находится в памяти, то байт mod r/m определяет ком­поненты (смещение, базовый и индексный регистры), используемые для вычисле­ния его эффективного адреса (см. главу 2). Байт modr/m состоит из трех полей (см. рис. 3.1). - Поле mod (два бита) определяет способ адресации и количество байтов, занима­емых в команде адресом операнда (поле смещения в команде). Поле modисполь­зуется совместно с полем r/m, которое определяет способ модификации адреса операнда полем смещения в команде. Поле mod в комбинации с полем r/m обра­зует 32 возможных значения, обозначающих один из восьми регистров и 24 ре­жима адресации. К примеру, -если mod = 00, то поле смещения в команде отсут­ствует и адрес операнда определяется содержимым базового и/или индексного регистра. Какие именно регистры потребуются для вычисления эффективного адреса, определяется значением этого байта. - Если mod = 01, то поле смещения в команде присутствует, занимает один байт и модифицируется содержимым базового и/или индексного регистра. - Если mod= 10, то поле смещения в коман­де присутствует, занимает два или четыре байта (в зависимости от значения, действующего по умолчанию или определяемого префиксом размера адреса) и модифицируется содержимым базового и/или индексного регистра. - Если mod = 11, то операндов в памяти нет — они находятся в регистрах. Это же значе­ние байта modиспользуется в случае, когда команда работает с непосредствен­ным операндом. - Поле reg (3 бита) определяет либо регистр (табл. 3.3 и 3.4), находящийся в ко­манде на месте второго операнда, либо возможное расширение кода операции (давая в совокупности размер поля КОП в 11 битов). - Поле r/m используется совместно с полем modи определяет либо регистр, на­ходящийся в команде на месте первого операнда (если mod= 11), либо базовые и индексные регистры, применяемые для вычисления эффективного адреса (со­вместно с полем смещения в команде). Таблица 3.3.Значения кодов в поле reg (поле w присутствует в команде)  
Поле reg w = 0 w=1
AL AX/EAX
CL CX/ECX
DL DX/EDX
BL BX/EBX
AH SP/ESP
CH BP/EBP
DH SI/ESI
BH DI/EDI

Таблица З.4.Значения кодов в поле reg (поле w отсутствует)

 

Поле reg 16-разрядные операции 32-разрядные операции
АХ ЕАХ
сх ЕСХ
DX EDX
ВХ ЕВХ
SP ESP
ВР ЕВР
SI ESI
DI EDI

В таблицах нет содержимого поля reg для 16-разрядных регистров в 32-разрядых операциях, так как в архитектуре Intel отдельно использовать старшую половину 32-разрядного регистра невозможно.

В архитектуре Intel один из операндов обязательно находится в регистре, и он может быть первым или вторым. Расположение первого и второго операндов в формате команды фиксировано. Но, например, команда M0V может выполнять пересылку как из регистра в память, так и из памяти в регистр. В машинном представлении это одна и та же команда. В ее поле reg будет содержаться код регистра (см. табл. 3.3 и 3.4), а в поле r/m — код режима адресации (см. далее). Эти две команды будут различаться только одним битом d, который определяет направление передачи. Если в команде участвуют два регистра, то в этом случае вступает в силу правило: поле reg определяет второй операнд, а поле r/m — первый. Если команда mov рабо­тает с ячейкой памяти, то в исходном тексте программы могут быть следующие варианты записи этой команды:

mov abl1.ax ;пересылка содержимого ах в ячейку памяти abl1

или
mov ax,abl1 ;пересылка содержимого ячейки памяти abl1 в ах

В машинном представлении эти две команды будут выглядеть одинаково, за исключением бита d:

- для команды MOV abll,ax бит d = 0;

- для команды MOV ax,abll бит d = 1.

Наиболее сложными для декодирования являются команды с операндом в па­мяти. Фирма Intel сопровождает описание системы команд специальными табли­цами, облегчающими интерпретацию содержимого байта mod r/m (табл. 3.5 и 3.6). С их помощью можно довольно легко восстановить компоненты, из которых фор­мировался адрес операнда, и, в конечном итоге, восстановить соответствующую команду ассемблера для данной машинной команды.

 

Таблица 3.5.Значения байта mod r/m (16-разрядная адресация)

 

г8 AL CL DL BL AH CH DH BH
г16 AX CX DX BX SP BP SI DI
г32 EAX ECX EDX EBX ESP EBP ESI EDI
/цифра (код операции)
reg
Эффективный адрес mod r/m Шестнадцатеричные значения mod r/m
[BX+SI]
[BX+DI]
[BP+SI] 0a la 2a 3a
[BP+DI] 0b lb 2b 33' 3b
[SI] 0c lc 2c 3c
[DI] Od Id 2d 3d
смещ 16 Oe le 2e 3e
[ВХ] Of If 2f 3f
[BX+SI]+Cмещ_8
[ВХ+01]+смещ_8
[BP+SI]+ смещ_8 4a 5a 6a 7a
[ВР+Ш]+смещ_8 4b 5b 6b 7b
[SI]+ смещ_8 4c 5c 6c 7c
ЭфФЕКТИВНЫЙ адрес mod r/m Шестнадцатеричные значения mod r/m  
тП+смещ_8 4d 5d 6d 7d  
гор1+смещ_8 ПО 4e 5e 6e 7e  
ГВХ]+смещ_8 4f 5f 6f 7f  
[BX+SI]+ смещ _16 aO a8 bO b8  
гвХ+М]+ смещ _16 al a9 bl b9  
[BP+SI]+ смещ 16 8a 9a a2 aa b2 ba  
[BP+DI]+ смещ _16 8b 9b a3 ab b3 bb  
rSI]+смещ _16 8c 9c a4 ac b4 be  
го1]+смещ_16 8d 9d a5 ad b5 bd  
[ВР]+смещ_16 ПО 8e 9e a6 ae b6 be  
[ВХ]+смещ_16 8f 9f a7 af bf  
EAX/AX/AL   c0 c8 dO d8 eO e8 ГО f8  
ECX/CX/CL cl c9 dl d9 el e9 fl f5  
EDX/DX/DL c2 ca d2 Da e2 ea f2 fa  
EBX/BX/BL c3 cb d3 Db e3 eb 0 fb  
ESP/SP/AH c4 cc d4 Dc e4 ec f4 fc  
ЕВР/ВР/СН c5 cd d5 Dd e5 ed f5 fd  
ESI/SI/DH по c6 ce d6 De e6 ее f6 fe  
EDI/DI/BH c7 cf d7 Df e7 ef f7 ff  
                                           

Таблица З.6.Значения байта mod r/m (32-разрядная адресация)

 

r32 EAX ECX EDX EBX ESP EBP ESI EDI
/цифра (код операции)
reg
Эффективный адрес mod r/m Шестнадцатеричные значения mod r/m
_[ЕАХ]__
_[ЕСХ]__
_[ЕDХ]__ 0a la 2a 3a
[EBX] 0b lb 2b 3b
[sib] 0c lc 2c 3c
Смещ__32 Od Id 2d 3d
[ESI] Oe le 2e 3e
[EDI] Of If 2f 3f
[ЕАХ]+смеш 8
[ЕСХ]+смеш 8
[ЕDХ]+смеш 8 4a 5a 6a 7a

Продолжение

Эффективный адрес mod r/m Шестнадцатеричные значения mod r/m
[ЕВХ]+смещ_8 4b 5b 6b 7b
[sib]+ смещ_8 4c 5c 6c 7c
[ЕВР]+смещ_8 4d 5d 6d 7d
[ESI]+ смещ_8 4e 5e 6e 7e
[ЕDI]+смещ_8 4f 5f 6f 7f
[ЕАХ]+смещ_32 aO a8 bO b8
[ЕСХ]+смещ_32 al a9 bl b9
[ЕDХ]+смещ_32 8a 9a a2 aa b2 ba'
[ЕВХ]+смещ_32 8b 9b a3 ab b3 bb
[SIB] 8c 9c a4 ac b4 be
[ЕВР]+смещ_32 8d 9d a5 ad b5 bd
[ESI]+смещ_32 8e 9e a6 ae b6 be
[ЕDI]+смещ_32 8f 9f a7 af bf
EAX/AX/AL cO C8 dO d8 eO e8 fO f8
ECX/CX/CL cl C9 dl d9 el e9 fl f9
EDX/DX/DL c2 ca d2 Da e2 ea f2 fa
EBX/BX/BL c3 cb d3 Db e3 eb G ft
ESP/SP/AH c4 cc d4 Dc e4 ec f4 fc
ЕВР/ВР/СН c5 cd d5 Dd e5 ed f5 fd
ESI/SI/DH c6 ce d6 De e6 ее f6 fe
EDI/DI/BH c7 cf d7 Df e7 ef f7 ff

 



<== предыдущая лекция | следующая лекция ==>
Микропроцессоры АМD К7. Структурная схема . | Рассмотрим пример использования данных таблиц при значении байта mod r/m равном 87 h.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.265 сек.