игра брюс 2048
Главная / Программирование / Ассемблер в 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)

 (2)

 (3)

 (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)

 (2)

 (3)

 (4)

 (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)

 (2)

 (3)

 (4)

 (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)

 (2)

 (3)

 (4)

 (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)

 (2)

 (3)

 (4)

 (5)

 (6)


Номер 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)

 (2)

 (3)

 (4)

 (5)

 (6)


Номер 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)

 (2)

 (3)

 (4)

 (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)

 (2)

 (3)

 (4)

 (5)

 (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)

 (2)

 (3)

 (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)

 (2)

 (3)

 (4)

 (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 




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