Главная / Программирование /
Ассемблер в Linux для программистов на C / Тест 7
Ассемблер в Linux для программистов на C - тест 7
Упражнение 1:
Номер 1
Основными элементами архитектуры IA-32 являются:
Ответ:
 (1) регистры 
 (2) стек 
 (3) видеопамять 
 (4) память 
 (5) кеш диска 
Номер 2
Какое утверждения про архитектуру IA-32 верно?
Ответ:
 (1) используются регистры размером 16, 32 и 64 бита 
 (2) поддерживается всеми процессорами Intel, имя которых заканчивается на 86 
 (3) служит для запуска только 32-битных приложений 
 (4) данные из некоторых регистров можно считывать по 8,16 и 32 бита 
Номер 3
Регистры процессора служат для:
Ответ:
 (1) кеширования данных оперативной памяти 
 (2) хранения результатов промежуточных вычислений 
 (3) хранения информации, управляющей работой процессора 
 (4) передачи данных между ядрами процессора 
 (5) кеширования данных, хранящихся на диске 
Упражнение 2:
Номер 1
Что происходит при выталкивании элемента из стека?
Ответ:
 (1) содержимое памяти по адресу, который записан в %esp, записывается в регистр 
 (2) значение %esp уменьшается на размер элемента в байтах 
 (3) новый элемент записывается по адресу, на который указывает %esp 
 (4) значение адреса в %esp увеличивается на размер элемента в байтах 
Номер 2
На какой наименьший размер памяти может указать указатель на память?
Ответ:
 (1) бит 
 (2) байт 
 (3) 16 бит 
 (4) 32 бита 
 (5) 64 бита 
Номер 3
Каким образом число 0x05020107 будет располагаться в памяти в случае little-endian порядка байт?
Ответ:
 (1) 0x05 0x02 0x01 0x07 
 (2) 0x07 0x01 0x02 0x05 
 (3) 0x02 0x05 0x07 0x01 
 (4) 0x01 0x07 0x05 0x02 
Номер 4
Каким образом число 0x05020107 будет располагаться в памяти в случае big-endian порядка байт?
Ответ:
 (1) 0x05 0x02 0x01 0x07 
 (2) 0x07 0x01 0x02 0x05 
 (3) 0x02 0x05 0x07 0x01 
 (4) 0x01 0x07 0x05 0x02 
Упражнение 3:
Номер 1
Какие из указанных строк являются корректными операндами команды?
Ответ:
 (1) movl 
 (2) %hello_str 
 (3) %ecx 
 (4) $10 
 (5) ни одно из вышеперечисленных 
Номер 2
Какая директива обязательно размещается перед командами?
Ответ:
 (1) .data 
 (2) .code 
 (3) .text 
 (4) .long 
 (5) .type 
 (6) .space 
Номер 3
В какой из приведённых ниже строк содержится метка
Ответ:
 (1) .string "Hello, world!\n" 
 (2) movl $42, %eax 
 (3) hello_str: 
 (4) .section .rodata 
 (5) .space 
Упражнение 4:
Номер 1
Операндами команды процессора могут быть:
Ответ:
 (1) регистр 
 (2) конкретное значение 
 (3) имя секции программы 
 (4) ни одно из вышеперечисленных 
Номер 2
Метки в ассембере используются для:
Ответ:
 (1) адресации данных 
 (2) адресации блоков кода 
 (3) связывание 
 (4) ни одно из вышеперечисленных 
Номер 3
Для объявления неинициализированных данных служит директива:
Ответ:
 (1) .set 
 (2) .data 
 (3) .space 
 (4) .section .rodata 
Упражнение 5:
Номер 1
/**************************************** start of sample1.s *******************************/
.data
num:
.long 0x00000072
other_var:
.long 0x00000001, 0x00000002, 0x00000003
.text
.globl main
main:
movl $0x48, %eax
movl (num), %eax
movl $0x1, %eax
movl (other_var), %ecx
/**************************************** end of sample1.s *******************************/
Какие виды адресации использованы в вышеприведённом фрагменте программы?
Ответ:
 (1) абсолютная 
 (2) непосредственная 
 (3) косвенная 
 (4) регистровая 
 (5) относительная 
Номер 2
/**************************************** start of sample1.s *******************************/
.data
num:
.long 0x00000072
other_var:
.long 0x00000001, 0x00000002, 0x00000003
.text
.globl main
main:
movl (num), %eax
movl (other_var), %ecx
leal (%eax,%eax,2) ,%ecx
/**************************************** end of sample1.s *******************************/
Какие виды адресации использованы в вышеприведённом фрагменте программы?
Ответ:
 (1) абсолютная 
 (2) непосредственная 
 (3) косвенная 
 (4) регистровая 
 (5) относительная 
Номер 3
/**************************************** start of sample1.s *******************************/
.data
num:
.long 0x00000072
other_var:
.long 0x00000001, 0x00000002, 0x00000003
.text
.globl main
main:
1 movl (num), %ebx
2 movl $0x1, %eax
3 movl (%ebx), %eax
4 movl %eax, %ecx
/**************************************** end of sample1.s *******************************/
В какой из понумерованных строк, в вышеприведённом фрагменте кода используется метод адресации, обеспечивающий максимальную гибкость программы?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
Номер 4
/**************************************** start of sample1.s *******************************/
.data
num:
.long 0x00000072
other_var:
.long 0x00000001, 0x00000002, 0x00000003
.text
.globl main
main:
1 addl (num), %eax
2 movl $0x1, %eax
3 movl (%ebx), %eax
4 movl %eax, %ecx
5 leal 5(%eax), %ebx
/**************************************** end of sample1.s *******************************/
В какой из понумерованных строк, в вышеприведённом фрагменте кода используется метод адресации, обеспечивающий максимальную быстродействие программы?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
Упражнение 6:
Номер 1
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000072
other_var:
.long 0x00000001, 0x00000002, 0x00000003
.text
.globl main
main:
1 leal 0x48, %eax
2 movl $some_var, %eax
3 movl %edx, %eax
4 movl %other_var + 4, %eax
5 movl $1, $ecx
/**************************************** end of sample1.s *******************************/
Какие инструкции приведённого ассемберного кода приведут к ошибкам при компиляции?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
Номер 2
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000072
other_var:
.long 0x00000001, 0x00000002, 0x00000003
.text
.globl main
main:
movl $0x48, %eax
leal $0x32, %eax
leal some_var, %eax
leal other_var + 4, %eax
leal some_var, $ecx
/**************************************** end of sample1.s *******************************/
Какие команды приведённого ассемберного кода приведут к ошибкам при компиляции?
Ответ:
 (1) movl $0x48, %eax 
 (2) leal $0x32, %eax 
 (3) leal some_var, %eax 
 (4) leal $other_var + 4, %eax 
 (5) leal some_var, $ecx 
Номер 3
/**************************************** start of sample1.s *******************************/
.data
.text
.globl main
main:
1 pushl $0x10 %eax
2 popl %ebx
3 pushl %eax
4 popl %ebx
5 pushl %eax
6 popw %ax $10
7 popw %bx
/**************************************** end of sample1.s *******************************/
Команды из каких строк приведённого ассемберного кода приведут к ошибкам при компиляции?
Ответ:
 (1) 6,7 
 (2) 2,6 
 (3) 1,6 
 (4) 3,4 
 (5) 1,6,7 
Упражнение 7:
Номер 1
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000052
other_var:
.long 0x00000071, 0x00000072, 0x00000073
.text
.global main
main:
movl $(other_var+4), %ecx
movl $some_var, %edx
/**************************************** end of sample1.s *******************************/
Какое значение окажется в регистре ecx после выполнения вышеописанных строк кода?
Ответ:
 (1) 0x00000052 
 (2) 0x00000001 
 (3) 0x00000072 
 (4) 0x00000073 
 (5) 0x00000071 
Номер 2
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000072
test_var:
.long 0x00000071, 0x00000072, 0x00000073
dummy_var:
.long 0x00000072, 0x00000073, 0x00000074
.text
.global main
main:
1 leal dummy_var, %ecx
2 movl 0x00000072 %ecx
3 leal $0x00000072, %ecx
4 movl $dummy_var, %ecx
5 movl $test_var, %ecx
/**************************************** end of sample1.s *******************************/
В результате каких операций в регистр ecx будет занесено значение 0x72?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
Номер 3
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000033
test_var:
.long 0x00000032, 0x00000033, 0x00000034
dummy_var:
.long 0x00000033, 0x00000034, 0x00000035
.text
.global main
main:
1 leal dummy_var, %eax
2 movl $0x00000033 %eax
3 leal 0x00000033, %eax
4 movl $dummy_var, %eax
5 movl $test_var, %eax
6 pushl $0x33
7 popl %eax
/**************************************** end of sample1.s *******************************/
В результате каких операций в регистр eax будет занесено значение 0x33?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
 (6) 7 
Номер 1
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000033
.text
.global main
main:
1 movl $2, %eax
2 addl $2, %eax
3 incl %eax
4 incl %eax
5 decl %eax
6 decl %eax
/**************************************** end of sample1.s *******************************/
В результате каких операций в регистр eax будет занесено значение 0x4?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
 (6) 7 
Номер 2
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000001
.text
.global main
main:
1 movl $3, %ecx
2 addl $1, %ecx
3 addl $4, %ecx
4 movl $some_var, %eax
5 leal 3(%eax), %ecx
/**************************************** end of sample1.s *******************************/
В результате каких операций в регистр ecx будет занесено значение 0x4?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
Номер 3
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000001
.text
.global main
main:
1 movl $3, %ecx
2 xorl %ecx, %ecx
3 addl $1, %ecx
4 addl $3, %ecx
5 addl $3, %ecx
6 testl $some_var, %eax
/**************************************** end of sample1.s *******************************/
В результате каких операций в регистр ecx будет занесено значение 0x4?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
 (6) 6 
Упражнение 8:
Номер 1
/**************************************** start of sample1.s *******************************/
.data
some_var:
.long 0x00000012
.text
.global main
main:
movl $12, %eax
cmpl $15, %eax
1 je the_end
cmpl $15, %eax
2 jg the_end
cmpl $15, %eax
3 jle the_end
cmpl $15, %eax
4 jmp the_end
the_end:
xor %eax, %eax # return 0;
/**************************************** end of sample1.s *******************************/
В результате выполнения которой команды перехода будет выполнен переход на метку the_end при выполнении вышеприведённой программы?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
Номер 2
/**************************************** start of sample1.s *******************************/
.data
.text
.globl main
main:
movl $0, %eax
movl $4, %ecx
sum:
addl %ecx, %eax
loop sum
movl $0, %eax
ret
/**************************************** end of sample1.s *******************************/
Какие действия выполняются командой loop в вышеприведенном фрагменте?
Ответ:
 (1) уменьшает значение регистра eax на 1 
 (2) увеличивает значение регистра eсx на 1 
 (3) если %ecx = 0, передать управление следующей за loop команде 
 (4) если %ecx не равно 0, передать управление на метку sum 
 (5) если %eax больше 0, передать управление на метку sum 
Номер 3
/**************************************** start of sample1.s *******************************/
.data
printf_format:
.string "%d\n "
.text
.globl main
main:
1 movl $0, %eax
2 xorl %eax, %eax
3 subl %eax, %eax
4 testl %eax, %eax
5 orl %eax, %eax
ret
/**************************************** end of sample1.s *******************************/
Какие из инструкций в вышеприведённой программе обнуляют регистр eax?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
Упражнение 9:
Номер 1
/**************************************** start of sample1.s *******************************/
sub:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl 8(%ebp), %eax
movl 12(%ebp), %eax
movl 16(%ebp), %eax
movl 20(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret
main:
pushl $0x00000010
pushl $0x00000020
pushl $0x00000020
pushl $0x00000041
call sub
addl $12, %esp
/**************************************** end of sample1.s *******************************/
Какие утверждения про приведённую выше программу верны?
Ответ:
 (1) в подпрограмму sub параметры передаются через стек 
 (2) все параметры длиной 4 байта 
 (3) подпрограмма sub принимает 3 параметра 
 (4) инструкция ret в подпрограмме sub возвращает вершину стека в исходное положение 
 (5) подпрогамма sub возвращает 0 
 (6) для резервирования места под локальные переменные значение регистра %esp уменьшается на размер переменных 
Номер 2
Какие утверждения про системные вызовы ошибочны?
Ответ:
 (1) количество параметров системного вызова не ограничено 
 (2) системный вызов выполняется через прерывание 0x80 и номер системного вызова помещается в регистр %eax 
 (3) в разных версиях ядра порядок аргументов у некоторых системных вызовов может отличаться 
 (4) при системном вызове параметры передаются через стек 
 (5) количество параметров системного вызова передаётся через регистр %edx 
Номер 3
Какой самый популярный способ передачи параметров в подпрограмму?
Ответ:
 (1) при помощи регистров 
 (2) при помощи общей области памяти 
 (3) при помощи стека 
 (4) все указанные способы равноценны и их использование определяется настройками компилятора 
Упражнение 10:
Номер 1
На что необходимо обратить внимание при работе с структурами?
Ответ:
 (1) размер структуры зависит как от порядка элементов структуры, так и от их размера 
 (2) вся структура должна быть выровнена так, как выровнен её элемент с наибольшим выравниванием 
 (3) каждый элемент структуры следует сразу за последним байтом предыдущего элемента 
 (4) из описания структуры в manula pages легко можно посчитать её размер и смещения отдельных элементов 
Номер 2
/**************************************** start of sample1.s *******************************/
.data
printf_format:
. string "%s\n "
str_in:
.string "abc123()!@!777 "
.set str_in_length, .-str_in
.bss
str_out:
.space str_in_length
.text
.globl main
main:
pushl %ebp
movl %esp, %ebp
movl $str_in, %esi
movl $str_out, %edi
movl $str_in_length - 1, %ecx
1b:
lodsb
incb %al
stosb
loop 1b
movsb
popl %ebp
ret
/**************************************** end of sample1.s *******************************/
Какие утверждения про приведённую выше программу верны?
Ответ:
 (1) программа размещает адрес входного массива данных в регистре esp  
 (2) программа в цикле напрямую копирует данные из памяти, начиная с адреса str_in в память, начиная с адреса str_out 
 (3) инструкция stosb берёт данные по адресу из регистра edi и сохраняет в регистр al 
 (4) инструкция lodsb берёт данные по адресу из регистра esi и сохраняет в регистр al 
 (5) операторы stos и lods изменяют значения регистров, которые они используют для хранения адресов 
Номер 3
Использование каких инструкций связано с использованием инструкций lods и stos?
Ответ:
 (1) movs или cmps или cmps 
 (2) ret 
 (3) push 
 (4) leos 
 (5) loop или rep 
Упражнение 11:
Номер 1
Для выполнения следующей инструкции текущей подпрограммы в отладчике gdb используется команда:
Ответ:
 (1) step 
 (2) next 
 (3) print 
 (4) break 
 (5) info 
 (6) list 
Номер 2
Для получения информации о текущей или заданной строке кода в отладчике gdb используется команда:
Ответ:
 (1) step 
 (2) next 
 (3) print 
 (4) break 
 (5) info 
 (6) list 
Номер 3
Для установки точки останова в отладчике gdb используется команда:
Ответ:
 (1) step 
 (2) next 
 (3) print 
 (4) break 
 (5) info 
 (6) list 
Номер 4
Для вывода на экран выражений в отладчике gdb используется команда:
Ответ:
 (1) step 
 (2) next 
 (3) print 
 (4) break 
 (5) info 
 (6) list