LINUX.ORG.RU

Почему в процессоре нет инструкции пересылки из одной ячейки памяти в другую

 


0

2

Добрый день, решил освежить знания ассемблера и возник вопрос, а почему мы должны все операции делать через регистры, почему просто нельзя из одной ячейки памяти перекинуть в другую значение? что-то вроде mov [OOFF], [00BB]


Ответ на: комментарий от alysnix

из памяти можно только прочитать слово и положить слово.

Можно позанудствовать? Сложно Вам будет прочитать или выгрузить меньше чем cache-line нынче… В «обычную» память - так точно.

bugfixer ★★★★★
()

В pdp-11 было. Даже косвенная адресация память-память была. Т.е. не только из памяти в память можно было, но даже взять из памяти адрес памяти куда нужно скопировать…

ovax ★★★
()
Ответ на: комментарий от yu-boot

DMA в то время представлял из себя совершенно отдельную микруху и мог отсутствовать в целевой платформе. Да и DMA один фиг сперва надо еще настроить на нужные адреса.

exception13 ★★★★★
()
Последнее исправление: exception13 (всего исправлений: 1)
Ответ на: комментарий от exception13

На ibm xt вобще было две микрухи. 8237А давал только 16 бит адреса, старшие биты хранились в физически отдельной микросхеме.

И есть мнение, что на 8086/286 невозможно было с помощью DMA делать память-память, код просто зависал и всё.

mky ★★★★★
()
Ответ на: комментарий от mky

It enables data transfer between memory and the I/O

Еще проще похоже.

Memory-to-memory transfer can be performed. This means data can be transferred from one memory device to another memory device. The channel 0 Current Address register is the source for the data transfer and channel 1 and the transfer terminates when Current Word Count register becomes 0. Channel 0 is used for DRAM refresh on IBM PC compatibles.

Хотя нет.

exception13 ★★★★★
()
Последнее исправление: exception13 (всего исправлений: 2)
Ответ на: комментарий от pfg

представляет собой синтаксический сахар, а нахрена он в аппаратном железе ??

Когда-то старались делать даже асм удобным для кодера. Потом, емнип, оказалось, что разработчики популярных компиляторов типа Watcom все эти строковые инструкции и прочие «высокоуровневые» команды не любят, и на оптимизацию всего этого дела в железе забили. Фишка-то в процессоре так и осталась, но проц куда быстрее работает с обычными mov/shift.

yu-boot ★★★★
()
Ответ на: комментарий от utf8nowhere

Этого товарища Нефёд стебал, но после бутылки водки начинает казаться что он про fpga нового поколения, типа переключается так же быстро как оперативка и объём имеет сопоставимый.

А то, что будет продавать DDR8 - это примитивные процессоры на планках памяти

DumLemming ★★
()
Последнее исправление: DumLemming (всего исправлений: 1)
Ответ на: комментарий от futurama

Термин ячейка памяти возник раньше, чем байт.

то что делать если надо переслать меньше?

Использовать соответствующую команду (если процессор поддерживает). Если про x86, то там есть префиксы размера операнда, то есть пересылка 1 байта и 8 байт это как бы разные машинные инструкции, но этим заморачивается ассемблер, транслирующий мнемоники команд в двоичный код.

А если пересыка только по 8 байт, то пересылать 8 байт и в регистре битовыми операциями менять один байт...

mky ★★★★★
()
Ответ на: комментарий от exception13

В вашей цитате скромно умалчивают, что у DMA0 и DMA1 был общий page register, тот самый, который формировал старшие биты адреса. То есть даже в теории memory-memory работал только в пределах 64 кбайт. Допустим, нельзя было видеопамять в ОЗУ (первые 640 кбайт) скопировать.

Про то, что код, копирующий память dma0->dma1, не работал/зависал я читал и слышал от старшего поколения, сам не проверял. Тогда навыков не хватало, а сейчас нет того железа.

То есть по документации можно, а по факту не работало. Речь шла о IBM PC/XT «жёлтой» сборки, может на оригинальном и работало. Говорят, что позже работало, допустим на материнках с i80486, где DMA контроллер уже в чипсете и по факту другой, хотя по регистрам как-бы совместимый.

Но для 486 это уже не актуально, он же обычно работал в защищённом режиме, с трансляцией адресов. DMA ведь не знает про всякие MMU, TLB и пр.

mky ★★★★★
()