VAX 4000-600A: 8. Ассемблер |
Здравствуйте, гость ( Вход | Регистрация )
VAX 4000-600A: 8. Ассемблер |
SuperMax |
23.5.2015, 19:10
Сообщение
#1
|
Администратор Группа: Root Admin Сообщений: 6 295 Регистрация: 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" процессором созданным за всю историю вычислительной техники человечества -------------------- Живы будем - Не помрем !
|
Текстовая версия | Сейчас: 27.9.2024, 1:44 |