Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 169

Раздел: Ассемблер
/ вопрос закрыт /

Здравствуйте, эксперты! Так до конца и не разобрался, для чего все-таки нужны регистры. Имеется цитата:
Регистры нужны для связи процессора с внешним миром. Записать или считать из памяти возможно только с использованием регистров.
А как же вот такая запись: MOV [401850],[401950]? Значит, все таки регистры необязательны при доступе к памяти? Очень рассчитываю на вашу помощь!

Phantom Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: 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

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

Phantom (статус: Посетитель), 29 мая 2012, 18:25 [#4]:

значит на X86, чтобы считать данные из одной ячейки памяти в другую, необходимо содержимое одной из них разместить в регистре?
bugmenot

bugmenot (статус: 3-ий класс), 29 мая 2012, 21:53 [#5]:

Ну, для копирования память-память существует множество способов.

MOV ESI, 401950
MOV EDI, 401850
MOVSD
виконання програми розпочинається з того самого мiсця, де призупинилося.

Phantom

Phantom (статус: Посетитель), 29 мая 2012, 23:55 [#6]:

Спасибо, напомнили о существовании индексных регистров:)

4 июня 2012, 11:49: Вопрос закрыт (решение принял DNK): Похоже ликбез окончен

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.