200 likes | 342 Views
Assembly Questions. תרגול 12. Q1. Consider the following assembly representation of a function foo containing a for loop. Q1. Fill in the blanks to provide the functionality of the loop int foo(int a) { int i; int result = _____________; for( ________; ________; i++)
E N D
Assembly Questions תרגול 12
Q1 • Consider the following assembly representation of a function foo containing a for loop
Q1 Fill in the blanks to provide the functionality of the loop int foo(int a) { int i; int result = _____________; for( ________; ________; i++) { __________________; __________________; } return result; }
Answer int foo(int a) { int i; int result = a + 2; for (i=0; i < a; i++) { result += (i + 5); result *= (i + 3); } return result; }
Q2 Which of the functions compiled into the assembly code shown?
Q3 • Is the variable val stored on the stack? If so, at what byte offset(relative to %ebp) is it stored, and why is it necessary to store it on the stack? • answer: yes, -4, Need to pass pointer to it to recursive call • Is the variable val2 stored on the stack? If so, at what byte offset(relative to %ebp) is it stored, and why is it necessary to store it on the stack? • answer: no
Q3 • What (if anything) is stored at -24(%ebp)?If something is stored there, why is it necessary to store it? • answer: the value of %ebx is saved here, because %ebx is a callee-save register • What (if anything) is stored at -8(%ebp)?If something is stored there, why is it necessary to store it? • answer: nothing is stored here.
Q4 movl $0, %eax movl $0, %edx movl 8(%ebp), %ebx .L1: cmpl %eax, %ebx jle .L2 movl 12(%ebp), %ecx addl %eax, %ecx addl %ecx, %edx incl %eax jmp .L1 .L2: movl %edx, %eax Optimized the following Assembly code as much as possible:
Q4 • The small and obvious things: • Replace all movl $0 with xorl. • Instead of using both %eax and %ebx – we can initialized %eax to 8(%ebp) and reduce it till we get zero (save the need in a saved register!) • We can read the value of 12(%ebp) outside the loop and increased it by one instead of adding the index. • The big improvement: • Notice we are calculating the sum of an Arithmetic Series. Therefore, instead of using loops we can just calculate the formula – a much more efficient solution!
Q5 • We are sending an ASCII file over the net from computer A to computer B. Will it always be possible for computer B to read the file while knowing nothing on computer A? • Same as before only now we are sending a different file coded using the utf-8 coding?
Q5 • Yes. In ASCII files each character is coded using one byte. Therefore, computer B doesn’t care if computer A use big or little endians. • No. In UTF-8, some of the characters need more then one byte and then computer B must know if computer A use big or little endians.
Q6 • Computer A runs program gcc in 3.2 seconds. Computer B runs the same program in 2.9 seconds. Which computer has better performance and by how much? What about computer C, which runs the program in 3.1 seconds?
Q6 • Performance is relative so we want to measure PB/PA which is the inverse of CPUTA/CPUTB = 3.2/2.9 = 1.103. Thus the performance of computer B is 10% better that computer A.Computer C is 3% (3.2/3.1 = 1.03) better than computer A. And computer B is 7% (3.1/2.9 = 1.07) faster than computer C.
Q7 • You are given the next number in binary representation: 11000000001000000000000000000000 What is its value if it is: • An unsigned int. • A float.
Q7 float = 1 10000000 01000000000000000000000 (-1)1*(1 + .01)*2(128-127) = -(1 + 0.25)*21 = -1.25*2 = -2.5 unsigned = 11000000001000000000000000000000 = (231 + 230 + 221) = 2147483648 + 1073741824 + 2097152 = 3,223,322,624
Q8 • Transfer the next C function info Assembly code: (don’t forget comments!) void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp;} Answer: many possible solutions
Q9 • What does the spatial locality principal say? • What do we use MUXes for? • What is the ALU?
Q10 • What is CPI and what is the difference between CPI and CPE • Latency and Throughput • Data hazards / Control hazzards • Stalling / forwarding / load-use hazard • Branch prediction