игра брюс 2048
Главная / Программирование / Основы программирования - обучения основам / Тест 7

Основы программирования - обучения основам - тест 7

Упражнение 1:
Номер 1
Пусть регистры R1 и R2 содержат два целых числа x
и y. Указать, что будет содержать регистр R0 после выполнения
следующего фрагмента кода на RTL (знаком конъюнкции & обозначена
операция побитового логического умножения):

    R0 := 1;
L1:
    CC0 := R2 - 0;    // сравнить R2 с нулем
    if (eq) goto L2;  // переход, если равно
    CC0 := R2 & 1;    // проверить младший бит R2
    if (eq) goto L3;  // переход, если ноль
    R2 := R2 - 1;
    R0 := R0 * R1;
    goto L4;
L3:
    R2 := R2 / 2;
    R1 := R1 * R1;
L4:
    goto L1;
L2:


Ответ:

 (1) Произведение x y.  

 (2) Степень xy.  


Номер 2
Пусть регистры R1 и R2 содержат два целых числа x
и y. Указать, что будет содержать регистр R0 после выполнения
следующего фрагмента кода на RTL (знаком конъюнкции & обозначена
операция побитового логического умножения):

    R0 := 0;
L1:
    CC0 := R2 - 0;    // сравнить R2 с нулем
    if (eq) goto L2;  // переход, если равно
    CC0 := R2 & 1;    // проверить младший бит R2
    if (eq) goto L3;  // переход, если ноль
    R2 := R2 - 1;
    R0 := R0 + R1;
    goto L4;
L3:
    R2 := R2 / 2;
    R1 := R1 * 2;
L4:
    goto L1;
L2:


Ответ:

 (1) Произведение x y.  

 (2) Степень xy.  


Номер 3
Пусть регистр R1 содержит целое число n > 0.
Указать, что будет содержать регистр R0 после выполнения
следующего фрагмента кода на RTL:

    R0 := 1;
    R2 := 4;
L1:
    CC0 := R2 - R1;   // сравнить R2 c R1
    if (gt) goto L2;  // переход, если больше
    R0 := R0 + 1;
    R2 := R2 + R0;
    R2 := R2 + R0;
    R2 := R2 + 1;
    goto L1;
L2:


Ответ:

 (1) Целую часть от n / 2;  

 (2) Целую часть квадратного корня из n.  

 (3) Целую часть от log2 n.  


Упражнение 2:
Номер 1
Пусть регистр EBX содержит адрес массива целых
чисел, регистр ECX — количество элементов массива.
Указать, что будет содержать регистр EAX
в результате выполнения следующего фрагмента кода
на Ассемблере "Masm" для процессора Intel 80x86:

   mov  EAX, 2147483647 ; EAX := плюс бесконечность
L1:                ; метка начала цикла
   cmp  ECX, 0     ;  сравнить ECX с нулем
   jle  L2         ;  переход, если меньше или равно
   mov  EDX, [EBX] ;  EDX := число с адресом EBX
   cmp  EDX, EAX   ;  сравнить EDX с EAX
   jge  L3         ;  переход, если больше или равно
   mov  EAX, EDX   ;  EAX := EDX
L3:                ;
   add  EBX, 4     ;  EBX := EBX+4
   dec  ECX        ;  уменьшить ECX
   jmp  L1         ;  переход на метку L1
L2:                ; метка конца цикла


Ответ:

 (1) Максимальный элемент массива.  

 (2) Индекс максимального элемента массива.  

 (3) Минимальный элемент массива.  

 (4) Индекс минимального элемента массива.  


Номер 2
Пусть регистр EBX содержит адрес массива целых
чисел, регистр ECX — количество элементов массива.
Указать, что будет содержать регистр EAX
в результате выполнения следующего фрагмента кода
на Ассемблере "Masm" для процессора Intel 80x86:

   mov  ESI, 0     ; ESI := 0
   mov  EDI, -2147483648 ; EDI := минус бесконечность
L1:                ; метка начала цикла
   cmp  ESI, ECX   ;  сравнить ESI с ECX
   jge  L2         ;  переход, если больше или равно
   mov  EDX, [EBX] ;  EDX := число с адресом EBX
   cmp  EDX, EDI   ;  сравнить EDX с EDI
   jle  L3         ;  переход, если меньше или равно
   mov  EDI, EDX
   mov  EAX, ESI   ;  EAX := ESI
L3:                ;
   add  EBX, 4     ;  EBX := EBX+4
   inc  ESI        ;  увеличить ESI
   jmp  L1         ;  переход на метку L1
L2:                ; метка конца цикла


Ответ:

 (1) максимальный элемент массива 

 (2) индекс максимального элемента массива 

 (3) минимальный элемент массива 

 (4) индекс минимального элемента массива 


Номер 3
Пусть регистр EBX содержит адрес массива целых
чисел, регистр ECX — количество элементов массива.
Указать, что будет содержать регистр EAX
в результате выполнения следующего фрагмента кода
на Ассемблере "Masm" для процессора Intel 80x86:

   mov  EAX, 0     ; EAX := 0
L1:                ; метка начала цикла
   cmp  EAX, ECX   ;  сравнить EAX с ECX
   jge  L2         ;  переход, если больше или равно
   mov  EDX, [EBX] ;  EDX := число с адресом EBX
   cmp  EDX, 0     ;  сравнить EDX с нулем
   je   L2         ;  переход, если равно
   add  EBX, 4     ;  EBX := EBX+4
   inc  EAX        ;  увеличить EAX
   jmp  L1         ;  переход на метку L1
L2:                ; метка конца цикла


Ответ:

 (1) Число нулевых элементов массива.  

 (2) Индекс первого нулевого элемента массива или длину массива, если нулевых элементов нет.  

 (3) Индекс последнего нулевого элемента массива или длину массива, если нулевых элементов нет.  


Упражнение 3:
Номер 1
Локальные переменные функции языка Си адресуются
относительно регистра FP (Frame Pointer — указатель
кадра). Что содержится в ячейке памяти, адрес которой
записан в регистре FP, в процессе выполнения тела
функции?

Ответ:

 (1) Первая локальная переменная, описанная внутри функции.  

 (2) Адрес возврата в вызывающую функцию.  

 (3) Значение, которое содержалось в FP перед вызовом функции.  


Номер 2
Функция языка Си имеет прототип

    int f(int x, int y);

(т.е. имеет два целочисленных аргумента и
возвращает целочисленное значение).
Локальные переменные и аргументы функции
адресуются относительно регистра FP, т.е. их адреса
равны сумме содержимого FP и константы, задающей смещение.
Чему равен адрес аргумента y функции?

Ответ:

 (1) Адрес y равен FP+4.  

 (2) Адрес y равен FP+8.  

 (3) Адрес y равен FP+12.  

 (4) Адрес y равен FP-4.  

 (5) Адрес y равен FP-8.  

 (6) Адрес y равен FP-12.  


Номер 3
В функции f языка Си описана одна целочисленная
переменная z:

    int f(int x, int y) {
        int z;
        . . .
    }

Локальные переменные и аргументы функции
адресуются относительно регистра FP, т.е. их адреса
равны сумме содержимого FP и константы, задающей смещение.
Чему равен адрес переменной z?

Ответ:

 (1) Адрес z равен FP.  

 (2) Адрес z равен FP+4.  

 (3) Адрес z равен FP+8.  

 (4) Адрес z равен FP-4.  

 (5) Адрес z равен FP-8.  


Упражнение 4:
Номер 1
Какое прерывание происходит при попытке выполнить
деление на ноль?

Ответ:

 (1) Синхронное.  

 (2) Acинхронное.  


Номер 2
Какое прерывание происходит при нажатии на
клавишу на клавиатуре компьютера?

Ответ:

 (1) Синхронное.  

 (2) Acинхронное.  


Номер 3
Что является причиной асинхронного прерывания?

Ответ:

 (1) Состояние регистров процессора, при котором невозможно выполнить требуемую команду (например, обращение по несуществующему адресу памяти).  

 (2) Специальный сигнал, который передается по шине данных внешним устройством (диском, клавиатурой и т.п.).  


Упражнение 5:
Номер 1
Какой механизм используется для реализации виртуальной
памяти в многозадачных операционных системах?

Ответ:

 (1) Механизм страничной организации памяти.  

 (2) Разделение памяти на сегменты и использование сегментных регистров.  


Номер 2
Что больше в современных архитектурах:
объем физической памяти или объем виртуальной памяти?

Ответ:

 (1) Объем физической памяти.  

 (2) Объем виртуальной памяти.  


Номер 3
Может ли задача использовать объем виртуальной памяти,
который превышает объем физической памяти компьютера?

Ответ:

 (1) Может.  

 (2) Не может.  


Упражнение 6:
Номер 1
Являются ли локальные переменные функции общими
для разных нитей (threads), работающих параллельно
в рамках одного процесса?

Ответ:

 (1) Являются общими.  

 (2) Разные для разных нитей.  


Номер 2
Какие объекты операционной системы
обычно используются для исключения
одновременного доступа к критическим данным
из разных нитей или процессов?

Ответ:

 (1) Семафоры.  

 (2) Мьютексы.  


Номер 3
Что происходит при попытке захвата мьютекса нитью,
если он уже захвачен другой нитью?

Ответ:

 (1) Попытка захвата мьютекса завершается неуспешно с кодом ошибки "Мьютекс уже занят", нить продолжает свою работу.  

 (2) Нить приостанавливается операционной системой до тех пор, пока мьютекс не будет освобожден другой нитью.  




Главная / Программирование / Основы программирования - обучения основам / Тест 7