|
Вопрос # 6 169/ вопрос закрыт / |
|
Здравствуйте, эксперты! Так до конца и не разобрался, для чего все-таки нужны регистры. Имеется цитата:
Регистры нужны для связи процессора с внешним миром. Записать или считать из памяти возможно только с использованием регистров.
А как же вот такая запись: MOV [401850],[401950]? Значит, все таки регистры необязательны при доступе к памяти? Очень рассчитываю на вашу помощь!
 |
Вопрос задал: Phantom (статус: Посетитель)
Вопрос отправлен: 28 мая 2012, 11:30
Состояние вопроса: закрыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Бородеев Илья Вадимович!
Данная конструкция не скомпилируется, так как нет соответствующего кода (не знаю, как на самых распоследних процессорах, но на 486 и младше точно нет). Поэтому данную конструкцию придется делать в два этапа через регистр. Более того, может быть, что некоторые компиляторы смогут скомпилировать этот код, заменив его на push eax MOV [401950], eax MOV eax, [401850] pop eax или что то подобное.
Но у регистров есть существенное преимущество - они очень быстры. На современных процессорах по сравнению с памятью это может быть в 100-200 раз (если кеширование не сработало).
А цитата Цитата:
Регистры нужны для связи процессора с внешним миром. - это немного не о тех регистрах. И регистры eax, ax, sp, ecx и подобные могут быть в этом списке, а могут и не быть. Нужно смотреть по контексту.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 28 мая 2012, 11:52
Оценка за ответ: 5
Комментарий к оценке: То есть разница главным образом в скорости? Можно ли записывать в память данные без занесения адреса(по которому осуществляется запись данных) в регистр?
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 29 мая 2012, 23:55; участников в обсуждении: 5.
|
DNK (статус: Студент), 28 мая 2012, 13:10 [#1]:
Сколько людей процессоров - столько и мнений ассемблеров.
"Digital Networked Knight"
|
|
Вадим К (статус: Академик), 28 мая 2012, 23:04 [#2]:
Цитата:
То есть разница главным образом в скорости?
Нет конечно же. С регистрами процессора можно делать много интересных вещей
Цитата:
Можно ли записывать в память данные без занесения адреса(по которому осуществляется запись данных) в регистр?
Если я правильно помню, то на х86 процессорах либо данные, либо адрес памяти должен быть в регистре (либо оба). Но что бы и то, и другое было задано явно - вроде нельзя.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Толяныч (статус: 4-ый класс), 29 мая 2012, 01:34 [#3]:
Если брать не только РС-совместимые компы, а к примеру СМ-4 ( клон PDP-11 ), то там допускались все операции типа память-память без ограничений. Но при этом операнд загружался в промежуточный недоступный из программы регистр, но для программиста это было не видно - он использовал как команду память-память.
|
|
Phantom (статус: Посетитель), 29 мая 2012, 18:25 [#4]:
значит на X86, чтобы считать данные из одной ячейки памяти в другую, необходимо содержимое одной из них разместить в регистре?
|
|
bugmenot (статус: 3-ий класс), 29 мая 2012, 21:53 [#5]:
Ну, для копирования память-память существует множество способов.
MOV ESI, 401950
MOV EDI, 401850
MOVSD
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Phantom (статус: Посетитель), 29 мая 2012, 23:55 [#6]:
Спасибо, напомнили о существовании индексных регистров
|
4 июня 2012, 11:49: Вопрос закрыт (решение принял DNK): Похоже ликбез окончен
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|