Общая путаница с ассемблером - PullRequest
1 голос
/ 10 апреля 2010

Итак, я взглянул на язык ассемблера x86; Все команды довольно понятны, но: я не вижу ничего, что могло бы вызвать что-то в компьютере, например: доступ к ОЗУ, а не только к регистрам ЦП, чтение с жесткого диска и т. Д.

  • Как вы выходите за рамки вычислений в CPU с ассемблером?

Ответы [ 4 ]

5 голосов
/ 10 апреля 2010

В сборке x86 инструкция MOV используется для получения данных из ОЗУ и помещения их в один из регистров ЦПУ, где вы можете манипулировать ими. Инструкция MOV также может записывать данные обратно в ОЗУ. Чтобы использовать устройства на компьютере, это другая история.

Устройства используют так называемые прерывания, которые представляют собой события, которые запускаются, когда устройство хочет вашего (ЦП) внимания. В вашем коде вы регистрируете свою функцию для обработки прерывания при его срабатывании. Чтобы получить данные на устройство и с него, вы можете использовать инструкции IN и OUT, которые перемещают данные по шине данных. Таким образом, вы можете предоставить устройству инструкции, например: получить данные из секторов жесткого диска от X до Y . Затем жесткий диск раскручивается, извлекает некоторые данные и запускает прерывание. Ваш код, который вы зарегистрировали для этого прерывания, должен обработать его, получить данные и записать их в какое-то подходящее место в ОЗУ. Большинство ЦП и устройств также поддерживают DMA ( Прямой доступ к памяти ), в котором вы указываете только место в ОЗУ, куда устройство должно записывать свои данные, что затем происходит без прерывания работы ЦП. Только когда устройство выполнено, оно вызывает прерывание, и ваш код ассемблера может реагировать соответствующим образом.

2 голосов
/ 10 апреля 2010

Как правило, вы читаете / записываете на устройство с отображенной памятью или используете специальные инструкции ввода / вывода для чтения / записи на порты ввода / вывода. Отображаемое в памяти устройство - это память, которая распределяется между процессором и фактическим оборудованием - доступ к нему заставляет оборудование что-то делать.

1 голос
/ 10 апреля 2010

Вы можете использовать MOV и другие инструкции для доступа к ОЗУ. API-интерфейсы, которые обращаются к диску и т. Д., Зависят от используемой вами ОС - в Linux изучите интерфейс System call . В Windows посмотрите этого урока - просто пропустите вводные материалы.

Еще одна вещь, которую нужно сделать, это вызвать библиотеки C из вашего кода сборки .

Проект, который может вас заинтересовать, представляет собой образовательную ОС, написанную на 16-битном ASM. Он обеспечивает доступ к файловой системе и даже немного больше - MikeOS , хотя следует помнить, что большинство вещей не будут применяться к программам, работающим под современной ОС по ряду причин.

0 голосов
/ 10 апреля 2010

Вы пишете код, который обращается к ОЗУ (mov и другим с операндом памяти) для сопоставленного с памятью ввода-вывода или специального пространства ввода-вывода x86 (in, out).

Искусство знать, что писать / читать с какого адреса и когда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...