IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> VAX 4000-600A: 8. Ассемблер
SuperMax
сообщение 23.5.2015, 19:10
Сообщение #1


Администратор
*****

Группа: Root Admin
Сообщений: 5 863
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



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

Я постараюсь кратко описать технические характеристики и особенности архитектуры

1. Регистры
в процессоре VAX-11 16 регистров общего назначения
последние 4 имеют специализацию
R12 = AP - указатель аргументов
R13 = FP - Указатель кадра
R14 = SP - Указатель стека
R15 = PC - Программный счетчик

2. Типы
цельночисленные
B - Байт (8 bit)
W - Слово (16 bit)
L - Длинное слово (32bit)
Q - Тетраслово(64bit)
O - Октаслово (128bit)

P - упакованное десятичное число (этот тип обрабатывают не все команды)

с плавающей точкой
F - одинарная точность (32bit)
D - двойная точность (64bit)
G - тип G (64bit) /отличается от D меньшей длиной мантиссы/
H - тип H (128bit) /112bit мантисса, 15 bit порядок/

прочие
C - символьная строка
V - двоичное поле переменной длины


3. Команды
так как прародителем является PDP-11 то прослеживается некоторое сходство, но явно с большим размахом:

Пересылка
MOVx откуда, куда
x это тип данных (cм типы)
пример MOVD 10(R1),(R11)+

Умножение
MULx2 операнд1, операнд2 результат в операнд2
MULx3 операнд1, операнд2, результат
2 и 3 это количество операндов
те можно
MULQ3 (R1)+,(R2)+,(R3)+
это пример кусочка пакетного перемножения, в регистрах адреса в памяти операндов

Инструкция для работы с двумерными массивами (в принципе ее можно использовать и для многомерных массивов)
INDEX sub,low,high,size,ixin,ixout
задача инструкции облегчить доступ к элементам массива

Преобразование символьного кода в десятичный упакованный
CVTSP число цифр без учета знака, адрес цепочки, число цифр, адрес результата
те на входе у нас символьная строка кодов ASCII - на выходе число!
и не надо никаких функций преобразования строки в число!


управление циклами
SOBGTR x,адрес //вычесть 1, перейти если больше 0
SOBGEQ х,aдрес //вычесть 1, перейти если больше или равно 0

преобразование типов
CVTxy
xy - типы данных
всего 40 комбинаций

переходы
появились модификации, где смещение - слово
тк в PDP-11 приходилось вставлять JMPы после условий в дальних переходах

Из экзотических команд есть
POLYF и POLY - вычисление полинома

Команда MOVAx позволяет получить адрес объекта
пример
ABC: .BLKL 30 ; массив элементов
...
MOVAL ABC,R0 ; указатель адреса в R0
этой команды не хватало в PDP-11 для полностью перемещаемых программ
и приходилось извращаться конструкцией
MOV PC,@#OFFSET ; сохраним начальный адрес
SUB #1002,@#OFFSET ; сразу вычтем адрес компиляции и смещение при запуске
затем
; MOV #TNAM01,R1 ; метка скомпилированная при начальном адресе =1000
; ADD @#OFFSET,R1 ; добавим реальное смещение - в итоге в R1
; ; получим реальный адрес независимый от запуска программы

4 Методы адресации

в начале перечислим 12 методов адресации знакомых нам по PDP-11

1.Регистровый режим Rn
пример MOVL2 R1,R10 переслать R1 в R10

2.Непосредственный режим #n
пример МОVL2 #154,R8 переслать константу 154 в R8

3. Регистровый косвенный режим (Rn)
пример MOVL2 (R0),R3 переслать данные по адресу в R0 в регистр R3

4. Автоинкременный режим (Rn)+
пример MOVL2 (R0)+,R3 переслать данные по адресу в R0 в регистр R3
после выполнения значение R0 будет увеличено на длину операнда в байтах, в данном случае на 4

5. Автодекрементный режим -(Rn)
пример MOVL2 -(R0),R3 переслать данные по адресу в R0 в регистр R3
до выполнения пересылки, значение R0 будет уменьшено на длину операнда в байтах, в данном случае на 4

6. Относительный A
пример
MOVL2 2500,R1 переслать значение ячейки 2500 в регистр R1
адрес 2500 относительный

7. Косвенный @A

8. Абсолютный @#A
MOVL2 @#2500,R1 переслать значение ячейки 2500 в регистр R1
отличие от относительного - адрес 2500 будет всегда 2500 вне зависимости от адреса выполнения

9. Косвенная со смещением D(Rn)
Содержимое Rn суммируется с D. Получаемая сумма используется как адрес адреса операнда

10. Косвенный c автоинкрементом @(Rn)+
Содержимое Rn используется как адрес адреса операнда, а затем увеличивается

11. Косвенный c автодекрементом @-(Rn)
Содержимое Rn уменьшается, а затем новое содержимое используется как адрес адреса операнда

12. Косвенный со смещением @D(Rn)
Содержимое Rn суммируется с D. Получаемая сумма используется как адрес адреса операнда


Новые режимы адресации, которые появились в VAX-11
13. Относительный - индексный A[Rn]
пример
CLRL 10[R0]
14. Относительный индексный, автоинкрементный регистровый (Rn)+[Rm]
пример
CLRL (R2)+[R0]
значение в регистре R0 умножается на 4 (оперируем 32х битным числом в котором 4 байта)
складывается со значением адреса в регистре R2, после чего производится очистка ячейки расположенной по вычисленному адресу
15. Относительный индексный, автодекрементный регистровый -(Rn)[Rm]
16. Относительный индексный, регистровый (Rn)[Rm]
17. Абсолютная с индексированием @#A[Rn]
18. Относительный косвенный с индексированием @A[Rn]
19. Адресация со смещением и индексированием A(Rn)[Rm]
20. Косвенная со смещением, автоинкрементом и индексированием @(Rn)+[Rm]
21. Косвенная со смещением, автодекрементом и индексированием @-(Rn)[Rm]
22. Косвенная со смещением и индексированием @A(Rn)[Rm]

Хочу обратить внимание на особенность индексных типов адресации, они удобны тем что позволяют работать напрямую с массивами, за счет умножения индекса на размерность данных.


В VAX-11 реализовали все мыслимые варианты адресации и можно считать VAX-11 самым "CISC" процессором созданным за всю историю вычислительной техники человечества





--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 11.12.2019, 15:43