Главная / Программирование / Ассемблер в Linux для программистов на C

Ассемблер в Linux для программистов на C - ответы на тесты Интуит

Правильные ответы выделены зелёным цветом.
Все ответы: Вводный курс по языку ассемблер знакомит с начальными понятиями, синтаксисом, методами адресации и командами.
Смотрите также:
Основными элементами архитектуры IA-32 являются:
(1) регистры
(2) стек
(3) видеопамять
(4) память
(5) кеш диска
Что происходит при выталкивании элемента из стека?
(1) содержимое памяти по адресу, который записан в %esp, записывается в регистр
(2) значение %esp уменьшается на размер элемента в байтах
(3) новый элемент записывается по адресу, на который указывает %esp
(4) значение адреса в %esp увеличивается на размер элемента в байтах
Какие из указанных строк являются корректными операндами команды?
(1) movl
(2) %hello_str
(3) %ecx
(4) $10
(5) ни одно из вышеперечисленных
Операндами команды процессора могут быть:
(1) регистр
(2) конкретное значение
(3) имя секции программы
(4) ни одно из вышеперечисленных
/**************************************** 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) относительная
/**************************************** 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
/**************************************** 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
/**************************************** 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
/**************************************** 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
/**************************************** 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 уменьшается на размер переменных
На что необходимо обратить внимание при работе с структурами?
(1) размер структуры зависит как от порядка элементов структуры, так и от их размера
(2) вся структура должна быть выровнена так, как выровнен её элемент с наибольшим выравниванием
(3) каждый элемент структуры следует сразу за последним байтом предыдущего элемента
(4) из описания структуры в manula pages легко можно посчитать её размер и смещения отдельных элементов
Для выполнения следующей инструкции текущей подпрограммы в отладчике gdb используется команда:
(1) step
(2) next
(3) print
(4) break
(5) info
(6) list
Какое утверждения про архитектуру IA-32 верно?
(1) используются регистры размером 16, 32 и 64 бита
(2) поддерживается всеми процессорами Intel, имя которых заканчивается на 86
(3) служит для запуска только 32-битных приложений
(4) данные из некоторых регистров можно считывать по 8,16 и 32 бита
На какой наименьший размер памяти может указать указатель на память?
(1) бит
(2) байт
(3) 16 бит
(4) 32 бита
(5) 64 бита
Какая директива обязательно размещается перед командами?
(1) .data
(2) .code
(3) .text
(4) .long
(5) .type
(6) .space
Метки в ассембере используются для:
(1) адресации данных
(2) адресации блоков кода
(3) связывание
(4) ни одно из вышеперечисленных
/**************************************** 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) относительная
/**************************************** 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
/**************************************** 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
/**************************************** 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
/**************************************** 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
Какие утверждения про системные вызовы ошибочны?
(1) количество параметров системного вызова не ограничено
(2) системный вызов выполняется через прерывание 0x80 и номер системного вызова помещается в регистр %eax
(3) в разных версиях ядра порядок аргументов у некоторых системных вызовов может отличаться
(4) при системном вызове параметры передаются через стек
(5) количество параметров системного вызова передаётся через регистр %edx
/**************************************** 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 изменяют значения регистров, которые они используют для хранения адресов
Для получения информации о текущей или заданной строке кода в отладчике gdb используется команда:
(1) step
(2) next
(3) print
(4) break
(5) info
(6) list
Регистры процессора служат для:
(1) кеширования данных оперативной памяти
(2) хранения результатов промежуточных вычислений
(3) хранения информации, управляющей работой процессора
(4) передачи данных между ядрами процессора
(5) кеширования данных, хранящихся на диске
Каким образом число 0x05020107 будет располагаться в памяти в случае little-endian порядка байт?
(1) 0x05 0x02 0x01 0x07
(2) 0x07 0x01 0x02 0x05
(3) 0x02 0x05 0x07 0x01
(4) 0x01 0x07 0x05 0x02
В какой из приведённых ниже строк содержится метка
(1) .string "Hello, world!\n"
(2) movl $42, %eax
(3) hello_str:
(4) .section .rodata
(5) .space
Для объявления неинициализированных данных служит директива:
(1) .set
(2) .data
(3) .space
(4) .section .rodata
/**************************************** 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
/**************************************** 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
/**************************************** 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
/**************************************** 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
/**************************************** 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
Какой самый популярный способ передачи параметров в подпрограмму?
(1) при помощи регистров
(2) при помощи общей области памяти
(3) при помощи стека
(4) все указанные способы равноценны и их использование определяется настройками компилятора
Использование каких инструкций связано с использованием инструкций lods и stos?
(1) movs или cmps или cmps
(2) ret
(3) push
(4) leos
(5) loop или rep
Для установки точки останова в отладчике gdb используется команда:
(1) step
(2) next
(3) print
(4) break
(5) info
(6) list
Каким образом число 0x05020107 будет располагаться в памяти в случае big-endian порядка байт?
(1) 0x05 0x02 0x01 0x07
(2) 0x07 0x01 0x02 0x05
(3) 0x02 0x05 0x07 0x01
(4) 0x01 0x07 0x05 0x02
/**************************************** 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
Для вывода на экран выражений в отладчике gdb используется команда:
(1) step
(2) next
(3) print
(4) break
(5) info
(6) list