// Работа LAB3 // Шаблон программы // Массивы и способы адресации // Директивы Препроцессора // Включение файлов в которых описаны прототипы ф-ций // с целью сообщения компилятору о типах ф-ций и их аргументах #include #include #include #include // #pragma inline // Подключение встроенного Ассемблера // Объявление переменных int iB=0x1234; int A[90]={0,1,2,3,4,5,6,7,8,9}; // Основная программа - функция // void - она не возвращ значений void main(void) { // Объявление переменных int iA=0x5678; clrscr(); printf ("\n Программа заполнения массива \n"); // Заполняем массив на уровне команд Си for (int i=0; i<10; i++) { // ??????? Вставте команды printf (" \n %d ", A[i]); } getch(); // Заполняем массив из ассемблера asm mov si,0 e2: asm { lea bx,A mov cx,10 mov ax,0 }; e1: asm mov [bx],ax // ???? Выберите способ адресации asm add bx,2 asm loop e1 // ??? Выведите одном массив asm add si,10 // Задается шаг массива asm mov ax,100 asm cmp ax,si asm ja e2 // ??? Выведите двумерный массив for (i=0; i<20; i=i+4) { printf (" \n "); for (int j=0; j<4; j++) { printf (" "); // ???? Вставте команду } } getch(); } // Задания // 1. Напишите две программы заполнения одномерного массива на Си и Асс // выведите на экран значения элементов массива // 2. Считайте массив двумерным. Заполните его четные строки любым числом, // используя разные способы адресации // - косвенно-регистровая адресация // - базово-индексная адресация // Сравните количество команд при двух способах адресации. // 3. Определите место массива в сегменте данных с использов. TD // 4. Напишите программу, которая дает разный результат в разных // моделях памяти.