Лабораторная работа VAX5 Преобразование форматов данных Цель работы: преобразование чисел из целочисленных форматов в форматы с плавающей запятой и обратное преобразование из форматов с плавающей запятой в целочисленные форматы. Методические указания Форматы целых чисел и чисел с плавающей запятой подробно описаны в файле text2.doc. Варианты индивидуальных заданий приведены в табл.1. Таблица 1 Номер Варианта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Входной формат Выходной формат W B F D D B L F G G L L F D W W F D W B W G F L B L D G L L D G Пример 1. Составить программу перевода числа из формата B в формат F. Схема алгоритма преобразования представлена на рис.1. Пусть A – входное число, B - выходное число. Сначала необходимо определить знак числа A. Если число A отрицательное, то выполняется перевод числа в прямой код, т.е. определяется модуль числа, и в старший разряд числа В записывается 1. Далее выполняется нормализация числа A, и определяется истинный порядок числа A. Смещенный порядок образуется из истинного путем прибавления числа 128 и записывается в разряды 30 – 23 числа B. И, наконец, из мантиссы убирается скрытый бит и мантисса записывается в разряды 22 – 0 числа B. Текст программы в мнемонических и машинных кодах представлен в табл.2, а карта распределения памяти – в табл.3. НАЧАЛО e=8 B=0 Ввод A да A=0? нет да A>0? нет A = -A B = 0x80000000 A&0x80 = 1 ? да нет e=e-1 A = A << 1 e = e + 128 e = e << 23 B=Bve A = A & 0x7F A = A << 16 B=BvA Вывод B КОНЕЦ Рис.1 Таблица 2 Текст программы перевода числа из формата B в формат F Адрес 00 02 04 06 09 0C LOOP: 0F 11 15 17 19 M2: 1C 20 23 26 2A 2D Шестн.е.код 51 95 29 13 06 14 51 51 8E 55 54 с8 52 51 93 08 12 51 51 01 78 50 97 F3 11 50 52 82 50 50 17 78 55 50 C8 51 52 8A 51 51 10 78 55 51 С8 00 Мнемон.код TSTB R1 BEQ END BGTR LOOP MNEGB R1,R1 BISB2 R4,R5 BITB R1,R2 BNE M2 ASHL #1, R1, R1 DECB R0 BR LOOP ADDB2 R2,R0 ASHL #23, R0, R0 BISL2 R0,R5 BISB2 R2,R1 ASHL #16, R1, R1 BISL2 R1,R5 HALT Комментарий Проверка R1 Перейти, если R1 = 0 Перейти, если R1 > 0 Перевод числа в прямой код R5 = R5 | R4 (установка знака) R1 & 0x80 (проверка разряда) Перейти, если разряд равен 1 R1 = R1 << 1 (следующий разряд) R0 = R0 – 1 Переход на след. Итерацию R0 = R0 + 128 (смещ. порядок) R0 = R0 << 23 (уст. Порядка) R5 = R5 | R0 R1 = R1 & 0x7F (скрытый бит) R1 = R1 << 16 (уст. Мантиссы) R5 = R5 | R1 Останов Таблица 3 Карта распределения памяти Объект Место размещения A R1 B R5 E R0 Константа 128 R2 Константа R4 0x80000000 Значение Комментарий 0x00000000 0x00000008 0x00000080 0x80000000 Входное число в формате B Выходное число в формате F Порядок числа Число 128 Для установки знакового разряда числа в формате F Программный код 0x000000000x0000002D Перевод числа -1 из формата B в формат F представлен на рис.2. 1 1111111 Формат B Определение модуля числа 00000001 Определение истинного порядка числа 0,1 * 21 Определение смещенного порядка числа 10000001 Определение мантиссы числа 1000 0000 0000 0000 0000 0000 Запись в формат 1 10000001 000 0000 0000 0000 0000 0000 Формат F Рис.2 Пример 2. Составить программу перевода числа из формата F в формат B. Схема алгоритма преобразования представлена на рис.3. Пусть B – входное число, A - выходное число. Сначала необходимо извлечь из формата числа B мантиссу (разряды 22 - 0), и добавить к ней скрытый бит. Далее извлекается смещенный порядок числа (разряды 30 - 23). Истинный порядок получается из смещенного вычитанием величины смещения 128. После этого мантисса числа приводится к формату байта (удаляются младшие 16 бит). Выполняется денормализация мантиссы согласно величине порядка. Полученная величина (модуль числа) переводится в дополнительный код, если число B отрицательное (разряд 31). Текст программы в мнемонических и машинных кодах представлен в табл.4, а карта распределения памяти – в табл.5. . НАЧАЛО A=0 Ввод B B=0? да нет A = B & 0x7FFFFF A = A v 0x800000 e = B >> 23 e = e & 0xFF e = e - 128 A = A >> 16 e=8–e A = A >> e B< 0? нет да A=-A Вывод A КОНЕЦ Рис.3 Таблица 4 Адрес 00 03 05 08 0B 0E 13 17 1A 1D 22 26 28 2A 2D END: Шестн.код 54 55 D0 28 13 53 55 D0 54 56 CA 54 50 C8 53 53 E9 8F 78 53 57 CA 53 80 8F 82 53 08 82 54 54 F0 8F 78 54 54 52 78 55 D5 03 14 54 54 8E 00 Мнемон.код MOVL R5,R4 BEQ END MOVL R5,R3 BICL2 R6,R4 BISL2 R0,R4 ASHL #-23,R3,R3 BICL2 R7,R3 SUBB2 #128,R3 SUBB2 #8,R3 ASHL #-16,R4,R4 ASHL R3,R4,R4 TSTL R5 BGTR END MNEGB R4,R4 HALT Комментарий R4 = R5 Перейти, если R5 = 0 R3 = R5 R4 = R4 & 0x7FFFFF R4 = R4 v 0x800000 R3 = R3 >> 23 R3 = R3 & 0x000000FF R3 = R3 – 128 R3 = R3 - 8 R4 = R4 >> 16 R4 = R4 >> R3 Проверка R5 Перейти, если R5 >0 Перевод числа в дополнит. Код Останов Таблица 5 Карта распределения памяти Объект Место размещения R5 R4 R0 B A Константа 0x00800000 Константа R6 0xFF800000 Константа R7 0xFFFFFF00 Программный код Значение Комментарий 0x00000000 0x00800000 Входное число в формате F Выходное число в формате B Для установки скрытого бита Для извлечения разрядов мантиссы 0xFFFFFF00 Для извлечения разрядов порядка 0x000000000x0000002D 0xFF800000 Перевод числа -1 из формата F в формат B представлен на рис.4. 1 10000001 000 0000 0000 0000 0000 0000 Формат F Извлечение мантиссы числа и добавление скрытого бита 1000 0000 0000 0000 0000 0000 Извлечение смещенного порядка числа Мантисса в формате байта 10000000 10000001 Определение истинного Нормализованное порядка числа (смещенный представление числа порядок - 128) 00000001 0,1 * 21 Запись в формат 1 Рис.4 1111111 Формат B Содержание отчета 1. Титульный лист. 2. Текст задания. 3. Схема алгоритма программы. 4. Текст программы в мнемонических и машинных кодах. 5. Карта распределения памяти под команды и данные. 6. Таблица трассировки программы.