CS考试辅导 ECE 391 Discussion

discussion_week_02

ECE 391 Discussion

Copyright By PowCoder代写 加微信 powcoder

Announcements & Reminders

! MP0 deadline Extended
! Due on Friday Sep 3rd 11:59 pm in Office hours

! Due 5:59 pm next Tuesday Sep 7th (gitlab)
! Only one person in group must submit with a proper partners.txt – RTDC!
! Work in groups of at least 4
! Make sure you test your solutions

! Will be posted soon…
! Start early

Problem Set 1

! C and assembly do NOT have to have a 1-to-1 correspondence
! Where to look up x86 assembly instructions (GAS or AT&T Syntax)

! https://courses.engr.illinois.edu/ece391/secure/references/doc-x86-asm.pdf
! http://en.wikibooks.org/wiki/X86_Assembly

! Important things to remember
! Initialize register before using it (xorl %eax, %eax)
! Dollar sign “$” in front of immediate number (movl $5, %eax)
! Star “*” is not dereference in x86 assembly

! Other stuff
! “extern” in C
! .GLOBAL or .GLOBL in x86 assembly

https://courses.engr.illinois.edu/ece391/secure/references/doc-x86-asm.pdf
http://en.wikibooks.org/wiki/X86_Assembly

Function Pointers

! What does “typedef” do
! typedef char int8_t;
! typedef char * int8ptr_t;

! What is a “function prototype”
! int func (int arg);

! Example of a function pointer in C
typedef int (*func_t) (int arg);

func_t my_func;

int foo (int arg);

my_func = foo;

Displacement

! displacement(base register, offset register, scalar multiplier)
! displacement + base register + (offset register * scalar multiplier)

! Base register can be any register
! Default value of displacement is 0
! Offset register can NOT be esp
! Scalar multiplier can be 1,2,4,8, default value is 1

! Example of displacement
! movl -4(%ebp, %edx, 4), %eax
! eax ← M[ebp – 4 + edx * 4]

Jump Table

! Jump to the function whose address is given by a value
! Example of jump table in x86 assembly

! jmp *operations-4(, %ecx, 4)
! Remember “*” here is not for dereference
! operations-4(, %ecx, 4) = M[operations – 4 + ECX * 4]

C Calling Convention

! Rules for C’s subroutine interface structure
! How information is passed to a subroutine
! How information is returned to the caller
! Who owns (responsible for) which registers

! Understand Stack structure (be careful of diagrams online!)
! Lower/Higher memory addresses toward top/bottom of stack, respectively
! Push/Pop instruction decrements/increments ESP, respectively

! Caller sequence
! Callee sequence

C Calling Convention

int binary_search(int key, int* array, int size);

return address

Int* array

EBP EBP + 4

Caller Saved Callee Saved

Translation from C to x86 Assembly

! Binary Search
! Task: find key by shrinking search space by half each time
! Initialization: set search space to be entire array
! Stopping conditions: search space is empty or middle item is one we

want to shrink search space based on relative value of middle element
! Return value: -1 on failure, otherwise index of element

left middle right

Translation from C to x86 Assembly

Variable Location

middle EDX
array EBX*

* = callee-saved register

Translation from C to x86 Assembly

程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com