Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Assembler
Перезагрузить страницу Ассемблер PDP-11 и VAX
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию Ассемблер PDP-11 и VAX - 11.02.2014, 18:12

Форумчане!
Знаком ли кто-нибудь из вас с ассемблерами для компьютеров PDP-11 и VAX? Заинтересовался системами команд этих вычислительных машин и их языками ассемблера ради расширения кругозора. Везде пишут, что эти процессоры обладали высокой ортогональность машинных команд и большим количеством типов адресации, что делало программирование на ассемблере для этих компьютеров очень удобным. Также источники хвалят сам набор инструкций за удобство, компактность и высокую выразительность.

Приходилось ли кому-либо из вас заниматься низкоуровневым программированием на этих машинах или, может быть, кто-то из вас просто знаком с их архитектурой? Каковы ваши личные ощущения от знакомства с ними? Правду ли пишут популярные источники или же им доверять в этом вопросе особенно не стоит?
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 13.02.2014, 21:27

Приходилось для PDP-11. VAX уже гораздо более накручен, бегло посмотрел, в голову не грузил.
Забавная система, прямо скажем. Изучал в удовольствием.

Особенно в дебри не лазил, арифметика, логика, управление, поэтому про ортогональность ничего не скажу. Но система типов адресации действительно интересна, хоть и не без недостатков.

А хвалят люди обычно то, что им самим ближе.
Why [Programming Language X] Is Unambiguously Better than [Programming Language Y] | Joel Grus
Ответить с цитированием
Пользователь сказал cпасибо:
Matematic (13.02.2014)
  (#3 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 13.02.2014, 22:12

Цитата:
Сообщение от Alexiski Посмотреть сообщение
А хвалят люди обычно то, что им самим ближе.
Why [Programming Language X] Is Unambiguously Better than [Programming Language Y] | Joel Grus
Это вне всякого сомнения так! Особенно умиляют оголтелые дискуссии в Интернете по поводу языков программирования, операционок, процессорных архитектур, стилей и подходов.

Цитата:
Приходилось для PDP-11. VAX уже гораздо более накручен, бегло посмотрел, в голову не грузил.
Забавная система, прямо скажем. Изучал в удовольствием.

Особенно в дебри не лазил, арифметика, логика, управление, поэтому про ортогональность ничего не скажу. Но система типов адресации действительно интересна, хоть и не без недостатков.
1. Приходилось на действующих образцах этих вычислительных машин программировать, которые еще застали, или знакомились уже по книгам и документации?

2. Вот мне любопытно, PDP-11 имел защищенный режим работы с виртуальной памятью и полной изоляцией процессов друг от друга, как это имеет место в современных компьютерах? Или же он работал исключительно в реальном режиме? Вроде бы пишут, что у PDP-11 была уже страничная организация памяти. Означает ли это, что там был protected mode? Или же там деления команд на привилегированные и непривилегированные не было, и все команды процессора, даже системные, были доступны пользовательскому процессу?

Про виды адресаций тоже хотелось бы задать несколько вопросов, если у Вас будет время, конечно...
Ответить с цитированием
  (#4 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 14.02.2014, 13:19

Нет, программировать на ассемблере PDP так и не пришлось, изучал по книгам. СМ, коненчно, видел, за терминалом работал. Но своих программ не писал.

На PDP были разные процессоры, в зависимости от модели набор команд усложнялся. Соответственно, та операционная система, про которую которой я читал, (вот уже не помню, RT11M или RSX, их как минимум две было) поддерживала 4 типа управляющей программы (монитора), от простой однопроцессной до самой сложной с функциями виртуальности.

Про привилегирование команд я точно не помню, но наверняка такой механизм должен быть. В VAX точно была очень развернутая система привилегий. Но из-за сложности я книжку про VAX полистал и забросил.

На самом деле видов адресации как таковых не так и много, но некоторые забавно модифицировались, если в качестве регистра использовать счетчик команд. Например, адресация с автоинкрементом регистра позволяла легко обрабатывать массивы.
А адресация с автоинкрементом регистра по счетчику команд позволяла разместить операнд прямо в машинном коде следом за инструкцией. То есть к моменту выбора операндов CP указывал уже на следующее за командой слово памяти, а автоинкремент позволял пропустить это слово при выполнении потока команд.
Ответить с цитированием
Пользователь сказал cпасибо:
Matematic (14.02.2014)
  (#5 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 15.02.2014, 06:11

Цитата:
Сообщение от Alexiski Посмотреть сообщение
На PDP были разные процессоры, в зависимости от модели набор команд усложнялся. Соответственно, та операционная система, про которую которой я читал, (вот уже не помню, RT11M или RSX, их как минимум две было) поддерживала 4 типа управляющей программы (монитора), от простой однопроцессной до самой сложной с функциями виртуальности.

Про привилегирование команд я точно не помню, но наверняка такой механизм должен быть. В VAX точно была очень развернутая система привилегий. Но из-за сложности я книжку про VAX полистал и забросил.
Ну да, для PDP-11 тогда широкое хождение имели 3 операционные системы: RT-11, RSX-11 и Unix ранних версий вплоть до легендарной Unix 7th Edition. Первые две системы были выпущены самой фирмой DEC, в чем их отличие между собой и зачем DEC одновременно поддерживала две линейки операционных систем, я не знаю. Ну а Unix выпускалась тогда AT&T. Со всем этим знаком понаслышке.

Из Ваших слов я понял, что какое-то подобие защищенного режима PDP-11 имела. Ну а в VAX был уже реализован полноценный защищенный режим с широкими возможностями, управлением виртуальной памятью, имевший 4 уровня привилегий, если верить Википедии.

Любопытно, что столько же колец защиты имел x86, пока в него не добавили еще 2 дополнительных кольца (-1 и -2). Не из VAX'а ли разработчики Intel позаимствовали все эти уровни привилегий или же в Intel эти кольца защиты совсем по-другому определяют права? В общем, тут можно только строить догадки, не зная VAX'а.

Цитата:
А адресация с автоинкрементом регистра по счетчику команд позволяла разместить операнд прямо в машинном коде следом за инструкцией. То есть к моменту выбора операндов CP указывал уже на следующее за командой слово памяти, а автоинкремент позволял пропустить это слово при выполнении потока команд.
CP - это, видимо, расшифровывается как Command Pointer - указатель команд? Правильно? Т. е. это аналог IP (Instruction Pointer) в x86. Верно я Вас понял или это расшифровывается как-то по-другому?

Красивая и интересная возможность, Вы понятно объяснили. Мне понравилась, что бы там ни говорили поборники чистоты стиля в программировании (запустил бы в них во всех гнилым помидором с большим удовольствием )

Цитата:
На самом деле видов адресации как таковых не так и много, но некоторые забавно модифицировались, если в качестве регистра использовать счетчик команд. Например, адресация с автоинкрементом регистра позволяла легко обрабатывать массивы.
У меня вот такие вопросы пока возникли к Вам по прочтении Вашего поста, Alexiski.

1. Сколько примерно инструкций содержала в себе система команд процессора PDP-11? Точное число мне знать совсем не обязательно, тем более что, как Вы говорите, набор команд PDP-11 менялся от модели к модели (видимо, в более поздних моделях просто добавлялись новые команды). Просто скажите мне навскидку их примерное число. Сколько их примерно там было, как Вам кажется?

2. PDP-11 был 16-разрядным компьютером, т. е. максимальным по размеру операндом, с которым он мог работать, было двухбайтовое слово. А была ли в PDP-11 возможность работать с одним байтом по-отдельности? Ну, подобно тому, как в x86 есть регистры AH, AL, BH, BL, CH, CL, DH, DL, и я могу написать, допустим,

asm Код:
MOV AH, BL

или

asm Код:
a DB ?
ADD CH, a

Т. е. в 32-ух-разрядной системе (для простоты возьмем ее) Intel/AMD x86 регистр общего назначения имеет 32 бита, в нем можно выделить младшую 16-разрядную половину (старшая, к сожалению, не доступна), она доступна как отдельный регистр, а эту половину можно разделить еще на две половинки, старшую и младшую, каждая размером в один байт (они тоже предстают перед нами как самостоятельные регистры). Т. е. имеем следующую картину:
EAX, AX, AH, AL.
В случае x86-64 все это, разумеется, будет выглядеть так:
RAX, EAX, AX, AH, AL.

В PDP-11 каждый регистр имел 16 бит. Можно ли в нем было получить по-отдельности доступ к каждому байту?

3. Существовали ли в PDP-11 32-битные операнды, можно ли было в командах манипулировать с ними? Или же 16 бит было пределом для этой машины и с числами больших размеров никакая команда ни при каких обстоятельствах работать не могла? Про программную эмуляцию более длинных чисел я здесь не говорю, сэмулировать программным путем мы можем все что угодно.

4. Позволяли ли команды PDP-11 адресовать один бит и с ним работать на аппаратном уровне? Или работать на уровне команды с битовыми полями? Я знаю, что в некоторых старых компьютерах такая возможность была. Или же ничего подобного в PDP-11 не было, доступ к отдельным битам можно было получить лишь программным путем, применяя операции побитовой логики, сдвига, проверки по маске ко всему регистру?

5. Была ли в процессоре PDP-11 реализована вещественная арифметика? Если да, то она была с плавающей или с фиксированной запятой? Или же ничего подобного там не было, PDP-11 позволял работать лишь с целыми числами. Если все-таки вещественная арифметика там была, какой размер имели вещественные числа (в смысле, сколько бит отводилось на их представление)? Если вещественные числа там все же были, какой узел выполнял операции над ними? Был ли там отдельный сопроцессор, изолированный от основного процессора, подобно старым моделям Intel? Или же блок вычислений с фиксированной или плавающей точкой был составной частью основного процессора, для вещественной арифметики были предусмотрены свои команды и выполнялись они наравне с остальными командами в общем потоке безо всякой их изоляции (в том смысле, что ничего подобного командам ESC и WAIT процессора x86 для организации взаимодействия с сопроцессором в PDP-11 не предусматривалось)? Или же ни в каком виде вещественной арифметики в PDP-11 не существовало, а потому ставить эти вопросы бессмысленно, а при необходимости вся вещественная арифметика в PDP-11 реализовывалась программным путем?

6. Правда ли то, что в PDP-11 была доступна адресация "память - память"? Т. е. оба операнда двухадресной команды могли располагаться в памяти и операция могла производиться без привлечения регистра общего назначения? В x86 такое невозможно, один операнд двухоперандной инструкции должен обязательно быть регистром.

Например, для пересылки двух чисел из одной ячейки памяти в другую в x86 необходим следующий набор инструкций:

asm Код:
MOV AX, b
MOV a, AX

Если моя "теория" верна, то в PDP-11 это можно было сделать всего одной командой:

asm Код:
MOV a, b; это псевдокод, т. к. синтаксиса ассемблера PDP-11 я не знаю

Аналогично для сложения двух целых чисел.
В Intel

asm Код:
MOV BX, b
ADD a, BX

В PDP-11

asm Код:
ADD a, b; псевдокод

Это действительно так, или я здесь ошибаюсь?

7. Правильно я понимаю, что PDP-11 и VAX были двухадресными машинами? Т. е. одна команда могла иметь не более двух операндов? Или же трехоперандные команды также существовали у этого типа процессора? В принципе, двухадресность подразумевает, что в случае выполнения бинарой операции один операнд по окончании операции обязательно будет затерт результатом. Если же унарную операцию выполнять с привлечением двух операндов, а бинарную с привлечением трех, то такого затирания происходить не будет. Как в этом вопросе обстояли дела у PDP-11 и VAX?

8. Какой синтаксис имел ассемблер PDP-11? Был ли это AT&T синтаксис, там где перед каждым именем регистра ставится %? Этот синтаксис сейчас доминирует в GAS (GNU Assembler), причем применяется для всех поддерживаемых GNU процессорных архитектур, но по-моему это верх садомазохистской утонченности . Или же там использовался какой-то свой синтаксис, разработанный DEC?

9. Небольшой вопрос про внутреннюю организацию процессора PDP-11, если, конечно, знаете и приходилось сталкиваться с этим. Имел ли он конвейерную организацию, как все процессоры в наше время? Или же этот процессор был построен без конвейера? Да, я понимаю, что это было очень давно, но тем не менее, конвейер появился (в смысле, был изобретен) где-то в середине 1960-ых годов и уже использовался в лучших процессорах того времени. Лучшие, самые передовые процессоры конца 1960-ых - начала 1970-ых были уже построены как конвейеры и это давало очень большой прирост в производительности. Как с этим обстояли дела в процессорах семейства PDP-11 и VAX?

Извините, пожалуйста, что таким количеством вопросов Вас осыпал. Надеюсь, что каждый из них сам по себе все-таки не сложен. Просто я их задал, чтобы хоть какое-то общее представление об этой архитектуре получить.

Последний раз редактировалось Matematic; 15.02.2014 в 06:18
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 15.02.2014, 09:18

PS
Вот еще вопрос возник, извиняюсь.

10. Имел ли процессор PDP-11 что-то подобное сегментной организации памяти?

Формирование адреса в процессоре x86, как известно, основано на сегментах. Даже в защищенном режиме используются сегментные регистры CS, DS, SS и ES, только они уже содержат не адрес сегмента (по сути дела базы), как в реальном режиме, а селектор, т. е. номер элемента в таблице GDT или LDT. В самой же дескрипторной таблице, в соответствующем ее элементе, хранится адрес сегмента, к которому уже прибавляется адрес (смещение) из команды. Фактически это означает то, что код, глобальные данные и стек имеют разные точки отсчета, разные базы. Именно от этих точек отсчета вычисляются адреса, к этим различным базам, разным для кода, данных и стека, прибавляются смещения, вычисленные в команде. В x68-64 от этого, насколько я знаю, практически ушли.

Интересно, вот в PDP-11 какое-то подобие сегментации есть, пусть даже реализованное в другой форме? Или же ничего подобного там и близко не имеется и модель памяти абсолютно плоская? А код, данные и стек отсчитываются от одного общего начала? Там хоть какой-то один регистр, хранящий базу, общую для кода, данных и стека есть? Т. е. базового регистра, одного на всю программу? Или же и такого регистра, пусть даже системного, там тоже нет в наличии?
Ответить с цитированием
  (#7 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 15.02.2014, 21:14

Еще такой вопрос сейчас всплыл.

11. Требовал ли процессор PDP-11 выравнивания 16-битных слов при их размещении в памяти по границе слова, чтобы каждое слово размещалось по адресу, кратному двум?

В современных RISC-архитектурах, насколько я знаю, выравнивание обязательно. Если адрес операнда не является кратным размеру слова в байтах, происходит процессорная ошибка и прерывание. В процессорах Intel, как 32-ух, так и 64-разрядных, выравнивание не требуется, хотя оно и рекомендуется, так как без него заметно падает скорость выполнения команды. Т. е., насколько я понимаю, в x86 и amd64/EM64T на аппаратном уровне в любом случае доступно лишь слово, расположенное в памяти по адресу, кратному длине слова. Только к таким словам возможен запрос в память. Чтобы получить доступ к невыровненному слову, процессор на самом деле запрашивает два соседних выровненных слова, из них извлекает части нужного невыровненного слова и их склеивает между собой. Все это происходит на аппаратном уровне, этим занимается блок процессора, отвечающий за распаковку и упаковку данных, но необходимость обращаться к двум словам памяти вместо одного и последующая перепаковка слов заметно замедляет работу команды. Тем не менее, на программном уровне все это скрыто, невыровненные слова доступны для команд x86 точно так же, как и выровненные. В RISC, повторюсь, такое невозможно.

А как с этим обстояли дела в PDP-11? Требовал ли он обязательного выравнивания данных или же с невыровненными данными в этом компьютере можно было так же спокойно работать, как и с выровненными, и он был похож в этом отношении на x86?
Ответить с цитированием
  (#8 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 16.02.2014, 21:34

Для начала исправляюсь. Писал по памяти и ошибся - регистр назывался Program Counter (PC).

1.
Десятка два-три. Если выделять разные условные переходы в отдельные команды - чуть больше

2.
Многие команды дополнительно имели байтовую форму. За нее отвечал специальный бит в команде.

3.
Вроде, 32-битных команд не было

4.
Честно говоря, не понял вопроса. Разумеется, вся работа с битами в пределах адресуемого слова.

5.
Про плавающую математику и сопроцессор ничего не знаю. Но это не значит, что её там не было. Математика с фиксированной точкой реализуется обычно программным путем на основе целочисленной.

6.
Да, правильно. Вроде, ограничений на размещение обоих операндов в памяти нет.

7.
Двухадресная система в чистом виде. С обязательным затиранием одного операнда.

8.
Регистры обозначались R0, R1, R2, R3, R4, R5, R6=SP, R7=PC

9.
Про конвейеры PDP ничего не знаю. Но если уже в БЭСМ-6 использовался "водопроводный принцип", почему бы и нет

10.
Сегментная адресация, вроде, присутствовала, (только для старших моделей ?), но, насколько я помню, только на уровне операционной системы. Адресное пространство конкретной задачи было плоским. Хотя, конечно, я могу тут сильно заблуждаться.

11.
Видите ли, на момент разработки PDP концепции единой памяти как сплошного набора байт еще не существовало. И машинное слово как раз и имело смысл минимально адресуемой ячейки памяти. Слово, как правило, содержало одну инструкцию процессора или одно число в каком-либо формате. Причем, размер слова не обязательно был кратен 8 битам.

PDP тут несколько выделялся - его разработчики декларировали сосуществование двух адресных пространств - пространство слов и пространство байт. Причем слова имели только четные адреса. Так что выравнивание подразумевалось просто по умолчанию.

PS. Думаю, эта книга сильно поможет найти ответы на недостаточно освещённые мною вопросы: http://acm.mipt.ru/twiki/pub/Cintro/...mirovanie.djvu
Ответить с цитированием
Пользователь сказал cпасибо:
Matematic (17.02.2014)
  (#9 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 17.02.2014, 04:28

Alexiski, большое спасибо за Ваши ответы. Некоторое представление об этой вычислительной машине у меня теперь сложилось. За книжку отдельное спасибо, очень пригодится, если захочу разобраться с этим компьютером по-настоящему.

По поводу этого
Цитата:
4.
Честно говоря, не понял вопроса. Разумеется, вся работа с битами в пределах адресуемого слова.
Я давно с этим сталкивался, могу уже многое забыть или перепутать. Но мне кажется, что в некоторых старых ЭВМ была возможность адресовать бит непосредственно. Делалось это так, если я правильно помню. Как Вы правильно сказали, минимально адресуемой ячейкой памяти в таких машинах было слово. Оно часто не было кратно 8 бит, очень популярной в то время была длина машинного слова в 36 бит. Не помню уж точно, делилось ли оно на 4 байта по 9 бит или на 6 байт по 6 бит. Допустим даже, что имело место первое.

Адресовались в таких машинах именно слова, адреса двух соседних слов различались на 1. Но в формате машинной команды существовало несколько бит признаков, которые дополнительно задавали возможность доступа к байтам внутри слова и битам внутри конкретно выбранного байта. Как я понимаю, по установленным битам признаков определялось, с чем будет работать команда: со всем словом целиком, с отдельным его байтом или даже с каким-то битом внутри байта. Далее в определенном месте команды располагалось несколько бит, которые определяли номер байта, к которому будет произведен доступ (в случае, если предполагался доступ к отдельному байту) и номер бита внутри байта (если предполагался доступ к отдельному биту). В этом случае арифметическая или логическая операция выполнялась не над всем словом целиком, а над отдельным его байтом или битом.

Кажется, такой возможностью обладали некоторые ЭВМ модельного ряда от М-20 до БЭСМ-6. В их число входило еще несколько моделей компьютеров военного назначения, некоторые из которых были уже полноценными SMP-системами с несколькими процессорами, имеющими доступ к общей памяти (правда, ничего подобного защищенному режиму там вроде не было: никакой защиты памяти, никаких команд с различными уровнями привилегий).

Все эти машины были одноадресными, со страшно неудобной и очень некрасивой системой команд, с программно доступными регистрами, каждый из которых нес свою функцию и в различных командах использовались и были доступны различные регистры. Разумеется, ни о какой симметрии команд и регистров там не шло и речи. Тем не менее, манипулирование битом напрямую вроде там было реализовано.

В современных компьютерах это невозможно: слово и байт в них доступны как единое целое, операция производится над всеми его битами сразу. Реализовать доступ к отдельно взятому биту можно чисто программным путем, используя побитовые операции и сдвиги. Не хочется приводить пример на ассемблере x86, думаю Вы меня отлично поняли. Можно таким способом в принципе выполнить операцию не над одним битом, а над группой бит байта или слова, сформировав предварительно битовую маску, также чисто программным путем. На аппаратном же уровне такой побитовый доступ в современных процессорах невозможен - нет команд, позволяющих это сделать непосредственно.

Я и хотел спросить, а вдруг у PDP-11 такая возможность доступа к отдельному биту была реализована, как это было, кажется, у некоторых старых компьютеров.

Цитата:
11.
Видите ли, на момент разработки PDP концепции единой памяти как сплошного набора байт еще не существовало. И машинное слово как раз и имело смысл минимально адресуемой ячейки памяти. Слово, как правило, содержало одну инструкцию процессора или одно число в каком-либо формате. Причем, размер слова не обязательно был кратен 8 битам.
Не берусь утверждать наверняка, так как не владею вопросом, но кажется мне, что у IBM/360 и IBM/370 и, соответственно, их советских клонов ЕС такая воможность все-таки была. Там, если мне не изменяет память, был байт (8 бит), полуслово (16 бит), слово (32 бит) и у больших машин этого модельного ряда двойное слово (64 бит). Эти типы данных видимо там адресовались и использовались. Т. е. ситуация очень напоминала современный процессор x86-64. По сути дела Intel позднее использовал ту же модель типов данных. Вроде бы первые модели IBM/360 появились чуть раньше PDP-11. Так что наверное все-таки адресация байта, а не слова была известна и использовалась еще до выхода PDP-11. А что касается более старых вычислительных машин, до наступления эры IBM/360, то наверное Вы правы: нумеровались в памяти обычно не байты, а слова. Но тут у меня слишком мало знаний, чтобы утверждать что-то наверняка.
Ответить с цитированием
  (#10 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 17.02.2014, 04:42

Да, еще небольшое дополнение к вопросу о доступе к байту и биту в пределах слова.

За доступ к байту или биту внутри слова отвечал специальный блок упаковки данных с достаточно замысловатой конструкцией. По сути дела он содержал 2 регистра, входной и выходной, в котором слово делилось на подрегистры, и набор коммутаторов, которые позволяли пересылать данные из входного регистра в выходной, меняя их изначальный порядок. В общем, обычный перепаковщик. Он-то позволял распаковать слово, выделить из него нужную часть, которая использовалась в качестве исходного операнда, или, напротив, полученный в ходе работы команды результат запаковать в слово (в нужную его часть) и отправить в оперативную память.

Точно принцип работы этой штуки я не помню, но что-то такое там было.

Последний раз редактировалось Matematic; 17.02.2014 в 04:46
Ответить с цитированием
  (#11 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 17.02.2014, 10:54

Цитата:
Математика с фиксированной точкой реализуется обычно программным путем на основе целочисленной.
Это действительно так, и в процессорах от Intel ее, насколько мне известно, так и реализуют, поскольку на аппаратном уровне ее там нет. Операции сложения и вычитания с фиксированной точкой ничем не отличаются от сложения и вычитания двух целых чисел. А для выполнения операций умножения и деления нужно после соответствующей целочисленной операции еще выполнить дополнительный сдвиг вправо или влево. Хотя на фиг она нужна, эта арифметика с фиксированной точкой, если реализована арифметика с плавающей точкой. Пользы от нее все равно никакой.

А вот в некоторых старых машинах она вроде как была реализована на аппаратном уровне и программной ее эмуляции (в форме сдвигов или еще чего) там не требовалось. Потом вроде как от нее стали отказываться. А вот что было в PDP-11 и была ли там вообще какая-то вещественная арифметика или только целые числа - мне пока непонятно.
Ответить с цитированием
  (#12 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 18.02.2014, 03:01

Alexiski!
А не могли бы Вы мне сейчас перечислить все основные виды адресации, которые присутствовали в процессоре PDP-11? Просто их все назвать и по поводу каждого вида адресации сделать небольшой комментарий - максимум в одну - две строчки. Более детально и подробно не надо, для этого уже есть книжки.
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 18.02.2014, 15:38

Собственно, на тип адресации отводится 3 бита, один из которых включает косвенную адресацию. Соответственно, типов адресации всего 4 плюс для каждого из них есть косвенная модификация. Эти 4 типа: регистровая, автоинкрементная, автодекрементная и индексная.

Кроме того, при использовании специальных регистров те же типы адресации дают дополнительные возможности. Так, я у же писал, автоинкремент с PC дает непосредственный операнд в памяти. А автоинкремент/автодекремент c SP - это фактически pop/push
Ответить с цитированием
  (#14 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 18.02.2014, 20:34

Цитата:
Сообщение от Alexiski Посмотреть сообщение
Собственно, на тип адресации отводится 3 бита, один из которых включает косвенную адресацию. Соответственно, типов адресации всего 4 плюс для каждого из них есть косвенная модификация. Эти 4 типа: регистровая, автоинкрементная, автодекрементная и индексная.

Кроме того, при использовании специальных регистров те же типы адресации дают дополнительные возможности. Так, я у же писал, автоинкремент с PC дает непосредственный операнд в памяти. А автоинкремент/автодекремент c SP - это фактически pop/push

1.
Цитата:
Сообщение от Alexiski Посмотреть сообщение
Эти 4 типа: регистровая, автоинкрементная, автодекрементная и индексная.
Кроме того, при использовании специальных регистров те же типы адресации дают дополнительные возможности. Так, я у же писал, автоинкремент с PC дает непосредственный операнд в памяти.
Т. е. что же получается? Непосредственный операнд там в команде невозможен? Его можно лишь симитировать при помощи автоинкремента с PC?

2. Как я понимаю, автоинкрементная и автодекрементная адресация - это вариант индексной адресации. Т. е. это индексная адресация, но по окончании выполнения команды регистр, хранящий индекс, подвергается модификации - увеличивается на размер слова или уменьшается. Или я неправильно понял?

3. С регистровой адресацией вроде все понятно: в качестве операнда указывается номер регистра, число, над которым выполняется операция, хранится в регистре.

А вот как там с прямой адресацией? Т. е. с адресацией, при которой в качестве операнда в команде указывается адрес ячейки? И в вычислениях участвует переменная, взятая из памяти по этому адресу? Такой адресации там нет что ли?
Ответить с цитированием
  (#15 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 18.02.2014, 23:41

Еще после некоторых раздумий такой вопрос возник, Alexiski.

4.
Цитата:
Сообщение от Alexiski Посмотреть сообщение
Собственно, на тип адресации отводится 3 бита, один из которых включает косвенную адресацию. Соответственно, типов адресации всего 4 плюс для каждого из них есть косвенная модификация. Эти 4 типа: регистровая, автоинкрементная, автодекрементная и индексная.
Типов адресации всего четыре. При этом, если я правильно понял (правильно ли?), автоинкрементная и автодекрементная адресация - это лишь разновидность индексной адресации. Т. е. типов адресации всего 2: регистровая и индексная, а последняя имеет 2 дополнительных модификации (с автоинкрементом и автодекрементом).

При этом все эти четыре типа адресации (или две, если хотите) имеют косвенную модификацию, за которую отвечает специальный бит в формате команды. Как модифицировать регистровую адресацию, я понимаю. Это будет косвенная регистровая адресация, когда в регистре хранится не сам операнд, а его адрес, по которому операнд берется из оперативной памяти.

Но вот как быть с индексной адресацией? Ведь индексная адресация (с автоинкрементом/декрементом или без) - это по сути дела косвенная регистровая адресация (ее разновидность). Т. е. в индексном регистре хранится адрес слова в памяти, к которому производится обращение. Как применить к этому типу адресации косвенную модификацию, когда она уже и так косвенная? Если только это будет двойная косвенная адресация. Что-то наподобие такого варианта. В регистре, используемом в качестве индексатора, хранится адрес некоторого слова в памяти. А в том слове, в свою очередь, хранится адрес другого слова. Над последним словом как раз и выполняется операция команды.

Но это все мои придумки. А как там обстояло дело в действительности?

Последний раз редактировалось Matematic; 18.02.2014 в 23:47
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблер тасм e0326 Задания за деньги 2 16.11.2013 23:32
книга по ассемблер для чайника abzdoliz Вопросы начинающих программистов 4 25.02.2013 13:50
2 задачки. Паскаль и Ассемблер alexddropp Задания за деньги 2 27.10.2012 09:59
Ассемблер - Контролер Прерываний katia2011 Assembler 0 27.02.2011 14:35
Преобразование Гильберта на tms (Ассемблер) Minority Задания за деньги 0 29.11.2010 13:43
Ассемблер AdminButchery Pascal 6 03.04.2008 14:16
Требуется программист (Си или Ассемблер). 15000$ Dirger Работа 0 06.12.2007 17:42
Ассемблер, 2 задачи Morpy Задания за деньги 4 19.12.2006 23:16
Ассемблер и С++ Zekson82 Задания за деньги 1 12.06.2006 03:38
Транслятор с фортрана на ассемблер bam Assembler 0 23.05.2006 22:56
Программист с++/с/вин ассемблер на удаленную работу skaramanga Работа 0 26.05.2005 19:29
Ассемблер в Си как организовать akvilon С/С++ 5 30.04.2005 22:06



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов