Анекдот про советского инженера
Задача — поменять местами содержимое двух регистров процессора компьютера — A и B.
Программист:
— Надо три регистра и три действия:
1. C := A. (регистру C присвоить значение регистра A)
2. A := B.
3. B := C.
Хакер:
— Надо два регистра и три действия:
1. A := A XOR B. («XOR» — это логическая операция «исключающее ИЛИ»)
2. B := A XOR B.
3. A := A XOR B.
Инженер:
— Надо два регистра и два действия:
1. содержимое A послать в B,
2. и пока пересылается, БЫСТРЕНЬКО B — в A!
Международное энергетическое агентство (МЭА) призвало страны немедленно отказаться от новых проектов нефтегазового сектора, прекратить строительство ТЭЦ и к 2035 году отказаться от машин с бензиновыми двигателями.
А питать ся будуд солнэцэм.
Свидетили фигОвы)
Не, нуачо, розетки та остануцца.
Будут смотреть на них, мнтедитировать, и думать, кому бы опьявить войну и сдацца?)
Будут объявлять санкции, тем у кого розетки таки будут выдавать электроны.
Понял, у них розетки начнут выдавать святую воду)
Машины начнут сдавать в утиль, массово, металл упадёт в цене и производства разорятся.
На улицы выйдут тусячи человечков которым выдадут лесепедные генераторы на прдячем пару и они аки начнут вырабатывать зелёна энергетику.
И тут та оне вспомнят, сколько нужно сделать оборотов педалями на лесипеде что бы зарядить свежекупленный электромобиль.
Да, будет здорово.
Тут ни какой причаленный,, индепендмент,, не поможет.
Итаки да, по чём у них там кило ват т ляктричества? По окончании этого небытия и выхода ис него, наверное подорожает раза в два, три. Кака пить дать.
Розетки останутся, а вот иликтричиство в них кончится. Естественно, по вине русских хакеров и лично Путина )))))
Хенрен этого не допустит))
МЭА была создана странами-импортёрами нефти для противодействия ОПЕК. Какие ещё рекомендации от неё ждать?
Ну,дебилы это сила.
Пришёл
поручик РжевскийПитонист и всё опошлил:a, b = b, a
(Для тех, кто сейчас начнёт возмущаться про то, что в задаче речь идёт о регистрах, а не о переменных — а почему инженеру можно, а питонисту нельзя?)
Вполне можно предположить наличие в системе команд процессора команды CHNG A, B (то есть перестановка значений в двух регистрах). И технически она вполне может быть реализована почти по методу советского инженера — как бы на лету, из регистра как бы ОДНОВРЕМЕННО читается старое значение и записывается новое. На самом деле не одновременно — чтение реализуется по переднему фронту синхроимпульса, а запись — по заднему, но для процессора это выглядит как за один такт прочиталось старое и записалось новое.
Я даже помню, что в каких-то процессорах такая команда точно была — как минимум обмен значений регистра с аккумулятором. И она была востребована и удобна.
Это был Zilog Z80. Он имел два блока рабочих регистров, между которыми можно быстро переключаться. Это на нем строили системы вообще без ОЗУ.
Не обязательно. XCHG имеется в системе команд Intel начиная как минимум с i8086.
Команда обмена XCHG (exchange — обменять) меняет между собой значения двух регистров или регистра и ячейки памяти. Операнды должны иметь одинаковый тип данных (байт−байт, слово−слово и т.д.).
Несколько примеров:
XCHG АХ,ВХ; Обменять значения двух словных регистров.
XCHG WORD_MEM,DX; Обменять значения ячейки памяти и регистра.
Вот только, дай бог памяти, в процессоре она раскладывалась на те же mov. В результате 3 XOR были быстрее.
Это зависит от реализации, и в общем случае — нет, не раскладывается. Я же объяснил, как это происходит в регистре по двум фронтам синхроимпульса, но есть ведь и синхронные регистры, в которых чтение и запись происходит ОДНОВРЕМЕННО, одним фронтом. Вот натурально — на выходе регистра по фронту читается прежнее состояние, и по этому же фронту в регистр пишется новое состояние. Два таких регистра легко делают обмен значениями между собой по одному тактовому импульсу.
А уж если опускаться на физическую реализацию ячеек — то уже в Z8400 вместо статических триггеров на КМОП-транзисторах были применены динамические ячейки, в которых состояние регистров определяется ЗАРЯДОМ под затвором транзистора. И в таких ячейках одновременное чтение СТАРОГО состояния и запись НОВОГО состояния встроена by design, потому что там фактически под действием электростатических полей происходит перетекание заряда в соседнюю ячейку — и одновременно перенос в нее нового заряда из другой соседней ячейки. Причем эти перегоны заряда туда-сюда происходят регулярно, потому что заряды же растекаются — и их надо регенерировать.
Вот тебе процессор Z80. Команда обмена содержимого регистров
EX DE,HL
выполняется за 4 такта — точно так же, как NOP. За столько же выполняется и EX AF,AF’ — обмен целого аккумулятора с флагами с теневым аккумулятором и флагами (поэтому такой обмен широко применяется в обработчиках прерываний, когда надо работать быстро — запихивание аккумулятора с флагами в стек и восстановление выполняется значительно медленнее, ведь стек — это ячейки памяти).
Быстрее чем за 4 такта там не выполняется ничего. XOR там выполняется за 4/7/15 тактов — причем за 4 такта выполняется только XOR с аккумулятором, насколько я помню.
Да чо там — за 4 такта там выполняется даже EXX (то есть обмен всех регистров с альтернативными, BC,DE,HL <-> BC’,DE’,HL’ — 48 бит обмениваются за время одного NOPа).
Федерико Фаджин и Масатоши Шима были гениями, хе-хе.