Главная / Программирование /
Основы программирования - обучения основам / Тест 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)
Нить приостанавливается операционной системой
до тех пор, пока мьютекс не будет освобожден другой нитью.