Как правильно установить блок питания | Блоки питания компьютера | Блог
За последнее десятилетие на рынке появилось много разнообразных блоков питания с активной, полупассивной и пассивной системами охлаждения. Давайте разберемся, как лучше установить блок питания в зависимости от его системы охлаждения и чем грозит его неправильная установка.
Установка блока питания в недавнем прошлом
Раньше у пользователей не было особого выбора при установке блока питания в корпус. Ведь в 90-е и нулевые годы на рынке царили стандарты форм-фактора AT и ATX, при которых блок питания, как правило, устанавливался в верхней части корпуса. БП еще и принимал активное участие в охлаждении компьютерных комплектующих, прокачивая нагретый воздух из около процессорного пространства сквозь себя.
Пока тепловыделение процессоров и видеокарт составляло 30–50 ватт, никаких проблем не возникало. Однако температурный режим в корпусе и в блоке питанияс рос вместе с тепловыделением компонентов системы. Поэтому компания Intel в 2004 году предложила стандарт BTX, призванный улучшить качество охлаждения в системном блоке, но массовым он так и не стал.
Однако стали меняться корпуса и сами блоки питания. Все чаще стали использоваться вентиляторы диаметром 120–140 мм, став практически стандартом в охлаждении БП. Постепенно и место посадки блока питания переехало в самое холодное место корпуса — вниз.
Популярный корпус Cooler Master 690 II Advanced, 2010 год.
Блоки питания наращивали мощность с каждым годом. Если в начале 2000-х годов реальная мощность массовых блоков питания составляла 150–200 ватт, то к началу 2010-х мощность повысилась до реальных 300–450 ватт, которые маркировались как 450–600 ваттные модели. Появлялись и блоки питания с пассивной системой охлаждения. Для стандартых ATX-корпусов производители обычно выносили систему охлаждения за его пределы, например как у Thermaltake Silent Purepower Fanless Heatpipe Cooling.
Корпуса с нижним расположением блока питания позволили более эффективно охлаждать сам БП. Поэтому модели с полупассивной и пассивной системами охлаждения обрели популярность.
Теперь перед пользователем, собирающим компьютер, возникают вопросы — как ставить блок питания? Вентилятором вверх или вниз? А если он совсем без вентилятора — с пассивной системой охлаждения? Давайте разберемся.
Чем опасен нагрев блока питания
Для начала стоит понять, чем опасен нагрев блока питания. Если открыть типичный БП, мы увидим целую россыпь конденсаторов. От них напрямую зависит стабильность и качество питания компьютера. Рассчитаны конденсаторы на довольно высокие температуры, в районе 85–105 градусов.
Однако со временем, под воздействием высоких температур и с ухудшающимся из-за запыленности охлаждением конденсаторы деградируют. Иногда просто «высыхают» — теряют электролит, иногда вздуваются и даже лопаются, а электролит вытекает. Деградация конденсаторов в цепи дежурного питания может вызвать проблемы с включением, а потом и подачу тока с напряжением выше 5 вольт, что гарантированно испортит материнскую плату.
Деградация фильтрующих конденсаторов в цепи питания 12 вольт вообще вызовет резкий рост пульсаций напряжения. Это выведет из строя другие конденсаторы: в цепях питания видеокарты и материнской платы.
Производители зачастую экономят на качестве конденсаторов, особенно в недорогих моделях, поэтому к вопросу охлаждения блока питания стоит подходить крайне серьезно. Ведь от него, по сути, зависит жизнь гораздо более дорогих комплектующих.
Не стоит забывать и о том, что чем выше температура поступающего в блок питания воздуха и выше его нагрев, тем ниже его эффективность. При тестировании блока питания на соответствие стандарту 80 PLUS используется температура входящего в него воздуха в 23 градуса.
Однако независимые эксперты, например, из Hardwaresecrets, тестирующие блоки питания при повышенных температурах воздуха в 45–50 градусов, приходят к выводу, что в таких жестких условиях многие блоки питания по экономичности не дотягивают до сертификата 80 PLUS.
Как ставить БП с постоянно работающим вентилятором
Если у вас корпус старого форм-фактора, где блок питания расположен сверху, то выбора у вас нет. Блок питания будет принимать активное участие в охлаждении компьютера, вытягивая нагретый воздух.
Для офисных компьютеров с маломощными компонентами это не критично. Но если у вас мощный игровой ПК, то желательно сменить корпус на такой, где блок питания будет внизу или, по крайней мере, улучшить охлаждение в корпусе, поставив высокооборотный вентилятор на выдув.
Если у вас корпус с нижним расположением блока питания и есть выбор, как его установить — возникает дилемма. Когда вы ставите блок питания вентилятором вверх, немного улучшается охлаждение в корпусе компьютера, а при наличии пылевых фильтров в корпусе уменьшается запыление блока питания. Но при этом увеличивается температура БП, особенно, если есть «горячая» видеокарта. Увеличится и его шум, если блок оснащен контролем температуры. А стандартная ситуация — падение болтика, крепящего видеокарту, вниз, превращается в большую проблему.
Большинство экспертов и опытных пользователей сходится во мнении, что обычный блок питания лучше поставить вентилятором вниз.
Как ставить БП с пассивной системой охлаждения
Это уже более сложный вопрос, но зачастую производитель указывает на самом блоке питания вариант установки. Обычно он ставится радиатором кверху, давая возможность нагретому воздуху беспрепятственно подниматься.
Например, у Seasonic SS-460FL (X-460 Fanless) даже есть наклейка, строго предупреждающая только об одном способе установки. Поэтому, приобретая блок питания с пассивной системой охлаждения, заранее скачайте его техническое описание и сверьтесь, подойдет ли ваш корпус для него.
Как ставить БП с полупассивной системой охлаждения
А вот это самый сложный вопрос, не имеющий однозначного решения. Дело в том, что у каждой модели такого блока питания есть свой алгоритм включения и выключения вентилятора в зависимости от нагрузки и/или температуры. Нужно учесть, какая нагрузка и как долго будет подаваться на блок питания. Если он большую часть времени будет слабо нагружен и вентилятор не будет вращаться, то лучше ставить его вентилятором кверху для свободной конвекции нагретого воздуха.
Представим ситуацию: довольно мощный блок питания с полупассивной системой охлаждения и мощностью 850 ватт — Corsair RM850i — используется в двух компьютерах с разными сценариями работы.
Один — для работы с тяжелой нагрузкой, типа видеокодирования или вычислений на многоядерном процессоре и мощной видеокарте, а иногда для веб-серфинга и простых игр. Второй — в основном для вэб-серфинга и просмотра фильмов и не больше пары часов в день для игр с серьезной нагрузкой.
По данным производителя, Corsair RM850i должен охлаждаться пассивно, еслииспользует до 40 % мощности (350 ватт) при температуре 25 градусов.
Но в обзорах пишут, что старт вентилятора происходит при большей нагрузке.
Очевидно, что первый вариант использования ПК потребует почти постоянно активного охлаждения и Corsair RM850i лучше поставить вентилятором вниз. А при втором сценарии использования, большую часть времени он будет работать в пассивном режиме и его лучше установить вентилятором вверх.
Если же вы сомневаетесь в том, какие типы нагрузки будут постоянны для вашего блока питания и смогут ли они задействовать активный режим, то стоит поставить его вентилятором вверх. Этот режим более универсален и безопасен в случае с полупассивной системой охлаждения.
Нюансы установки БП в корпусах с кожухами над ним
Все чаще встречаются корпуса с декоративными кожухами над блоком питания, например Deepcool MATREXX 55.
Очевидно, что в случае установки блока питания с пассивной/полупассивной системой охлаждения вентилятором к верху, конвекция горячего воздуха будет крайне затруднена — случится перегрев БП. Даже если на кожухе есть перфорация, она все равно будет препятствием, ухудшающим охлаждение. Если у вас такой корпус, снимите кожух или установите БП вентилятором вниз.
Установка в корпусах уникального или редкого дизайна
На рынке присутствует множество корпусов редкого дизайна, например, кубические, тонкие slim-корпуса, модели, где блок питания стоит спереди или боком и т.д. По таким корпусам можно дать совет — более тщательно выбирать блок питания. Учитывайте как будут вести себя потоки воздуха при вентиляции такого корпуса.
Корпус Lian Li PC-Q37WX
Блоки питания со сверхнизкими оборотами системы охлаждения
Избавить вас от многих проблем сможет блок питания, вентилятор которого вращается при малой нагрузке и малой температуре с очень низкими оборотами, в районе 500 об/мин.
В плане шума такой блок питания практически не уступает моделям с пассивной и полупассивной системой охлаждения, но лишен проблем перегрева.
Например, be quiet! Dark Power Pro 11 500W, вентилятор у которого при малых нагрузках вращается от 500 об/мин и доходит при полной нагрузке всего лишь до 1000 оборотов.
Как видите, установка блока питания в корпус — это довольно непростой вопрос, иногда на который невозможно ответить однозначно. Лучше всего заранее прочитать обзоры на интересующий вас корпус и блок питания, а также спросить у владельцев этих моделей совета на форумах.
Как собрать компьютер самостоятельно из комплектующих | Сборка компьютера, апгрейд | Блог
Если вы решили собрать компьютер из комплектующих самостоятельно, но вас отпугивает сам процесс сборки из-за вероятности допустить ошибку или что-то случайно сломать, то не нужно волноваться, на самом деле это не сложнее конструктора LEGO.
Имея минимальные навыки работы с отверткой, можно все сделать самостоятельно без привлечения специалиста и избежать лишних затрат. Это еще и увлекательный творческий процесс. Статья поможет пройти все этапы, учесть все подводные камни и прочие грабли.
Установка процессора, охлаждения и памяти
Начнем с установки процессора (CPU), так как это требует наибольшей концентрации вашего внимания.
Для правильного расположения CPU на одном из его углов присутствует метка, которую нужно сориентировать по такой же метке на процессорном сокете.
Процессор должен встать в сокет легко, без усилий и перекосов. Если этого не происходит, то вы неверно выбрали положение процессора. Главное, не надавить при этом слишком сильно, иначе есть шанс замять контактные ножки – у платформы Intel на сокете, у AMD непосредственно на CPU. Причем, если на втором ножки чаще всего можно выправить, то в большинстве случаев с Intel это фатально. Поможет только замена сокета в сервисном центре, причем платно, так как это негарантийный случай.
Лучше всего это делать на лежащей горизонтально материнской плате вне корпуса. Осталось только зафиксировать процессор специальным зажимом, и готово.
На процессор устанавливаем систему охлаждения. Вариантов крепления много, чаще это или клипсы, вставляющиеся в отверстия на материнской плате (платформа Intel), или подпружиненные защелки (платформа AMD). А также различные варианты креплений из винтов и гаек. Обязательно изучите иллюстрированную инструкцию к конкретной модели кулера.
Перед установкой убедитесь, что вы сняли защитную пленку с основания кулера, затем нанесите термопасту на крышку процессора. Она так же может быть уже нанесена на само основание радиатора или прилагаться в тюбике или пакетике. Слой должен быть максимально тонким и равномерным.
Чтобы избежать перекоса, плавно затягиваем винты по очереди по схеме крест-накрест.
Некоторые крупногабаритные башенные кулеры могут перекрывать слоты оперативной памяти и винты креплений, поэтому придется монтировать охлаждение после установки материнской платы в корпус и подключения планок памяти. Крепить вентилятор на подобный кулер так же следует после установки модулей оперативной памяти. Не забудьте подключить вентилятор к штекеру CPU_FAN на материнской плате.
Далее в слоты DDR вставляем планки памяти. У контактной группы имеется специальный вырез, который нужно совместить с ключом в слоте, иначе планка не вставится.
Закрепляются планки зажимами с двух сторон, причем в некоторых платах подвижные фиксаторы только с одной стороны — в этом случае вначале вставляем планку памяти в неподвижный фиксатор.
Установка комплектующих в корпус
Снимаем с корпуса боковые стенки и первым делом устанавливаем блок питания. Обычно он расположен снизу корпуса. Ориентируем его вентилятором вниз и прикручиваем на четыре винта с тыльной стороны. Возможна установка БП и вентилятором вверх – такое положение рекомендуется при полупассивном режиме охлаждения, а также, если его RGB-подсветка используется для визуального оформления корпуса. Кабели от БП пропускаем за поддон материнской платы в имеющиеся отверстия.
До установки материнской платы, понадобится вывести из-за поддона и продеть в соответствующее отверстие кабель питания CPU, и только потом уже прикрутить плату.
Далее прикручиваем материнскую плату. Не забудьте на интерфейсную панель установить комплектную заглушку – она защелкивается в вырезе на тыльной панели корпуса. Главное, сориентировать ее правильно в зависимости от разъемов.
На поддоне обычно уже вкручены стойки под материнскую плату. Их количество и положение можно изменить в зависимости от форм-фактора материнской платы.
Затем разберемся с основным 24-пиновым шлейфом питания материнской платы. Ориентироваться нужно на то, с какой стороны находится защелка на колодке и разъеме. Вставляем с усилием, до щелчка.
Если корпус тесный, то на этом этапе уже можно подключить к материнской плате провода, идущие от интерфейсной панели корпуса. Определиться с разъемами вам поможет руководство пользователя из комплекта материнской платы и маркировка возле контактов.
Установка накопителей и плат расширения
Накопители обычно фиксируются в отсеки винтами или предварительно устанавливаются в съемные корзины. Ориентированы они могут быть как вертикально, так и горизонтально.
Для жестких дисков желательно использовать антивибрационные прокладки. При их отсутствии в комплектации корпуса, можно их сделать самостоятельно из кусочков резины.
Твердотельные накопители SSD, особенно скоростные, требовательны к охлаждению, поэтому желательно, чтобы корзины с накопителями продувались вентилятором.
Шлейфы SATA подключаем к накопителям в последнюю очередь, после подключения и укладки всех кабелей питания. Существует возможность при неаккуратных действиях отломить контактную площадку.
Как исключение, накопители форм-фактора М.2 устанавливаются в слоты на материнской плате, и сделать это удобнее еще на первом этапе сборки, вне корпуса.
Устанавливаем в разъем PCI-E видеокарту до щелчка. Прикручиваем ее винтами в слотах расширения корпуса. В этом месте корпуса присутствуют заглушки – разовые или съемные. Перед выламыванием разовых примерьте, куда будет вставляться видеокарта, чтобы не удалить лишнюю, иначе в этом месте останется дырка. Расшатывайте заглушку осторожно. Чтобы не повредить элементы на материнской плате, поворачивайте наружу корпуса.
Подключение остальных кабелей питания и их укладка
Подключаем к видеокарте шлейфы PCI-E. Они чаще всего разборные: 6+2 пин. Важно не перепутать шлейфы CPU и PCI-E в случае использования модульного БП. Как правило, разъемы на панели блока питания подписаны, коннекторы промаркированы. Возможно и отличие в цветовом оформлении.
Вместе со шлейфом SATA подключаем питание к накопителям. Коннекторы у них могут быть прямые или угловые. Используйте те или иные в зависимости от ориентирования разъемов на материнской плате и расположения накопителей в корпусе.
При наличии подсветки или реобаса корпуса используем как коннекторы SATA, так и 4-пин коннекторы Molex. Последние часто используются и для корпусных вентиляторов.
После подключения кабелей аккуратно укладываем их за поддоном материнской платы и фиксируем стяжками.
В бюджетных моделях иногда нет возможности протянуть кабели за задней стенкой. В этом случае их придется собрать в пучки и уложить так, чтобы они не препятствовали потокам воздуха. Неиспользованные кабели можно разместить за корзиной для жестких дисков.
Организация охлаждения корпуса
Корпус комплектуется разным количеством вентиляторов. Минимальный набор: один вентилятор на вдув, установленный на лицевой панели, и один на выдув, установленный на тыльной или верхней панели корпуса. Если корпус не оснащен вентиляторами «из коробки», обязательно докупите.
Если вентиляторов нечетное количество, то большее количество ориентируем на вдув, создавая тем самым повышенное давление в корпусе. Если сделать наоборот, то воздух будет засасываться из всех щелей, обходя пылевые фильтры, а его поток будет неоптимален.
Желательно использовать системы регулировки оборотов (реобас), чтобы оптимально настроить скорость вентиляторов для наилучшего сочетания температура/шум. Так же подойдут вентиляторы 4-pin с авторегулировкой — материнская плата самостоятельно будет управлять числом оборотов в зависимости от нагрева комплектующих.
После этого можно установить боковые стенки, подключить питание и периферийные устройства и включить компьютер. Если все сделали верно, и комплектующие исправны, то ваш новый компьютер должен стартовать с одним коротким сигналом спикера. Далее вам предстоит процедура установки операционной системы.
В случае возникновения проблем со сборкой, можно собрать комплектующие вне корпуса, установив только процессор с охлаждением и одну планку оперативной памяти, подключив все к блоку питания. При удачном старте поочередно подключаем накопитель и видеокарту.
Мощный блок питания 0-30 В своими руками : Labuda.blog
Занимаясь проектированием и конструированием различных электронных схем, не обойтись без надежного блока питания с регулируемым напряжением. Сегодня предлагаются различные конструкции, как сложные, так и простые. В рамках статьи рассмотрим, как сделать блок питания от 0 до 30 В на 10 ампер своими руками по пошаговым инструкциям со схемами и фото-примерами процесса сборки.
Варианты БП для самостоятельного монтажа
Блок питание выбирается исходя из того, какие схемы предполагается им запитывать. Если это устройства с низким потреблением тока, то и БП не обязательно делать мощный: вполне можно обойтись источником с током на 5 ампер. Рассмотрим несколько вариантов схем, а также как собирать самодельные блоки питания.
Простой БП 0-30 В
Одна из несложных схем источника питания с регулировкой выходного напряжения приводится на схеме.
Устройство выполнено всего на трех транзисторах и отличается высокой точностью напряжения на выходе благодаря использованию компенсационной стабилизации, а также применением недорогих элементов.
Изделие собирается на печатной плате и после монтажа практически сразу начинает функционировать. Главное, подобрать стабилитрон, который должен соответствовать максимальному напряжению на выходе.
Для корпуса подойдет любой пластиковый или металлический короб, который окажется под рукой, например, от компьютерного БП.
В такой корпус без проблем поместится трансформатор на 100 Вт и печатная плата. Имеющийся вентилятор можно оставить, подключив в разрыв его питания сопротивление для снижения оборотов.
Для измерения потребляемого нагрузкой тока, задействуем стрелочный амперметр, устанавливая его на переднюю панель из пластиковой коробки.
Вольтметр можно использовать цифровой.
Завершив монтаж, проверяем выходное напряжение, изменяя положение переменного резистора.
Минимальное значение должно быть около нуля, максимальное – 30 В. Подсоединив нагрузку около 0,5 А, проверяем просадку напряжения на выходе – она должна быть минимальной.
Мощный импульсный БП
Рассмотрим схему блока питания с регулировкой по току и напряжению. Такие устройства иногда еще называют лабораторными, поскольку они подходят не только для запитки электронных схем, но и для заряди АКБ.
Этот БП обеспечивает регулировку напряжения в диапазоне 0-30 В и тока 0-10 А. Источник можно разделить на три части:
- Внутренняя схема питания, состоящая из источника напряжения на 12 В и ток минимум 300 мА. Назначение этого источника – запитка схемы БП.
- Блок управления. Выполнен на микросхеме TL494 с простым драйвером. Резистор R4 позволяет регулировать максимальный порог напряжения, R2 – ток.
- Силовая часть. Большую часть схемы можно задействовать из старого компьютерного блока питания. Для намотки трансформатора управления подойдет ферритовое кольцо R16*10*4,5, на котором наматывают провод МГТФ 0.07 мм² в количестве 30 витков одновременно в 3 провода. L1 мотают на кольце от того же БП, удалив старую обмотку и намотав медный провод диаметром 2 мм и длиной 2 м. Для L2 подойдет дроссель на ферритовом стержне.
Для размещения элементом схемы изготавливают печатную плату.
Если сборка выполнена правильно, блок питания начинает работать сразу. Чтобы была возможность управлять вентилятором по температуре, можно собрать простую схему на lm317.
На Ардуино
Радиолюбители с опытом иногда собирают блоки питания под управлением Ардуино. Таким образом удается создать контролируемый источник питания с такими режимами: может «отдыхать», функционировать в режиме экономии либо работать на ток в 10 А и разное выходное напряжение, если это требуется.
«Умный» блок питания представлен на схеме.
Для запитки микропроцессора ATmega задействуется импульсный стабилизатор. Благодаря наличию постоянного и стабилизированного напряжения 5 В блок питания можно оснастить разъемом USB, что позволит подзаряжать какие-либо устройства.
Печатную плату можно сделать по образцу.
Внешний вид устройства и внутреннее расположение компонентов представлено на фото.
Блок питания от 0 до 30 В на 10 ампер можно собрать своими руками по любой из представленных схем, а как именно сделать такое устройство, пошагово рассмотрено в инструкциях с фото-примерами. Для сборки простого источника питания потребуются начальные значения в области радиоэлектроники, умение обращаться с паяльником и минимальный перечень радиокомпонентов.
Автор: Vladimir
Моя версия сборки БП с DC-DC преобразователем RD6006W
Сегодня поделюсь фото отчетом о своей версии сборки регулируемого блока питания на основе DC-DC модуля RD6006 и импульсного БП SMUN S-400-60.Модуль преобразователя напряжения RD6006 от Rui Deng уже хорошо многим знаком. Вот тут есть подробный обзор от kirich, не буду повторяться.
Напомню его внешний вид:

У меня версия RD6006W с модулем WiFi. Я его тоже на выходе в продажу купил, он у меня лежал пылился, я обходился своим БП wanptek 30 В 10 А, но как только потребовалось напряжение выше 30 В — начал собирать себе новый БП.
Для сборки регулируемого блока питания с модулем RD6006 много заморочек не нужно, необходим корпус и первичный блок питания.

Но у меня остался пластиковый корпус Kh36 275×230х100 мм от прошлых проектов, я не люблю что бы вещи болтались без дела, он и пойдет в ход.
Только ему нужны новые панели (передняя и задняя):

Я традиционно изготовил их на станке ЧПУ из полированной нержавеющей стали.
Теперь переходим к первичному БП SMUN S-400-60. БП такого типа рекомендован на странице товара Rui Deng.
Я покупал на ebay, но смотрю, сейчас есть варианты дешевле на aliexpress.com (в районе $25).

Характеристики:
Импульсный блок питания (AC/DC) в корпусе.
Входное напряжение 85~132/170~264 В (AC),
Выходное напряжение 60 В (DC) (регулировка ± 10%),
Максимальный ток нагрузки 6,6 А (400 Вт).
Габаритные размеры: 215 х 115 х 50 мм
Защиты: от перегрузки по току (120-170%) превышения напряжения(120-150%)
Инструкция в комплекте:
Есть версии на другие напряжения: 12V — 33A, 15V- 27A, 24V-17A, и моя 60V — 6.6A.
Внешний вид блока:
Выполнен в алюминиевом корпусе с активным охлаждением. Такие БП делают многие китайские производители, в том числе известный meanwell.
Размеры корпуса:
С боков:
есть 4 отв М4 для монтажа и переключатель 110/220 В входного напряжения.
Торцы:
Клемм под защитной крышкой всего 9: по три на плюс 60 В, три на минус и три на входное напряжение (ноль, фаза и заземление).
Там же индикатор работы — зеленый светодиод и переменный резистор для регулировки напряжения.
Напряжение по умолчанию на холостом ходу:
Но есть регулировка в пределах 52-66 В.
На холостом ходу встроенный вентилятор почти не заметно, но под нагрузкой он работает на полные обороты и его хорошо слышно.
Максимальный ток (на минимуме напряжения):
Заявленные пульсации 240mVp-p, точно померить не могу, мелкий осциллограф до 40 В, а АКИП 4115/2А на работе, на которую не ходим.
Посмотрим что внутри:
стенки толщиной 1,5 мм.
Основная плата:
Из замеченного:
Емкости на выходе 3 шт. 470 мкФ 100 В, на входе — 680 мкФ на 200 В
Микросхема ШИМ TL494L
Операционный усилитель двухканальный LM358P
Транзисторы 2SC3320
Диоды MUR4530DCT
Собираем все вместе в корпусе:
БП будет работать без верхней крышки и его вентилятор (60х60) будет выдувать горячий воздух из корпуса.
Использовал внешнюю термопару модуля RD6006 для контроля температуры внутри корпуса.
Для притока воздуха просверлил отверстия в дне корпуса:
Собранное изделие:
Металлическую кнопку использовал с фиксацией и подсветкой от 220 В примерно как тут.
Как ни странно, все заработало:
Максимальное доступное напряжение:
Осталось:
- Купить батарейку 1220 для часов
- Спаять кабель с зажимами
- И разобраться с управлением этим
космическим кораблеммодулем RD6006
Спасибо за просмотр. Удачных конструкций!
Онлайн-калькуляторы для определения мощности ПК — теория и практика | Блоки питания компьютера | Блог
Узнать мощность своего компьютера можно по-разному: вооружиться мультиметром и тестировать вручную или зайти на онлайн-калькулятор и посчитать все за 5 минут. Последние выдают результаты автоматически — вбиваешь свои данные и готово. А мы в этом материале проверяем онлайн-калькуляторы на честность. Какие из них выдают более точные данные, какими проще и удобнее пользоваться? И стоит ли вообще доверять готовым алгоритмам или лучше все перепроверить самому?
Тестируем реальную мощность ПК
Перед проверкой калькуляторов сначала нужно определить реальную мощность ПК. Тестируем пару персональных компьютеров двумя способами:
- Амперметром ACM91 измеряется ток по выходным линиям блока питания. Далее рассчитывается, затем суммируется мощность.
- По входу блока питания (220 В) измеряется мощность. В этом случае делается поправка на КПД блока питания и используется как справочное значение.
ПК нагружались тестом стабильности от AIDA, видеокарта — дополнительно стресс-тестом от FurMark. Все компоненты ПК работали в штатном режиме, без разгонов. Для видеокарты была установлена максимальная производительность из предложенных производителем Profiles.
Конфигурации ПК1 и ПК2
Комплектующие |
ПК 1 |
ПК 2 |
Материнская плата | Asus Prime B360-Plus (ATX) | Asus H81M-K (Micro-ATX) |
Центральный процессор | I5-8400 (TDP 65 Вт) | I5-4460 (TDP 84 Вт) |
Видеокарта | GTX-1650 Super (100 Вт) | Нет |
Устройства хранения информации |
SSD A-Data SX6000 Pro, 256 ГБ, М.2 2280 |
SSD Samsung 860 EVO, 250 ГБ, SATA |
Оперативная память (RAM) | DDR4 2 модуля по 8 ГБ | DDR3 2 модуля по 4 ГБ |
Дополнительные вентиляторы | 2 корпусных | Нет |
Блок питания | ZALMAN ZM400-LE 400 Вт | DeepCool DE-530 400 Вт |
Прочие устройства | Нет | Нет |
Измеренная потребляемая мощность ПК
Условия измерений |
ПК1 |
ПК2 |
U12CPU —линия питания процессора; |
66 Вт (I5-8400, TDP 65 Вт) |
60 Вт (I5-4460, TDP 84 Вт) |
U12GPU — линия питания видеокарты; |
53 Вт |
— |
U12MB — линия питания материнской платы; |
60 Вт |
12 Вт |
U5 — линия 5 В; |
7,5 Вт |
1,8 Вт |
U3.3 — линия 3.3 В; |
2,5 Вт |
2,5 Вт |
U5STB — линия дежурного источника питания. |
1,5 Вт |
1,5 Вт |
Суммарная на выходе БП по линиям питания |
191 Вт |
78 Вт |
По входу БП (220 В) |
225 Вт (КПД БП ~86%) |
98 Вт (КПД БП ~80%) |
Тесты онлайн-калькуляторов мощности
Калькулятор от Bequiet
https://www.bequiet.com/ru/psucalculator
Онлайн калькулятор от известного производителя солидных блоков питания Bequiet.
Разработчики калькулятора не стали мудрить и предусмотрели в калькуляторе расчет только по четырем основным компонентам: процессор, видеокарта, система и охлаждение.
Мощность потребления процессора определяется по его TDP.
Мощность видеокарты в соответствии с характеристиками от производителя. Список моделей внушительный, но нужной GTX 1650 Super в списке нет. Выбрал GTX 1660, которая потребляет на 20 Вт больше.
В разделе «Система» можно указать количество модулей памяти, устройств SATA и даже устройств PATA. Каждый модуль памяти добавляет 4 Вт к рассчитываемой мощности, каждое устройство SATA или PATA — по 15 Вт. В качестве устройства SATA я укажу свой SSD М.2, так как в калькуляторе отсутствует отдельное поле для указания таких устройств.
В разделе «Охлаждение» можно указать дополнительные вентиляторы в системе и (или) систему водяного охлаждения. Каждый вентилятор добавляет 5 Вт.
В калькуляторе предусмотрены еще две установки — «Использование USB 3.1 Gen 2 для передачи энергии» и «Планируете ли вы разгонять компьютер или использовать разогнанные компоненты».
Спецификация USB 3.1 Gen 2 в теории подразумевает возможность передачи до 100 Вт мощности. И действительно, если установить здесь галочку, то рассчитанная потребляемая мощность компьютера увеличится на 100 Вт.
Если установить галочку в разделе «Планируете ли вы разгонять компьютер», то калькулятор добавит 15 % к данным.
Результаты
Конфигурация ПК |
Рассчитанная мощность калькулятором Bequiet |
Измеренная потребляемая мощность ПК |
ПК1 |
198 Вт * |
191 Вт |
ПК2 |
107 Вт |
78 Вт |
*за вычетом 20 Вт на реально установленную GTX 1650 Super
Калькулятор от Сoolermaster
https://www.coolermaster.com/power-supply-calculator
Потребляемая мощность процессора определяется калькулятором по его TDP.
Материнская плата указывается через форм-фактор. По этому параметру добавляется определенная мощность (ATX — 70 Вт, Micro-ATX — 60 Вт).
Видеокарт в списке мало. Я не обнаружил ни GTX1650 Super, ни GTX1660. Выбрал близкую по мощности GTX1650 (85 Вт).
Память выбирается по типу и объему. Например, одна плашка DDR4 объемом 8 ГБ добавляет 3 Вт.
Есть возможность добавить SSD по его объему. Выбор SSD на 250 ГБ добавляет 40 Вт, что явно многовато.
HDD указывается по скорости вращения шпинделя и форм-фактору. При этом HDD с 7200RPM и 3.5″ добавляет 15 Вт, что в среднем не далеко от реальности.
Результаты
Конфигурация ПК |
Рассчитанная мощность калькулятором Сoolermaster |
Измеренная потребляемая мощность ПК |
ПК1 |
281 Вт* |
191 Вт |
ПК2 |
188 Вт |
78 Вт |
*с добавлением 15 Вт на реально установленную GTX 1650 Super
Калькулятор от Outervision
https://outervision.com/power-supply-calculator
В калькуляторе есть возможность выбора платформы, разработчики этот раздел почему-то назвали Motherboard. По умолчанию выбран Desktop, который сразу в расчет добавляет 110 Вт мощности. Эта мощность и будет являться резервом для всех неучтенных потребителей или режимов работы.
Мощность процессора, как и везде, определяется по его TDP.
Одна из особенностей калькулятора — учет параметров разгона процессора (частота и напряжение питания ядер) и видеокарты.
Память выбирается по типу и объему. Кстати, для памяти частоту разгона указать не получится, что выглядит немного не логично.
Предусмотрен выбор всевозможных устройств хранения, даже дисков с интерфейсом IDE. Есть и SSD M.2, который добавил аж 1 Вт мощности. Обширный список устройств с интерфейсом PCI и PCIe и большой выбор прочих устройств, от USB до светодиодной ленты.
В итоге получаем расчетную максимальную потребляемую мощность системы, рекомендуемую минимальную мощность блока питания (Recommended PSU Wattage) и рекомендуемую мощность источника бесперебойного питания — ИБП (Recommended UPS rating).
Результаты
Конфигурация ПК |
Рассчитанная мощность калькулятором Outervision |
Измеренная потребляемая мощность ПК |
ПК1 |
308 (358) Вт* |
191 Вт |
ПК2 |
222 (272) Вт |
78 Вт |
*за вычетом 20 Вт на реально установленную GTX 1650 Super
в скобках указана рекомендуемая минимальная мощность БП
Считать или не считать — выводы и результаты
Подведем итог. Сведем все результаты в одну таблицу.
Конфигурация ПК |
Измеренная мощность ПК |
Калькулятор Bequiet |
Калькулятор Сoolermaster |
Калькулятор Outervision |
ПК1 |
191 Вт | 198 Вт | 281 Вт | 308 (358) Вт |
ПК2 |
78 Вт | 107 Вт | 188 Вт | 222 (272) Вт |
Наиболее близкую к реальности мощность показывает калькулятор от Bequiet. Его разработчики рекомендуют использовать БП в режиме нагрузки от 50 до 80 %. Я бы остановился на рекомендации в 50 % — будет некий запас на комплектующие и те режимы работы, которые не учитывает калькулятор, плюс получим выигрыш в тишине. Тогда для рассматриваемой конфигурации ПК1 будет оптимальным использование БП мощностью 400 Вт. Может показаться, что этого маловато, но надо понимать, что калькулятор предполагает использование блоков питания от Bequiet.
Калькулятор Bequiet прост в использовании, но не учитывает множество устройств, которые могут быть установлены, а их потребление в сумме может быть очень даже весомым.
В калькуляторе от CoolerMaster добавлена возможность указывать типоразмер материнской платы. Это добавляет определенный резерв мощности, который может пригодиться для не учтенных комплектующих. Во всем остальном он схож с Bequiet и к нему можно применять те же рекомендации по выбору БП.
Калькулятор от CoolerMaster резервирует фиксированную мощность для неучтенных комплектующих и режимов работы.
Если в ПК присутствует много дополнительных устройств, то лучше все-таки использовать калькулятор от Outervision.
А вот калькулятор Outervision выдает сразу рекомендуемую мощность БП. Для рассматриваемой конфигурации ПК1 калькулятор рекомендует БП мощностью 358 Вт. Округляем в большую сторону до ближайшей сотни — получаем 400 Вт.
При расчете можно учесть время использования компьютера за сутки. При этом калькулятор добавляет 5 % к рекомендуемой минимальной мощности блока питания, если ПК будет использоваться в режиме 24/7 против одного часа. Таким образом определяется некий запас надежности БП при круглосуточной работе ПК.
Калькулятор показывает предполагаемый ток по основным линиям БП, предлагает рассчитать экономию электроэнергии и финансовую выгоду при использовании БП с более продвинутыми сертификатами эффективности. Правда, применительно это только к БП от EVGA.
Калькулятор Outervision рассчитывает мощность источника бесперебойного питания (ИБП). Не забудьте указать диагональ используемого монитора.
Все калькуляторы грешат отсутствием некоторых моделей комплектующих. Наверное обычный пользователь не станет искать схожие по характеристикам модели, анализировать и сравнивать. Если возникнет такая проблема, то скорее всего он просто откажется от калькулятора и пойдет по форумам с вопросом какой БП выбрать.
Для таких юзеров есть и другие способы определения мощности БП. Например, можно ориентироваться на рекомендации производителей видеокарт. В частности, для GTX-1650 Super рекомендуется мощность БП 450 Вт, что в общем, соответствует значениям, которые получены при помощи калькуляторов с учетом рекомендаций.
Если же в ПК не используется отдельная видеокарта, то можно смело использовать современный блок питания с минимальной мощностью 300–400 Вт. Этого будет более чем достаточно для стандартной конфигурации настольного ПК.
Итог
Принимая во внимание поправки к программам, всеми перечисленными калькуляторами можно уверенно пользоваться. Результаты получаются вполне достоверными, а рекомендации по блокам питания — жизнеспособными. Для продвинутых пользователей больше подходит Outervision благодаря куче дополнительных опций и расширенным советам. Для владельцев ПК с минимальной конфигурацией можно использовать калькуляторы от Bequiet или Сoolermaster, хотя бы просто чтобы не запутаться. В любом случае онлайн-калькуляторы являются отличным инструментом для оценки потребляемой мощности вашего ПК и помогут в выборе блока питания или ИБП.
Как выбрать блок питания для компьютера можно почитать по ссылке.
Бюджетный апгрейд старого компьютера: с чего начать | Сборка компьютера, апгрейд | Блог
Модульная структура ПК позволяет как гибко подбирать комплектующие, так и обновлять их по мере необходимости. Разбираемся, с чего начать апгрейд своего пенсионного компьютера, если вы не готовы ради этого сразу выкладывать пару месячных зарплат, продавать машину или влезать в кредит.
Понятие «старый компьютер» — весьма условное, ведь конфигураций системников очень много. Поэтому выберем для примера пару ходовых «конфигов» 7-8 летней давности. Например, типичные системники тех времен: i3 второго/третьего поколения, или FX 4000 серии из стана AMD, 4 ГБ оперативной памяти стандарта DDR3, HDD в качестве системного диска, отсутствие портов M.2, а иногда даже SATA3 и USB 3.0.
Попробуем рассмотреть, а как же все-таки пытаться обновить свой ПК, когда бюджет ограничен.
Сразу оговоримся: если вы хотите играть в самые современные и требовательные игры, причем на максималках, то ни о каком бюджетном апгрейде здесь не может быть и речи. Покупка комплектующих такого уровня всегда была делом затратным, а при сегодняшнем курсе — и подавно.
А вот недорого собрать компьютер для стандартных задач современного человека (интернет, мультимедиа, нетребовательные игры) дело вполне осуществимое.
Процессор, материнская плата
Обновление мультимедийного/офисного/игрового компьютера (последний не всегда, но об этом позже) на современные комплектующие, лучше начать с покупки сета из процессора, материнской платы и оперативной памяти. Почему придется покупать все три компонента разом? Совместимость. Старые материнские платы несовместимы с новым поколением процессоров, оперативной памяти. Старая оперативка не подойдет к вашей новой плате, и так далее. Можно приобретать не сразу, а, к примеру, каждый месяц по одному комплектующему, хотя это не всегда удобно ввиду растянутости по времени и банального отсутствия возможности проверить работоспособность уже купленного.
Уже на старте мы получим хороший плацдарм для дальнейшего апгрейда, если он вам понадобится, ускорение в повседневных задачах (особенно, если ранее у вас было мало оперативной памяти), поддержку современных интерфейсов/портов M.2, SATA3, USB3.0 и технологий.
Для недорогого ПК без тяжелых нагрузок хватит современного двух- или четырехъядерного, четырех поточного CPU. Для современной игровой конфигурации лучше присмотреться к моделям, предлагающим от шести ядер и двенадцати потоков.
При бюджетном апгрейде зачастую пользователи поступают следующим образом: берут недорогой процессор в начале, а через некоторое время заменяют его на более мощный/нужный/подходящий. Такой вариант позволяет выиграть время для сбора средств на нужный ЦП, однако практически всегда связан с тем, что «старый» процессор нужно будет куда-то деть. И, конечно, практически всегда это перепродажа, на которой вы потеряете ту или иную часть его первоначальной стоимости. Так что это вариант далеко не идеальный, но иногда вполне рабочий.
Оперативная память
Современные реалии таковы, что много памяти не бывает, а мало — вполне. Покупка модуля объемом 4 ГБ практически лишена смысла даже с учетом дальнейшей покупки еще одного модуля. Во-первых, две 4 ГБ плашки выйдут дороже одной (в большинстве случаев). Также на недорогих материнских платах с двумя слотами под RAM это будет пределом наращивания объема. Более разумным вариантом будет покупка одного, но более объемного модуля, с возможной последующей докупкой второго. Например, 8 ГБ.
Для простой работы, интернет-серфинга и мультимедиа 8 ГБ — достаточный объем. Двухканальный режим, если ставить 2*4 ГБ, заметного улучшения здесь не принесет. Но также, мы имеем возможность увеличить объем до 16 ГБ, если наступит такая необходимость. Учитывая крайнее нежелание Windows 10 очищать память, раздувая Shared memory при длительной работе, она может наступить быстрее, чем кажется. А для игр, 2*8 ГБ — это стандарт де-факто.
Больший объем может иметь место в сборке, если подразумеваются какие-либо профзадачи – 3D-моделирование, CAD-системы, видео- аудиомонтаж и т.д. Но тогда говорить о каком-то бюджетном апгрейде вряд ли уместно.
Видеокарта
Если ваша цель — играть в современные игры, то вам, как воздух, необходима замена видеокарты на современный игровой вариант. Игры — довольно комплексное программное обеспечение, и они зависят от разных комплектующих (процессор, объем оперативной памяти, скорость системного накопителя), но в большей степени, все же, от видеокарты.
Для конфигураций не предполагающих требовательных игр, вполне может быть достаточно мощности интегрированных решений, которыми оснащается большая часть современных процессоров.
Тут стоит сделать оговорку. Если вы хотите играть в современные игры, и ваша конфигурация мощнее, чем наш первоначальный «эталон древности», то вы можете начать свой апгрейд именно с установки новой, более производительной видеокарты. Например, если у вас уже на старте, к примеру, процессор уровня i5-2xxx, FX-8xxx и выше, а объем оперативной памяти от 8 ГБ. Такое усовершенствование будет вполне оправдано на ближайшие год-два. Однако, на этом потенциал усовершенствования будет закончен. Вы можете попробовать найти на вторичном рынке более мощный процессор (если у вас не самый топ), поддерживаемый вашей платой, или увеличить объем оперативной памяти, но в перспективе это путь в никуда.
Накопители
Немаловажный компонент — системный диск. Твердотельные накопители настолько прочно вошли с обиход, что достаточно трудно представить современный компьютер, или ноутбук без SSD.
Установка SSD в качестве системного диска на смену HDD принесет с собой прирост производительности в самых повседневных задачах — загрузка операционной системы, запуск программ, копирование файлов. За компьютером будет банально приятнее работать, чем раньше.
Актуальный объем твердотельного накопителя под систему, с учетом размера программ, ОС на данный момент и резервом свободного места, начинается от 240 ГБ. Более — уже исходя из потребностей и цены.
Жесткий диск, если он исправен, выбрасывать все же не стоит. Он отлично подойдет для хранения ваших фотографий, фильмов и музыки. Впрочем, о применении и выборе SSD и HDD у нас есть отдельный подробный материал.
Охлаждение
При покупке процессора у вас есть два варианта: вы берете версию BOX с комплектным кулером (осторожно, не все процессоры в BOX версии им оснащаются), либо вы берете версию OEM без системы охлаждения, и докупаете ее отдельно с учетом ваших потребностей. Ну или используете ваш старый кулер, если он подходит по креплению и эффективности.
Какую версию выбрать? Решать вам, определим лишь несколько моментов: OEM обычно дешевле, однако величина этой разницы может сильно варьироваться вплоть до около нулевой. Также она ограничена в сроке гарантии до одного года против трех у BOX. Поэтому даже если у вас есть хороший кулер от старой системы, и он совместим с новым процессорным сокетом, лучше присмотреться к боксовой версии.
С другой стороны, комплектный кулер обеспечит нормальную работоспособность процессора. Да, возможно за счет более высоких температур или более высокого шума при работе, но ваша сборка будет работоспособной. А если у вас появятся лишние деньги на систему охлаждения, то вы всегда сможете ее заменить.
Блок питания
Вместе с заменой предыдущих комплектующих у вас может возникнуть потребность в замене блока питания, ведь новые компоненты могу запросто потреблять больше энергии, чем выдает ваш старый блок.
К выбору БП нужно подходить достаточно серьезно. Многие пользователи преуменьшают роль блока питания (на скорость не влияет же), и берут его «на сдачу» от остального железа. А это в корне неправильный подход.
От блока питания будет зависеть стабильная работа всего компьютера, а для корректного подбора по мощности существуют различные калькуляторы, которые помогут подсчитать потребление будущей сборки. Подробно посчитать нужную мощность БП поможет этот подробный гайд по калькуляторам.
В любом случае, брать блок питания, который будет лишь с минимальным запасом покрывать мощность ваших комплектующих, не рекомендуется. Во-первых, в таких режимах уменьшаются КПД блока и температура его компонентов. Во-вторых, следует помнить о естественном износе компонентов с течением времени. По мере износа выходная мощность блока будет уменьшаться, и отсутствие запаса ни к чему хорошему не приведет.
Корпус
И, наконец, корпус. Замена корпуса не видится первоочередной задачей при обновлении, если все компоненты можно разместить в имеющемся. Для бюджетных ПК проблема перегрева особо острой не является в отличие от игровых компьютеров с мощными комплектующими, выделяющими достаточно тепла. Но в качестве временной меры для уменьшения температуры компонентов можно просто снять боковые стенки корпуса. Как говорится, дешево и сердито.
Впрочем, за небольшую сумму вполне можно разжиться неплохим корпусом с хорошей вентиляцией или даже модной RGB–подсветкой.
Шпаргалка
Итак, резюмируем самые основные пункты в сценарии поэтапного апгрейда ПК:
- Замена процессора, материнской платы и оперативной памяти — первый и большой шаг в апгрейде.
- Покупайте модули памяти объемом не менее 8 ГБ.
- SSD под систему — быстрей и удобней работа.
- Выбирая между BOX и OEM процессором, присмотритесь к первому.
- Не покупайте блок питания «на сдачу».
- Для офисной сборки вероятнее всего корпус менять не потребуется.
- Чтобы поиграть, иногда достаточно замены лишь видеокарты.
- Топовые игры на максималках — это не про бюджетный апгрейд.
Напомним, что данный материал очерчивает только общий путь в поэтапном обновлении вашего системного блока. Нюансов, в данной теме, огромное количество, и если вы сомневаетесь в своих силах в выборе комплектующих, то вы всегда можете воспользоваться материалами о сборке в определенную стоимость или задать свой вопрос на нашем сайте, в разделе «Коммуникатор».
Типичные ошибки при сборке компьютера | Сборка компьютера, апгрейд | Блог
В компьютерных магазинах большой выбор готовых системных блоков, но не всегда из наличия можно выбрать ПК под конкретные задачи. В таком случае лучше собрать «системник» из отдельных комплектующих. Выбрать можно все — от модели процессора до цвета и размера корпуса.
И вот, сборка завершена, кабель питания подключен, а при нажатии на заветную кнопку Power все идет не по плану. Это значит, что где-то допущены ошибки. Какие-то некритичны, другие же фатальны и приводят к печальным последствиям если не при первом старте, то позже, в процессе эксплуатации. Ошибаются не только новички (они-то как раз стараются не спешить и делать все по инструкции), но и опытные сборщики, которые уверены в своих силах.
Процессор
Сборка системного блока начинается с установки процессора в материнскую плату. Казалось бы, производители делают все, чтобы сборщик не ошибся и установил CPU правильно. Для этого в сокете есть так называемые «ключи», чтобы как в пазле детали встали точно в нужное место правильной стороной. У процессоров Intel — это выемки в текстолите с двух сторон, у AMD — расположение ножек: на одном из углов процессора есть золотой уголок, ножки там расположены в другой конфигурации.
Что может пойти не так? Если не спешить и аккуратно ставить процессор на свое место — все будет хорошо. Есть случаи, когда неопытные сборщики устанавливают процессор Intel не той стороной, зажимают рамкой сокета и в итоге слышат смертельный хруст.
У процессоров AMD при неправильной установке загнет ножки, так что долгие «развлечения» с пинцетом, лезвием, а может и паяльником гарантированы. Впрочем, даже правильная ориентация не всегда залог успеха. Ножки довольно коварны, и, даже если одна из них немного загнута, процессор не встанет на свое место, а попытка применить силу только усугубит ситуацию. Поэтому следует внимательно осматривать ножки перед установкой процессора в сокет, особенно если это OEM-поставка.
Системы охлаждения
Перед установкой процессорной системы охлаждения обязательно нужно прочитать инструкцию. Особенно, если это универсальный кулер для нескольких сокетов: после установки останутся лишние детали, поэтому сложно понять, все ли собрано правильно. Можно, к примеру, забыть поставить «бекплейт» и перетянуть винты, тем самым повредив материнскую плату.
Типичные ошибки:
1. Не нанесли термопасту. Термоинтерфейс между подошвой кулера и процессором необходим для лучшей передачи тепла системе охлаждения. Если забыть об этой процедуре, компьютер запустится, но при нагрузке температура резко уйдет вверх, и системы защиты выключат ПК. Но не переборщите с термопастой. На «боксовых» кулерах Intel она сразу нанесена, и отдельно ничего мазать не нужно. Избыток термопасты при снятии процессора может попасть на ножки или сокет, что может привести к замыканию.
2. Забыли снять защитную пленку. Классический «прикол» (или «прокол») от сборщика в виде защитной пленки на подошве кулера. Тут комментарии не требуются.
3. Неправильно подключенный или вовсе неподключенный разъем питания вентилятора. Если подключить разъем не в CPU_fan, а в CASE_fan, то ничего страшного не произойдет, только вы не сможете задействовать умные режимы управления скоростью в зависимости от температуры процессора. Можно ошибиться, и воткнуть 3-рin-разъем вентилятора в 4-pin. Да, там есть ключ, но мимо него промахнуться очень легко. Соответственно, крутиться вентилятор не будет.
4. Неправильная ориентация кулера. Менее критичная, но все же ошибка. Как известно, в стандартных корпусах движение воздуха организовано от нижней части передней панели к верхней части задней. Соответственно, вентилятор на башенном кулере должен находиться спереди или снизу, чтобы прогонять воздух через себя вдоль движения воздушных потоков.
Это же относится и к корпусным вентиляторам. Если вы устанавливаете их самостоятельно, обратите внимание на направление перекачиваемого воздуха (обычно на корпусе есть стрелки вращения и направления). Передний вентилятор — на вдув, задний — на выдув.
5. Массивный процессорный кулер в тесном корпусе закрывает винты, которые крепят материнскую плату к стойкам корпуса. Опытный сборщик сразу увидит возможную проблему и установит сначала материнскую плату в корпус, а лишь потом кулер. Аналогично и с ОЗУ: крупный процессорный охладитель может закрыть слоты для установки оперативной памяти и придется снова откручивать кулер, чтобы воткнуть ее на место.
Оперативная память
На контактной площадке оперативной памяти есть прорезь, а на слотах материнской платы — соответствующие выступы, которые отличаются в зависимости от типа ОЗУ. Сделаны эти ключи, чтобы сборщик мог правильно вставить память в разъем. В интернете полно историй о том, как кто-то все равно вставил ее не той стороной, установил память одного поколения в слот для другого поколения или вообще вверх контактами.
Самая простая ошибка, которую очень легко исправить — установка планки не в тот слот.
Сам столкнулся с этим недавно — не стартовал компьютер на базе материнской платы c чипсетом h410. Дело в том, что единственная планка была вставлена в ближний к процессору слот, а это слот номер 4. Помогла установка в дальний слот под номером 1.
Не стоит забывать и о двухканальном режиме, если есть его поддержка и вы собираете компьютер с одинаковыми планками. Для активации этого режима нужно ставить ОЗУ в соответствующие разъемы, это могут быть как два соседних, так и через слот. Для этого стоит обратить внимание на цветовую маркировку, а лучше заглянуть в инструкцию, чтобы установить все безошибочно.
Материнская плата
Ошибки могут поджидать на этапе установки материнской платы в корпус. На многих современных корпусах стойки, к которым прикручивается плата, не вкручены в поддон, а находятся в комплектном пакетике. Необходимо посмотреть, сколько стоечек нужно для конкретной сборки, проверить по материнской плате, и вкрутить их в нужные места.
В бюджетных корпусах для экономии времени сборщика офисных системных блоков стойки могут быть вкручены. Казалось бы, труд сборщика большой партии будет легче, но не все так просто — опасность таится в нижней стойке, которая ближе к передней части. Даже в рамках micro-ATX-формата есть разные варианты длины плат и расположения крепежных отверстий, а значит, и стоек.
Варианты ошибок:
1. Стоек вкручено меньше, чем нужно. В принципе, если вместо шести болтиков материнская плата будет прикручена на пяти, ничего страшного не произойдет. Разве что повредится плата во время подключения коннекторов от блока питания.
2. Лишняя стойка под материнской платой. Очень опасная ошибка. Сразу ее можно не заметить, а исхода возможно два: в лучшем случае, компьютер не будет стартовать, в худшем — произойдет замыкание и что-то сгорит. Возможно, кому-то повезло и системный блок работает со стойкой под материнской платой, но это скорее исключение, чем правило.
Если только что собранный компьютер не стартует, первым делом проверьте подключение колодки проводов с передней панели, а именно, отключите все провода и замкните отверткой контакты Power SW на материнской плате. Возможно, что коннекторы подключены неправильно — разъем HDD-Led c красно-белыми проводами легко перепутать с бело-оранжевыми проводами кнопки питания, да и на заводах бывает ошибаются в маркировках и цветах. А бывает, что все провода черные в угоду стилю. Ничего страшного не произойдет, нужно просто подключить правильно.
А вот с подключением колодки USB 2.0 нужно быть очень осторожными. Минутка страшных историй:
Один сборщик собирал несколько компьютеров в серьезное госучреждение и подключил USB-коннекторы передней панели в разъемы COM-порта на материнской плате (на фото ниже обведены). В результате горе-сборщик поехал туда не только, чтобы подключить правильно USB, но и с подарками в виде флеш-накопителей, которые сгорели в портах спереди корпуса.
3. Забыли вставить заглушку портов вывода. Это классическая ошибка. Собрали компьютер, все прикрутили, провода стянули стяжками. Начали подключать к задней панели периферию, и чего-то не хватает… Заглушки портов вывода. А так просто ее не поставить: придется снова разобрать почти все и вынимать материнскую плату.
Это не очевидно, но нельзя забывать про «усики» на заглушке. Они не всегда отогнуты и при установке и могут попасть внутрь разъема, например, как на фото ниже — в Display port. Ничего не замкнет, но кабель туда уже не вставить. Исправить можно или разобрав все, или использовав «кусачки».
Блок питания
Неправильно установить БП в корпус и подключить провода питания очень сложно, потому что у блока есть ключи, благодаря которым нужный коннектор подходит только к правильному разъему. Исключение — 8pin-коннектор питания видеокарты, который отлично подходит к 8-pin-разъему питания CPU на материнской плате. От такой ошибки компьютер просто не включится, а исправить эту оплошность довольно легко, подключив провода в нужные разъемы.
Также можно допустить ошибки кабель-менеджмента. Кабеля от блока питания должны быть уложены так, чтобы не закрывать вентиляторы, и тем более не задевать лопасти (в идеале как на левом фото). Провода не должны свободно болтаться, как на фото справа.
Если корпус современный, место для кабелей обычно есть за поддоном материнской платы. Правильно будет пропустить провода там.
Платы расширения и накопители
Сложностей с установкой видеокарты обычно не возникает. Частая проблема — отсутствие подключения кабелей питания, а также крепления к корпусу. Более редкая — установка видеокарты не в слот PCI-Ex 16x, а в более медленный.
На некоторых материнских платах видеокарту лучше установить после установки SSD-формата m.2, так как массивная система охлаждения может помешать установке накопителя.
Что касается жестких дисков и SSD, ошибками могут быть только:
1. Отсутствие подключения
2. Крепление к корпусу только с одной стороны.
3. Неправильные болтики.
Несмотря на то, что у корпусных болтов такая же резьба (6-32 UNC), они являются саморезами. Ими можно сорвать «родную». Так что прикручивать диски можно только специальными болтиками.
Слева корпусные, в центре и справа — для накопителей
Не бойтесь самостоятельно собирать компьютер, главное делать это вдумчиво и не спешить. Для того, чтобы избежать ошибок, особенно если это первая сборка, стоит прочитать все инструкции и следовать им в процессе. Как правило, чаще ошибаются самоуверенные опытные сборщики, которые пытаются собрать компьютер быстро и в спешке могут упустить из внимания какой-то нюанс. Делитесь в комментариях своими ошибками.
Ассемблер. Сегменты памяти и регистры | Уроки Ассемблера
Обновл. 29 Сен 2019 |
Мы уже рассматривали 3 секции из которых состоят программы на ассемблере. Эти секции также включают сегменты памяти. Что интересно, если вы замените слово section
на сегмент
, то получите тот же результат. Например:
сегмент .text; сегмент когда global_start; должно быть объявлено для линкера _Начало: ; сообщаем линкеру точки входа mov edx, len; длина сообщения mov ecx, msg; сообщение для написания mov ebx, 1; файловый дескриптор (stdout) mov eax, 4; номер системного вызова (sys_write) int 0x80; вызов ядра mov eax, 1; номер системного вызова (sys_exit) int 0x80; вызов ядра сегмент.данные ; сегмент данных msg db ‘Привет, мир!’, 0xa; наша строка len equ $ — сообщение; длина нашей строки
сегмент. Текст; сегмент когда global_start; должно быть объявлено для линкера _start:; сообщаем линкеру точки входа mov edx, len; длина сообщения mov ecx, msg; сообщение для написания mov ebx, 1; файловый дескриптор (stdout) mov eax, 4; номер системного вызова (sys_write) int 0x80; вызов ядра
mov eax, 1; номер системного вызова (sys_exit) int 0x80; вызов ядра
сегмент.данные ; сегмент данных msg db ‘Hello, world!’, 0xa; наша строка len equ $ — msg; длина нашей строки |
Результат выполнения программы выше:
Привет, мир!
Сегменты памяти
Модель сегментированной памяти разбивает системную память на группы независимых сегментов, которые указывают указатели , расположенные в регистрах сегментов. Каждый сегмент используется для хранения данных определенного типа.Один сегмент используется для хранения кода, второй — для хранения элементов данных, а третий — для программного обеспечения стека.
Сегменты памяти:
Сегмент данных ( данных сегмент ) — представлен секциями . данные и . БСС . Секция .data используется для объявления области памяти, где хранятся элементы данных для программы. Эта секция не может быть расширена после объявления элементов данных, и она остаётся статической во всей программе.Секция .bss также является секцией статической памяти, которая содержит буферы для данных, которые объявлены в программе позже. Эта буферная память заполнена нулями.
С егмент кода ( код сегмент ) — представлен секцией .text . Он определяет область в памяти, в которой хранятся инструкции инструкций. Это также фиксированная область.
Стек ( stack ) — это сегмент, содержит значения данных, передаваемые функции и процедуры в программе.
Регистры
Обычно операции с процессором включают в себя обработку данных. Эти данные могут быть сохранены в памяти, так и извлечены оттуда. Однако процесс чтения данных из памяти и хранения данных в памяти замедляет работу процессора, так как это предполагает процесс отправки запроса данных через шину управления в блок памяти и получение данных по одному и тому же каналу.
Чтобы ускорить свою работу, процессор подключает определенные внутренние места хранения памяти, называемые регистрами. Регистры хранят элементы данных для обработки без необходимости получать доступ к памяти. Ограниченное количество регистров встроено в чип процессора.
Регистры процессора
В архитектуре IA-32 есть десять 32-битных и шесть 16-битных процессорных регистраторов. Регистры делятся на три категории :
Общие регистры (Общие регистры)
Регистры управления (Control Registers)
Сегментные регистры (регистры сегментов)
В свою очередь, общие регистры делятся на следующие:
Регистры данных (Data Registers)
Регистры-указатели (Регистры указателя)
Индексные регистры (индексные регистры)
Регистры данных
Регистры данных — это четыре 32-битных регистратора, которые используются для арифметических, логических и других операций.Эти 32-битные регистры могут быть использованы используемыми способами:
Как полные 32-битные регистры данных: EAX, EBX, ECX, EDX.
Нижние половины 32-битных регистров могут зарегистрироваться как четыре 16-битных регистрационных данных: AX, BX, CX и DX.
Нижняя и верхняя половина вышеупомянутых четырёх 16-битных регистров как восемь 8-битных регистров данных: AH, AL, BH, BL, CH, CL, DH и DL.
Некоторые из этих регистров имеют специфическое применение в арифметических операциях.
AX (первичный аккумулятор) используется для ввода / вывода и в большинстве арифметических операций. Например, в операции умножения один операнд сохраняется в EAX или AX или AL в соответствии с размером операнда.
BX (базовый регистр) используется при индексированной адресации.
CX ( счетный регистр) хранит количество циклов в повторяющихся операциях (также как и регистры ECX и CX).
DX (регистр данных) используется в операциях ввода / вывода, а также с регистрами AX и DX для операций умножения и деления, связанных с большими значениями.
Регистры-указатели
Регистрами-указателями являются 32-битные регистры EIP, ESP и EBP и соответствующие им 16-битные регистры IP, SP и BP. Есть три категории регистров-указателей:
Указатель на инструкцию или команду ( Инструкция Pointer или IP ) — 16-битный регистр IP хранит смещение адреса следующей команды, которая должна быть выполнена.IP в сочетании с регистром CS (как CS: IP) предоставляет полный адрес инструкции в сегменте кода.
Указатель на стек ( Stack Pointer или SP ) — 16-битный регистр SP обеспечивает значение ущерба в программном стеке. SP в сочетании с регистром SS (SS: SP) относится к текущей позиции данных или адреса в программном стеке.
Базовый указатель ( Base Pointer или BP ) — 16-битный регистр BP используется в основном при передаче параметров в программе.Адрес в регистре SS объединяется со смещением в BP, чтобы получить задание. BP также можно комбинировать с DI и SI в качестве базового регистра для специальной адресации.
Индексные регистры
32-битные индексные регистры ESI и EDI и их 16-битные версии: SI и DI, которые используются в индексированной адресации, и, иногда, в операциях сложения / вычитания. Есть два типа индексных указателей:
Исходный индекс ( Источник Index или S I ) — используется в качестве индекса в строковых операциях.
Индекс назначения ( Destination Index или DI) — используется в качестве индекс назначения в строковых операциях.
Регистры управления
Регистром управления является объединённый 32-битный регистр флагов (текущий процессор, отражающий егоее состояние). Многие инструкции включают в себя операции сравнения и математические вычисления, которые могут изменить состояние флагов, а некоторые другие инструкции проверяют значения флагов состояния, чтобы перенести поток управления в другое место.
Распространённые битовые флаги:
Флаг переполнения ( Overflow Flag или OF ) — указывает на переполнение старшего бита данных (крайнего левого бита) после подписано арифметической операции.
Флаг направления ( Направление Flag или DF) — указать направление влево или вправо для перемещения или сравнения строковых данных.Если DF = 0
, то строковая операция принимает направление слева направо, а когда DF = 1
, то строковая операция принимает направление справа налево.
Флаг прерывания ( Interrupt Flag или IF ) — определяет, будут ли игнорироваться или обрабатываться внешними прерываниями (например, ввод клавиатуры и т.д.). Он отключает внешнее прерывание, когда значение равно 0, и разрешает прерывание, когда установлено значение 1.
Флаг ловушка (Trap Flag или TF) — позволяет настроить работу процессора в одношаговом режиме.
Флаг знака ( Знак Флаг или SF) — показывает знак результата арифметической операции. Этот флаг устанавливается в соответствии со знаком элемента данных после выполнения арифметической операции. Знак определяется по старшему левому биту. Положительный результат сбрасывает значение SF до 0, а отрицательный результат устанавливает его равным 1.
Нулевой флаг ( Zero Flag или ZF) — указывает результат арифметической операции или операции сравнения. Ненулевой результат сбрасывает нулевой флаг до 0, а нулевой результат устанавливает его равным 1.
Вспомогательный флаг переноса (Вспомогательный флаг переноса или AF) — после выполнения арифметической операции содержит перенос с бита 3 на бит 4. Используется для специализированной арифметики.AF устанавливается, когда 1-байтовая арифметическая операция вызывает перенос из бита 3 в бит 4.
Флаг равенства ( Четность Flag или PF) — указывает общее количество 1-бит в результате, полученном после выполнения арифметической операции. Чётное число 1-бит сбрасывает PF до 0, а нечётное число 1-бит устанавливает PF равным 1.
Флаг переноса ( Carry Flag или CF) — после выполнения арифметической операции содержит перенос 0 или 1 из старшего бита (крайнего слева).Кроме того, хранит содержимое последнего бита операции сдвига или поворота.
В таблице ниже указано положение битовых флагов в 16-битном регистре флагов:
Флаг: | O | D | I | т | S | Z | А | P | С | |||||||
Бит №: | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Сегментные регистры
Сегменты — это специфические части программы, которые содержат данные, код и стек.Есть основных три сегмента:
Сегмент кода ( Код Сегмент или CS ) — содержит все команды и инструкции, которые должны быть выполнены. 16-битный регистр сегмента кода или регистр CS хранит начальный адрес сегмента кода.
Сегмент данных ( Data Segment или DS ) — содержит данные, константы и рабочие области.16-битный регистр сегмента данных или регистр DS хранит начальный адрес сегмента данных.
Сегмент стека ( Stack Segment или SS ) — содержит данные и возвращаемые процедуры или подпрограммы. Он представлен в виде структуры данных «Стек» . Регистр сегмента стека или регистр СС хранит начальный адрес стека.
Кроме регистров CS, DS и SS существуют и другие регистры дополнительных сегментов (Extra Segment или ES), FS и GS, которые предоставляют дополнительные сегменты для хранения данных.
При написании программ на ассемблере, программе необходим доступ к ячейкам памяти. Все области памяти в сегменте к начальному сегменту сегмента. Сегмент начинается с адреса, равномерно делимого на десятичное 16 или на шестнадцатеричное 10. Таким образом, крайняя правая шестнадцатеричная цифра во всех таких адресах памяти равна 0, что обычно не сохраняется в сегментных регистрах.
Сегментные регистры хранят начальные адреса сегмента. Чтобы получить точное местоположение данных или команду в сегменте, требуется значение с ущербом.Чтобы сослаться на любую ячейку памяти в сегменте, процессор объединяет адрес сегмента в сегментном регистре со значением с местоположения.
Пример на практике
Посмотрите на следующую простую программу, чтобы понять, как используются регистры в программировании на ассемблере. Эта программа выводит 9 звездочек с общим сообщением:
раздел .text global _start; должно быть объявлено для линкера (gcc) _Начало: ; сообщаем линкеру точку входу mov edx, len; длина сообщения mov ecx, msg; сообщение для написания mov ebx, 1; файловый дескриптор (stdout) mov eax, 4; номер системного вызова (sys_write) int 0x80; вызов ядра mov edx, 9; длина сообщения mov ecx, s2; сообщение для написания mov ebx, 1; файловый дескриптор (stdout) mov eax, 4; номер системного вызова (sys_write) int 0x80; вызов ядра mov eax, 1; номер системного вызова (sys_exit) int 0x80; вызов ядра раздел .данные msg db ‘Отображение 9 звездочек’, 0xa; наше сообщение len equ $ — сообщение; длина нашего сообщения s2 умножить на 9 дБ ‘*’
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 14 18 19 20 21 22 23 |
раздел.текст global _start; должно быть объявлено для линкера (gcc) _start:; сообщаем линкеру точку входа mov edx, len; длина сообщения mov ecx, msg; сообщение для написания mov ebx, 1; файловый дескриптор (stdout) mov eax, 4; номер системного вызова (sys_write) int 0x80; вызов ядра mov edx, 9; длина сообщения mov ecx, s2; сообщение для написания mov ebx, 1; файловый дескриптор (stdout) mov eax, 4; номер системного вызова (sys_write) int 0x80; вызов ядра mov eax, 1; номер системного вызова (sys_exit) int 0x80; вызов ядра раздел.data msg db ‘Отображение 9 звездочек’, 0xa; наше сообщение len equ $ — msg; длина нашего сообщения s2 раза 9 db ‘*’ |
Результат выполнения программы выше:
Показано 9 звезд
*********
Оценить статью:

Поделиться в социальных сетях:
.Регистры процессора
Главная / Ассемблер / Для чайников / Введение в Ассемблер /Начало с модели 80386 процессоры Intel обеспечивает 16 основных регистров для пользовательских программ и ещё 11 регистров для работы с мультимедийными приложениями (MMX) и числа с плавающей точкой (FPU / NPX). Все команды так или иначе изменяют содержимое регистров. Как уже говорилось, обращаться к регистрам быстрее и удобнее, чем к памяти.Поэтому при программировании на языке Ассемблера регистры используются очень широко.
В этом разделе мы рассмотрим основные регистры процессоров Intel. Названия и состав / количество регистров для других процессоров могут отличаться. Итак, основные регистры процессоров Intel.
Таблица 2.1. Основные регистры процессора .
Название | Разрядность | Основное назначение |
EAX | 32 | Аккумулятор |
EBX | 32 | База |
ECX | 32 | Счётчик |
EDX | 32 | Регистр данных |
EBP | 32 | Указатель базы |
ESP | 32 | Указатель стека |
ESI | 32 | Индекс источника |
EDI | 32 | Индекс приёмника |
EFLAGS | 32 | Регистр флагов |
EIP | 32 | Указатель инструкции (команды) |
CS | 16 | Сегментный регистр |
DS | 16 | Сегментный регистр |
ES | 16 | Сегментный регистр |
ФС | 16 | Сегментный регистр |
GS | 16 | Сегментный регистр |
SS | 16 | Сегментный регистр |
Регистры EAX, EBX, ECX, EDX — это регистры общего назначения.Они имеют определенное назначение (так уж сложилось исторически), однако в них можно хранить любую информацию.
Регистры EBP, ESP, ESI, EDI — это также регистры общего назначения. Они имеют уже более конкретное назначение. В них также можно хранить пользовательские данные, но делать это нужно уже более осторожно, чтобы не получить «неожиданный» результат.
Регистр флагов и сегментные регистры требуют отдельного описания и будут более подробно рассмотрены далее.
Пока для вас здесь слишком много непонятных слов, но со временем всё прояснится)))
Когда-то процессоры были 16-разрядными, и, соответственно, все их регистры были также 16-разрядными. Для совместимости со старыми программами, а также для удобства программирования некоторые регистры разделены на 2 или 4 «маленьких» регистра, у каждого из которых есть свои имена. В таблице 2.2 такие регистры.
Вот пример такого регистра.
Из этого следует, что вы можете написать в своей программе, например, такие команды:
MOV AX, 1 MOV EAX, 1Обе команды поместят в регистр AX число 1. Разница будет заключаться только в том, что вторая команда обнулит старшие разряды регистра EAX, то есть после выполнения вторая команда в регистре EAX будет число 1. А первая команда оставит в старших разрядах регистра EAX старые данные. И если там были данные, отличные от нуля, то после выполнения первой команды в регистре EAX будет какое-то число, но не 1.А вот в регистре AX будет число 1. Сложно? Ну это пока… Со временем вы к таким вещам привыкните.
Мы пока не говорили о разрядах (битах). Эту тему мы обсудим в разделах, посвященных системам счисления. А сейчас пока вам достаточно знать, что нулевой разряд (бит) — это младший бит. Он крайний справа. Старший бит — крайний слева. Номер старшего бита зависит от разрядности числа / регистра. Например, в 32-разрядном регистре старшим битом является 31-й бит (потому что отсчёт начинается с 0, а не с 1).
Ниже приведён список регистров общего назначения, которые можно поделить описанным выше способом и при этом к «половинкам» и «четвертинкам» этих регистров можно обращаться в программу как к отдельному регистру.
Таблица 2.2. «Делимые» регистры. .
Регистр | Старшие разряды | Имена 16-ти и 8-ми битных регистров | |
31… 16 | 15… 8 | 7… 0 | |
EAX | … | AX | |
AH | AL | ||
EBX | … | BX | |
BH | BL | ||
ECX | … | CX | |
CH | класс | ||
EDX | … | DX | |
DH | DL | ||
ESI | … | SI | |
EDI | … | DI | |
EBP | … | БП | |
ESP | … | SP | |
EIP | … | IP |
На этом мы закончим наше краткое знакомство с регистрами. Если вам пока не всё понятно — просто прочитайте этот раздел, чтобы более-менее уязвимым себе, что такое регистры.По мере приобретения новых знаний вы можете вернуться к этому разделу и уже на новом уровне воспринять эту информацию. А в следующем разделе мы коротко опишем процесс выполнения команды.
.
Шпаргалка по основным инструкциям ассемблера x86 / x64
В прошлой статье мы написали наше первое приложение hello world на асме, научились его компилировать и отлаживать, а также узнали, как делать системные вызовы в Linux. Сегодня же мы познакомимся непосредственно с ассемблерными инструкциями, понятием регистров, стека и вот этого всего. Ассемблеры для архитектуры x86 (он же i386) и x64 (он же amd64) очень похожи, в связи с чем нет смысла рассматривать их в отдельных статьях.Притом акцент я постараюсь делать на x64, попутно отмечая отличия от x86, если они есть. Далее, что вы уже знаете, например, чем стек отличается от кучи, и объяснять такие вещи не требуется.
Регистры общего назначения
Регистр — это небольшой (обычно 4 или 8 байт) кусочек памяти в процессоре с большой скоростью доступа. Регистры делятся на регистры специального назначения и регистры общего назначения. Нас сейчас интересуют регистры общего назначения.Как можно догадаться по названию, программа может использовать эти регистры под свои нужды, как ей вздумается.
На x86 доступно восемь 32-х битных регистров общего назначения — eax, ebx, ecx, edx, esp, ebp, esi и edi. Регистры не имеют заданного наперед типа, то есть, они могут трактоваться как знаковые или беззнаковые целые числа, указатели, булевы значения, ASCII-коды символов и так далее. Несмотря на то, что в теории эти регистры можно использовать как угодно, как обычно, используется обычно каждый регистр определенным образом.Так, esp указывает на вершину стека, ecx играет роль счетчика, а в eax записывается результат выполнения операции или процедуры. Существуют 16-и битные регистры ax, bx, cx, dx, sp, bp, si и di, представляющие собой 16 младших бит соответствующих 32-х битных регистров. Также доступны и 8-и битовые регистры ah, al, bh, bl, ch, cl, dh и dl, которые предоставляют собой старшие и младшие байты регистров ax, bx, cx и dx соответственно.
Рассмотрим пример. Допустим, выполняются следующие три инструкции:
(gdb) x / 3i $ pc
=> 0x8048074: mov $ 0xaabbccdd,% eax
0x8048079: mov $ 0xee,% al
0x804807b: mov $ 0x1234,% ax
Значения регистров после записи в eax значения 0 x AABBCCDD:
(gdb) p / x $ eax
$ 1 = 0xaabbccdd
(gdb) p / x $ ax
$ 2 = 0xccdd
(gdb) p / x $ ah
$ 3 = 0xcc
(gdb) p / x $ al
$ 4 = 0xdd
Значения после записи в регистр al значения 0 x EE:
(gdb) p / x $ eax
$ 5 = 0xaabbccee
(gdb) p / x $ ax
$ 6 = 0xccee
(gdb) p / x $ ah
$ 7 = 0xcc
(gdb) p / x $ al
$ 8 = 0xee
Значения регистров после записи в оси числа 0 x 1234:
(gdb) p / x $ eax
$ 9 = 0xaabb1234
(gdb) p / x $ ax
$ 10 = 0x1234
(gdb) p / x $ ah
$ 11 = 0x12
(gdb) p / x $ al
$ 12 = 0x34
Как видите, ничего сложного.
Примечание: Синтаксис GAS позволяет указывать размеры операндов посредством суффиксов b (байт), w (слово, 2 байта), l (длинное слово, 4 байта), q (четверное слово, 8 байт) и некоторых других. Например, вместо команды mov $ 0xEE,% al
можно написать movb $ 0xEE,% al
, вместо mov $ 0x1234,% ax
— movw $ 0x1234,% ax
и так далее. В современных GAS эти суффиксы являются опциональными и я лично их не использую. Но не пугайтесь, смотрите их в чужом коде.
На x64 размер регистров был увеличен до 64-х бит. Соответствующие регистры получили название rax, rbx, и так далее. Кроме того, регистров общего назначения стало шестнадцать вместо восьми. Дополнительные регистры получили название r8, r9,…, r15. Соответствующие им регистры, которые имеют младшие 32, 16 и 8 бит, получили название r8d, r8w, r8b, и по аналогии для регистров r9-r15. Кроме того, появились регистры, представляющие собой младшие 8 бит регистров rsi, rdi, rbp и rsp — sil, dil, bpl и spl соответственно.
Про адресцию
Как уже отмечалось, регистры могут трактоваться, как указатели на данные в памяти. Для разыменования таких указателей используется специальный синтаксис:
Эта запись означает «прочитай 8 байт по адресу, записанному в регистре rsp, и сохрани их в регистр rax». При запуске rsp указывает на вершину стека, где хранится число аргументов, переданных программ (argc), указатели на эти аргументы, а также переменные окружения и кое-какая другая информация.Таким образом, в результате выполнения приведенной выше инструкции (разумеется, при условии, что перед ней выполнялись какие-либо другие инструкции) в rax будет записано количество аргументов, с которой была запущена программа.
В одной команде можно указывать адрес и смешение (как положительное, так и отрицательное) относительно него:
Эта запись означает «возьми rsp, прибавь к нему 8, прочитай 8 байт по получившемуся адресу и положи их в rax». Таким образом, в rax будет записан адрес строки, представляющей собой первый аргумент программы, то есть имя исполняемого файла.
При работе с массивами бывает удобно обращаться к элементу с определенным индексом. Соответствующий синтаксис:
# инструкция xchg меняет значения местами
xchg 16 (% rsp,% rcx, 8),% rax
Читается так: «посчитай rcx * 8 + rsp + 16, и поменяй местами 8 байт (размер регистра) по получившемуся адресу и значение регистра rax». Другими словами, rsp и 16 все так же играют роль в массиве, rcx играет роль в массиве, а 8 — это размер элемента массива. При использовании данного синтаксиса допустимыми размерами элемента являются только 1, 2, 4 и 8.Если требуется какой-то другой размер, можно использовать инструкции умножения, бинарного сдвига и прочие, которые мы рассмотрим далее.
Наконец, следующий код тоже валиден:
.dataсообщение:
.ascii «Привет, мир! \ n»
.text
.globl _start
_start:
# обнуление rcx
xor% rcx,% rcx
mov msg (,% rcx, 8),% al
mov msg,% ah
В смысле, что можно не указывать со смещением или вообще какие-либо регистры. В результате выполнения этого кода в регистры al и ah будет записан ASCII-код буквы H, или 0 x 48.
В этом контексте хотелось бы вставить еще одну полезную ассемблерную инструкцию:
# rax: = rcx * 8 + rax + 123
lea 123 (% rax,% rcx, 8),% rax
Инструкция lea очень удобна, так как позволяет сразу выполнить умножение и несколько сложений.
Интересный факт! На x64 в байткоде инструкций никогда не используются 64-х битовые с ущербом. В отличие от x86, инструкции часто оперируют не абсолютными адресами, что позволяет обращаться к ближайшим +/- 2 Гб оперативной памяти.Соответствующий синтаксис:
Сравним длина опкодов «обычного» и «относительного» mov ( objdump -d
):
4000b0: 8a 0c 25 e8 00 60 00 mov 0x6000e8,% cl
4000b7: 8a 05 2b 00 20 00 mov 0x20002b (% rip),% al # 0x6000e8
Как видите, «относительный» mov еще и на один байт короче! Что это за регистр такой rip мы узнаем чуть ниже.
Для записи же полного 64-х битового значения в регистр предусмотрена специальная инструкция:
мовабов $ 0x1122334455667788,% rax
Другими словами, процессоры x64 так же экономно кодируют инструкции, как процессоры x86, и в наше время нет особо смысла использовать процессоры x86 в системах, имеющих пару гигабайт оперативной или меньше (мобильные устройства, холодильники, микроволновки и так далее).Скорее всего, процессы x64 будут даже более эффективны за счет большего числа доступных регистров и большего размера этих регистров.
Арифметические операции
Рассмотрим основные арифметические операции:
# инциализируем значения регистровmov $ 123,% rax
mov $ 456,% rcx
# инкремент: rax = rax + 1 = 124
inc% rax
# декремент: rax = rax — 1 = 123
dec% rax
# сложение: rax = rax + rcx = 579
add% rcx,% rax
# вычитание: rax = rax — rcx = 123
sub% rcx,% rax
# изменение знака: rcx = — rcx = -456
neg % rcx
Здесь и далее операндами могут быть не только регистры, но и участки памяти или константы.Но оба операнда не могут быть участками памяти. Это правило применимо ко всем инструкциям ассемблера x86 / x64, по крайней мере, из рассмотренных в данной статье.
Пример умножения:
mov $ 100,% al
mov $ 3,% cl
mul% cl
В данном примере умножает al на cl, сохраняет результат умножения в пару регистров и ah. Таким образом, топор примет значение 0 x 12C или 300 в десятичной нотации. В худшем случае для достижения перемножения N-байтовых значений может потребоваться до 2 * N байт.В зависимости от размера операнда результат сохраняется в al: ah, ax: dx, eax: edx или rax: rdx. Притом в качестве множителей всегда используется первый из этих регистров и переданный аргумент аргумент.
Знаковое умножение создается точно так же при помощи инструкции imul. Кроме того, существуют варианты imul с двумя и аргументами:
mov $ 123,% raxmov $ 456,% rcx
# rax = rax * rcx = 56088
imul% rcx,% rax
# rcx = rax * 10 = 560880
imul $ 10,% rax,% rcx
Инструкции div и idiv производят действия, обратные mul и imul.Например:
mov $ 0,% rdxmov $ 456,% rax
mov $ 123,% rcx
# rax = rdx: rax / rcx = 3
# rdx = rdx: rax% rcx = 87
div% rcx
Как видите, был получен результат целочисленного деления, а также остаток от деления.
Это далеко не все арифметические инструкции. Например, есть еще adc (сложение с учетом флага переноса), sbb (вычитание с учетом займа), соответствующие им инструкции, выставляющие и очищающие соответствующие флаги (ctc, clc) и многие другие.Они распространены намного меньше, и потому в данной статье не исследуется.
Логические и битовые операции
Как уже отмечалось, особой типизации в ассемблере x86 / x64 не предусмотрено. Поэтому не стоит удивляться, что в нем нет отдельных инструкций для выполнения булевых операций и отдельных битовых операций. Вместо этого есть один набор инструкций, работающих с битами, а уж как интерпретировать результат — решает конкретная программа.
Так, например, вычисление простейшего логического выражения:
mov $ 0,% rax # a = falsemov $ 1,% rbx # b = true
mov $ 0,% rcx # c = false
# rdx: = a || ! (b && c)
mov% rcx,% rdx # rdx = c
и% rbx,% rdx # rdx & = b
не% rdx # rdx = ~ rdx
или% rax,% rdx # rdx | = a
и 1 доллар,% rdx # rdx & = 1
Заметьте, что здесь мы использовали по одному младшему биту в каждом из 64-х битовых регистров.Таким образом, в старших битах образуется мусор, который мы обнуляем последнюю команду.
Еще одна полезная инструкция — это xor (исключающее или). В логических выражениях xor используется нечасто, однако с его помощью часто происходит обнуление регистров. Если посмотреть на опкоды инструкций, то становится понятно, почему:
4000b3: 48 31 db xor% rbx,% rbx
4000b6: 48 ff c3 inc% rbx
4000b9: 48 c7 c3 01 00 00 00 mov $ 0x1,% rbx
Как видите, инструкции xor и inc кодируются всего лишь тремя байтами, в то время, как делающая то же самое инструкция mov занимает целых семь байт.Каждый отдельный случай, конечно, лучше бенчмаркать отдельно, но общее эвристическое правило такое — чем короче код, тем больше его помещается в кэши процессора, тем быстрее он работает.
В данном контексте также следует вспомнить инструкции побитового сдвига, тестирования битов (битовое тестирование) и сканирование битов (битовое сканирование):
# положим что-нибудь в регистрmovabs $ 0xc0de1c0ffee2beef,% rax
# сдвиг влево на 3 бита
# rax = 0x0de1c0ffee2beef0
shl $ 4,% rax
# rax
# сдвиг вправо на 7 бит
# racrd 7×001 rax
# циклический сдвиг вправо на 5 бит
# rax = 0xe800de1c0ffee2be
ror $ 5,% rax
# циклический сдвиг влево на 5 бит
# rax = 0x001bc381ffdc57 вdd
rol $ 5,% rax
# CF = !! (0x1bc381ffdc57dd & (1 << 13)) = 0
bt $ 13,% rax
# то же самое + установить бит (bit test and set)
# rax = 0x001bc381ffdc77dd , CF = 0
bts $ 13,% rax
# то же самое самое + сбросить бит (проверка и сброс бит)
# rax = 0x001bc381ffdc57dd, CF = 1
btr $ 13,% rax
# то же самое + инвер бит ( битовый тест и дополнение)
# rax = 0x001bc381ffdc77dd, CF = 0
btc $ 13,% rax
# найти самый младший ненулев ой байт (битовое сканирование вперед)
# rcx = 0, ZF = 0
bsf% rax,% rcx
# найти самый старший ненулевой байт (битовое сканирование в обратном направлении)
# rdx = 52, ZF = 0
bsr% rax, % rdx
# если все биты нулевые, ZF = 1, значение rdx неопределено
xor% rax,% rax
bsf% rax,% rdx
Еще есть битовые сдвиги со знаком (sal, sar), циклические сдвиги с флагом переноса (rcl, rcr), а также сдвиги двойной точности (shld, shrd).Но используются они не так уж, да и утомишься часто перечислять вообще все инструкции. Поэтому их изучение я оставляю вам в качестве домашнего задания.
Условные выражения и циклы
Выше несколько раз упоминались какие-то там флаги, например, флаг переноса. Под флагами понимаются биты специального регистра eflags / rflags (название на x86 и x64 соответственно). Напрямую обращаться к этому регистру при помощи инструкций mov, add и подобных нельзя.Например, уже упомянутый флаг переноса (флаг переноса, CF) хранится в нулевом бите, eflags / rflags и используется, например, в той же инструкции bt. Еще из часто используемых флагов можно назвать нулевой флаг (ZF, 6-ой бит), знак-флаг (SF, 7-ой бит), флаг направления (DF, 10-ый бит) и флаг переполнения (OF, 11-ый бит). .
Интересный факт! Нравится статья? Поддержи автора, чтобы он мог писать больше полезных статей!
Еще из таких неявных регистров следует назвать eip / rip, хранящий адрес текущей инструкции.Его также нельзя использовать напрямую, но он виден в GDB вместе с eflags / rflags, если сказать регистрирует информацию
, и косвенно изменяется всем инструкциям. Большинство инструкций просто увеличивают длину этой инструкции, но есть и исключения из этих правил. Например, инструкция jmp просто осуществляет переход по заданному адресу:
# обнуляем rax
xor% rax,% rax
jmp next
# эта инструкция будет пропущена
inc% rax
next:
inc% rax
В результате значения rax будет равно единице, так как первая инструкция inс будет пропущена.Заметьте, что адрес перехода также может быть записан в регистре:
xor% rax,% rax
mov $ next,% rcx
jmp *% rcx
inc% rax
next:
inc% rax
Впрочем, на практике такого кода лучше избегать.
Примечание: GAS позволяет давать меткамирные имена типа 1:
, 2:
, и так далее, и переходить к ближайшей предыдущей или следующей метке с заданными номерами инструкций вроде jmp 1b
и jmp 1f
.Это довольно удобно, так как иногда бывает трудно придумать меткам осмысленные имена. Подробности можно найти здесь.
Условные переходы обычно используются при помощи инструкций cmp, которая сравнивает два своих операнда и инструкции из семейства jg и подобных:
cmp% rax,% rcx je 1f # перейти, если равны (равны)
jl 1f # перейти, если знаково меньше (меньше)
jb 1f # перейти, если беззнаково меньше (ниже)
jg 1f # перейти, если знаково больше (больше)
ja 1f # перейти, если беззнаково больше (сверху)
1:
Существует также инструкции jne (перейти, если не равны), jle (перейти, если знаково меньше или равны), jna (перейти, если беззнаково не больше) и подобных.Принцип их именования, надеюсь, очевиден. Вместо je / jne часто пишут jz / jnz, так как инструкции je / jne просто проверяют значение ZF. Также есть инструкции, проверяющие другие флаги — js, jo и jp, но на практике они используются редко. Все эти взятые взятые обычно называют jcc. То есть, вместо условий пишутся две буквы «c», от «condition». Здесь можно найти хорошую сводную таблицу по всем инструкциям jcc и тому, какие флаги они проверяют.
Помимо cmp также часто используют проверку инструкциями:
test% rax,% rax
jz 1f # перейти, если rax == 0
js 2f # перейти, если rax <0
1:
# какой-то код
2:
# какой-то еще код
Интересный факт! Интересно, что cmp и test в душе являются теми же суб и, только не изменяют своих операндов.Это знание можно использовать для одновременного выполнения суб или и условного перехода, без дополнительных инструкций cmp или test.
Еще из инструкций, связанных с условными переходами, можно отметить следующие.
jrcxz 1f
# какой-то код
1:
Инструкция jrcxz осуществляет переход только в том случае, если значение регистра rcx равно нулю.
Инструкции семейства cmovcc (условный ход) работают как mov, но только при выполнении заданного условия, по аналогии с jcc.
Инструкции setcc присваивают однобайтовому регистру или байту в памяти значение 1, если заданное условие выполнено, и 0 иначе.
Сравнить rax с заданным куском памяти. Если равны, выставить ZF и сохранить по указанному адресу значение регистра, в данном примере rcx. Иначе очистить ZF и загрузить значение из памяти в rax. Также оба операнда могут быть регистрами.
cmpxchg8b (% RSI)
cmpxchg16b (% RSI)
Инструкция cmpxchg8b главным образом нужна в x86.Она работает аналогично cmpxchg, производит только сравнение и обмен сразу 8-и байт. Регистры edx: eax используются для сравнения, а регистры ecx: ebx хранят то, что мы хотим записать. Инструкция cmpxchg16b по тому же принципу производит сравнение и замену сразу 16-и байт на x64.
Важно! Примите во внимание, что без префикса lock все эти сравнить и поменять местами инструкции не атомарны.
mov $ 10,% rcx
1:
# какой-то код
loop 1b
# loopz 1b
# loopnz 1b
Инструкция loop уменьшает значение регистра rcx на единицу, и если после этого rcx! = 0
, осуществляется на заданную метку.Инструкции loopz и loopnz работают аналогично, только условия более сложные — (rcx! = 0) && (ZF == 1)
и (rcx! = 0) && (ZF == 0)
соответственно.
Не нужно быть семью пядей во лбу, чтобы изобразить при помощи этих инструкций конструкцию if-then-else или циклы для / пока, поэтому двигаемся дальше.
«Строковые» операции
Рассмотрим кусок следующего кода:
mov $ str1,% rsi
mov $ str2,% edi
cld
cmpsb
В регистры rsi и rdi кладутся адреса двух строк.Командой cld очищается флаг направления (DF). Инструкция, выполняющая обратное действие, называется std. Затем в дело вступает инструкция cmpsb. Она сравнивает байты (% rsi)
и (% rdi)
и выставляет флаги в соответствии с результатом сравнения. Затем, если DF = 0, rsi и rdi увеличиваются на единицу (количество байт в том, что мы сравнивали), иначе — уменьшаются. Аналогичные инструкции cmpsw, cmpsl и cmpsq сравнивают слова, длинные слова и четверные слова соответственно.
Инструкции cmps интересны тем, что заговор с префиксом rep, repeat (repz) и repne (repnz).Например:
mov $ str1,% rsi
mov $ str2,% edi
mov $ len,% rcx
cld
repeat cmpsb
jne not_equal
Префикс реп повторяет инструкцию заданное в регистре rcx количество раз. Префиксы repz и repnz делают то же самое, но только после каждого выполнения инструкции проверяется ZF. Цикл прерывается, если ZF = 0
в случае c repz и если ZF = 1
в случае с repnz. Таким образом, приведенный выше код проверяет равенство двух буферов одинакового размера.
Аналогичные инструкции movs перекладывает данные из буфера, адрес которого указан в rsi, в буфер, адрес которого указан в rdi (легко запомнить — rsi значит источник, rdi значит пункт назначения). Инструкции Stos заполняет буфер по адресу из регистратора байтами из регистратора rax (или eax, или ax, или al, в зависимости от конкретной инструкции). Инструкции lods делают обратное действие — копируют байты по указанному в адресе в регистр rax. Наконец, инструкции scas ищут байты из регистра rax (или соответствующего регистров меньшего размера) в буфере, адрес которого указан в rdi.Как и cmps, все эти инструкции работают с префиксами rep, repz и repnz.
На базе этих инструкций легко реализуются процедуры memcmp, memcpy, strcmp и подобных. Интересно, что, например, для обнуления памяти инженеры Intel рекомендуют использовать на современных процессорах rep stosb
, то есть, обнулять побайтово, а не ,ем, четверными словами.
Работа со стеком и процедуры
Со стеком все очень просто. Инструкция push кладет свой аргумент на стек, инструкция pop извлекает значение со стека.Например, если временно забыть про инструкцию xchg, то поменять местами значение двух регистров можно так:
push% rax
mov% rcx,% rax
pop% rcx
Существуют инструкции, помещающие на стек и извлекающие с него регистр rflags / eflags:
pushf
# делаем что-то, что меняет флаги
popf
# флаги восстановлены, самое время сделать jcc
А так, к примеру, можно получить значение флага CF:
pushf
pop% rax
и 1 доллар, rax
На x86 также существуют инструкции pusha и popa, сохраняющие на стеке и восстанавливающие с него значения всех регистров.В x64 этих инструкций больше нет. Видимо, потому что регистров стало больше и сами теперь длиннее — укреплять их все стало сильно дороже.
Процедуры, как правило, «преступ» при помощи инструкций call и ret. Инструкция вызова кладет на стек адрес следующая инструкция и передает управление по указанному в аргументе адресу. Инструкция ret читает со стека адрес возвращает и передает по нему управление. Например:
someproc:# типичный пролог процедуры
# для примера выделяем 0x10 байт на стеке под локальные переменные
# rbp — указатель на фрейм стека
push% rbp
mov% rsp,% rbp
sub $ 0x10,% rsp
# тут типа какие-то вычисления…
mov $ 1,% rax
# типичный эпилог процедуры
add $ 0x10,% rsp
pop% rbp
# выход из процедуры
ret
_start:
# как и в случае с jmp, адрес перехода может быть в регистре
вызов someproc
test% rax,% rax
jnz error
Примечание: Аналогичный пролог и эпилогичный можно написать при помощи инструкций ввести 0x10 $, 0
$ и оставить
. Но в наше время эти инструкции используются редко, так как они выполняются медленнее из-за дополнительной поддержки вложенных процедур.
Как правило, возвращаемое значение передается в качестве rax или, если его размер не регистрируется, записывается в качестве адреса, который передается в аргумента. К вопросу о передаче аргументов. Соглашений о вызовах существует великое множество. В одних все аргументы всегда передаются аргументы через стек (отдельный вопрос — в порядке). множество вариантов посередине, с отдельным касательно выравнивания аргументов на стеке, передачи этого, если это ООП язык, и так далее.В общем случае для произвольно взятой архитектуры, компилятора и языка программирования о вызовах может быть вообще каким угодно.
Для примера рассмотрим ассемблерный код, сгенерированный CLang 3.8 для простых программ на языке C под x64. Так выглядит одна из процедур:
unsigned int
hash (const unsigned char * data, const size_t data_len) {
unsigned int hash = 0x4841434B;
для (int i = 0; i
}
возврат хеша;
}
Дизассемблерный листинг (при компиляции с -O0
, комментарии мои):
# регистр rsp не изменяется, так как процедура не вызывает никаких
# других процедур
400950: 55 push% rbp
400951: 48 89 e5 mov% rsp,% rbp
# инициализация локальных чисел:
# -0x08 (% rbp) — const unsigned char * data (8 байт)
# -0x10 (% rbp) — const size_t data_len (8 байт )
# -0x14 (% rbp) — unsigned int hash (4 байта)
# -0x18 (% rbp) — int i (4 байта)
400954: 48 89 7d f8 mov% rdi, -0x8 (% rbp)
400958: 48 89 75 f0 mov% rsi, -0x10 (% rbp)
40095c: c7 45 ec 4b 43 41 48 movl $ 0x4841434b, -0x14 (% rbp)
400963: c7 45 e8 00 00 00 00 movl $ 0x0, -0x18 (% rbp)
# rax: = i.если достигли data_len, выходим из цикла
40096a: 48 63 45 e8 movslq -0x18 (% rbp),% rax
40096e: 48 3b 45 f0 cmp -0x10 (% rbp),% rax
400972: 0f 83 28 00 00 00 jae 4009a0
# eax: = (hash << 5) + hash
400978: 8b 45 ec mov -0x14 (% rbp),% eax
40097b: c1 e0 05 shl $ 0x5,% eax
40097e: 03 45 ec add -0x14 (% rbp),% eax
# eax + = data [i]
400981: 48 63 4d e8 movslq -0x18 (% rbp),% rcx
400985: 48 8b 55 f8 mov -0x8 (% rbp),% rdx
400989: 0f b6 34 0a movzbl (% rdx,% rcx, 1),% esi
40098d: 01 f0 add% esi,% eax
# hash: = eax
40098f: 89 45 ec mov% eax, -0x14 (% rbp)
# i ++ и перейти к началу цикла
400992: 8b 45 e8 mov -0x18 (% rbp),% eax
400995: 83 c0 01 add $ 0x1,% eax
400998: 89 45 e8 mov% eax, -0x18 (% rbp)
40099b: e9 ca ff ff ff jmpq 40096a
# возвращаемое значение (hash) кладется в регистр eax
4009a0: 8b 45 ec mov -0x14 (% rbp) ,% eax
# типичный эпилог
4009a3: 5d pop% rbp
4009a4: c3 retq
Здесь мы встретили две новые инструкции — movs и movz.Они работают точно так же, как mov, только расширяют один операнд до второго размера, знаково и беззнаково соответственно. Например, инструкция movzbl (% rdx,% rcx, 1),% esi
читайт байт (b) по адресу (% rdx,% rcx, 1)
, расширяет его в длинное слово (l) путем добавления в начало нулей (z) и кладет результат в регистр esi.
Как видите, два аргумента были переданы через регистры rdi и rsi. По всей видимости, используется конвенция под названием System V AMD64 ABI.Утверждается, что это стандарт де-факто под x64 на * nix системах. Я не вижу смысла пересказывать описание этой конвенции, заинтересованные читатели могут ознакомиться с полным описанием по приведенной ссылке.
Заключение
Само собой разумеется, в рамках одной статьи, описать весь ассемблер x86 / x64 не является возможным (более того, я не уверен, что сам знаю его фактически весь ). Как минимум, за кадром остались такие темы, как операции над числами с плавающей точкой, MMX-, SSE- и AVX-инструкции, а также всякие экзотические инструкции вроде lidt, lgdt, bswap, rdtsc, cpuid, movbe, xlatb или prefetch.Я постараюсь осветить их в следующих статьях, но ничего не обещаю. Следует также отметить, что в выводе objdump -d
для реальных программ вы очень редко увидите что-то описанное выше.
Еще интересный топик, оставшийся за кадром — это атомарные операции, барьеры памяти, спинлоки и вот это все. Например, сравнить и поменять местами часто реализуется как просто инструкция cmpxchg с префиксом блокировки. По аналогии реализуется атомарный инкремент, декремент и прочее. Увы, все это тянет на тему для отдельной статьи.
В качестве книги дополнительной информации можно рекомендовать современное программирование на языке ассемблера X86, и, конечно же, мануалы от Intel. Также довольно неплоха книга Сборка x86 на wikibooks.org.
Из онлайн-справочников по ассемблерным инструкциям стоит обратить внимание на следующие:
А знаете ли вы ассемблер, и если да, то находите ли это знание полезным?
Метки: Ассемблер.
.Что такое язык Ассемблера
Эти уроки предназначены для тех, кто вообще не знаком с Ассемблером, или имеет весьма отдаленное представление о нем. Конечно, если вы имеете опыт программирования на других языках (Basic, C / C ++, Pascal …), то это вам очень поможет.
. Но даже если вы хорошо знаете Ассемблер, то просмотр этого документа вам не можете помешает, так как здесь вы изучить синтаксис Emu8086 .
Подразумевается, что вы предлагаете представление о системах счисления (HEX / BIN).Ну а если нет, то рекомендуем вам изучить раздел Системы счисления перед тем, как вы продолжите ознакомление с этим документом.
Язык Ассемблера — это язык программирования низкого уровня. Для начала вы ознакомиться с общей структурой компьютера, чтобы в дальнейшем понимать, о чем идет речь. Упрощенная модель компьютера:
Системная шина — системная шина (окрашенного желтым цветом) соединяет различные компоненты компьютера.
CPU — центральный процессор — это сердце компьютера.Большинство вычислений происходит в CPU .
RAM — оперативная память (ОЗУ). В оперативную память загружаются программы для выполнения.
РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ
Процессор 8086 имеет 8 общего назначения, каждый регистр имеет имя:
- AX — регистр-аккумулятор (разделен на два регистра: AH и AL) .
- BX — регистр базового адреса (разделяется на BH / BL ).
- CX — регистр-счетчик (разделяется на CH / CL ).
- DX — регистр данных (разделяется на DH / DL ).
- SI — регистр — индекс источника.
- DI — регистр — индекс назначения.
- ВР — указатель базы.
- СП — указатель стека.
Несмотря на имя регистратора, программист сам определяет, для каких целей использовать регистры общего назначения.Основное назначение регистра — хранение числа (вариант). Разрядность вышеописанных регистров 16 бит, т.е., например, 0011000000111001b (в двоичной системе) или 12345 в десятичной (Вернуться) системе.
4 регистра общего назначения (AX, BX, CX, DX) разделены на две части. К каждой части можно обращаться как к отдельному регистру. Например, если AX = 0011000000111001b , то AH = 00110000b , а AL = 00111001b . Старший байт обозначается буквой «H», а младший байт — буквой «L».
«Времена 3» регистры расположены внутри процессора, то работают они они значительно быстрее, чем память. Обращение к памяти требует использования системной шины, а на это уходит больше времени. Обращение к регистрам вообще не отнимает время. Поэтому вы должны стараться хранить переменные в регистрах. Количество регистров очень небольшое и многие регистры имеют специальное назначение, которое не позволяет использовать их для место хранения, но все же они являются наилучшим местом записи временных данных и вычислений.
СЕГМЕНТНЫЕ РЕГИСТРЫ
- CS — указывает на сегмент, начальный адрес текущей программы.
- DS — обычно указывает на начальный адрес сегмента данных (число).
- ЕС — дополнительный сегментный регистр.
- ПС — содержит начальный адрес сегмента стека.
Сегментные регистры работают совместно срами общего назначения для доступа к памяти. Например, если мы хотим получить доступ к памяти с физическим адресом 12345h (в шестнадцатиричном исчислении), мы должны установить DS = 1230h и SI = 0045h . И это правильно, потому что таким образом мы можем получить доступ к памяти, физический адрес которой больше, чем значение, которое может поместиться в одиночном регистре.
Процессор вычисляет физический адрес, умножая значение сегментного регистратора на 10h и прибавляя к полученному результату значение регистра общего назначения (1230h * 10h + 45h = 12345h):
Адрес, сформированный с помощью двух регистров, называется реальным адресом .
По умолчанию регистры BX, SI и DI работают с сегментным регистром DS ; регистры BP и SP работают с SS .
Другие регистры общего назначения не могут формировать реальный адрес!
Также, хотя BX может сформировать реальный адрес, BH и BL не могут!
РЕГИСТРЫ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ
- ИП — командный указатель.
- Флаговый регистр — определить текущее состояние процессора.
Регистр IP всегда работает совместно с сегментным регистром CS и указывает на выполняемую в данный момент команду.
Флаговый регистр автоматически изменяется процессором после математических операций. Он позволяет получить тип результата и передачи управление другим участкам программы.
Вообще вы не можете напрямую обращаться к этим регистрам.
>>> Следующая часть >>>
.