Presentation is loading. Please wait.

Presentation is loading. Please wait.

Practical Session 5. Addressing Modes #include #define VECTOR_SIZE 5 #define MATRIX_ROWS 2 #define MATRIX_COLUMNS 3 extern int DotProduct(int V1[VECTOR_SIZE],

Similar presentations


Presentation on theme: "Practical Session 5. Addressing Modes #include #define VECTOR_SIZE 5 #define MATRIX_ROWS 2 #define MATRIX_COLUMNS 3 extern int DotProduct(int V1[VECTOR_SIZE],"— Presentation transcript:

1 Practical Session 5

2 Addressing Modes

3 #include #define VECTOR_SIZE 5 #define MATRIX_ROWS 2 #define MATRIX_COLUMNS 3 extern int DotProduct(int V1[VECTOR_SIZE], int V2[VECTOR_SIZE],int size); extern void MatrixVectorProduct (int M[MATRIX_ROWS * MATRIX_COLUMNS], int V[MATRIX_COLUMNS], int rows, int columns, int result[MATRIX_ROWS]);

4 int main () } int V1[VECTOR_SIZE] = {1,0,1,0,2}; int V2[VECTOR_SIZE] = {1,0,1,0,-2}; int result = DotProduct(V1,V2,VECTOR_SIZE); printf ("Dot product result: %d\n",result); // Vector: // {20 1 15} int V[MATRIX_COLUMNS] = {20,1,15}; // Matrix: // { 3 1 3} // {10 2 3} int M[MATRIX_ROWS * MATRIX_COLUMNS] = {3,1,3,10,2,3}; int result_vector[MATRIX_ROWS] = {0,0}; MatrixVectorProduct(M,V,MATRIX_ROWS,MATRIX_COLUMNS,result_vector); printf ("Matrix product result:"); int i; for (i = 0;i < MATRIX_ROWS;i = i + 1) printf (" %d",result_vector[i]); printf ("\n"); return 0; {

5 DotProduct: push ebp movebp, esp pushebx pushecx pushedx movecx, 0 dot_start: movedx, 0 cmpecx, dword [ebp+16] jedot_end movebx, dword [ebp+8] moveax, dword [ebx + (4*ecx)] movebx, dword [ebp+12] imuldword [ebx + (4*ecx)] adddword [result], eax incecx jmpdot_start dot_end: moveax, dword [result] ; Return Value popedx popecx popebx movesp, ebp popebp ret section.data result: dd 0 section.text globalDotProduct globalMatrixVectorProduct:

6 MatrixVectorProduct: push ebp movebp, esp pushad movesi, dword [ebp+24] movebx, 0 mv_row: cmpebx, dword [ebp+16] ; Rows jemv_end movecx, 0 mv_column: cmpecx, dword [ebp+20] ; Columns jemv_column_end moveax, dword [ebp+20] ; MATRIX_COLUMNS mulebx movedi, eax; row * MATRIX_COLUMNS movedx, dword [ebp+8] ; M addedi, ecx ; (row * MATRIX_COLUMNS)+column moveax, dword [edx + edi*4] ; M[row*(MATRIX_COLUMNS) + column] movedx, dword [ebp+12] muldword [edx + ecx*4] ; V[column] adddword [esi], eax incecx jmpmv_column mv_column_end: incebx addesi, 4 jmpmv_row mv_end: popad movesp, ebp popebp ret

7 Linux System Calls

8  System calls are low level functions the operating system makes available to applications via a defined API (Application Programming Interface)  System calls represent the interface the kernel presents to user applications.  In Linux all low-level I/O is done by reading and writing file handles, regardless of what particual peripheral device is being accessed - a tape, a socket, even your terminal, they are all files  Low level I/O is performaned by making system calls

9  A system call is explicit request to the kernel made via a software interrupt.  The interrupt call ‘0x80’ call to a system call handles.  To perform Linux system calls we have to do following:  Put the system call number in EAX register.  Set up the arguments to the system call in EBX,ECX, etc.  call the relevant interrupt (for DOS, 21h; for Linux, 80h).  The result is usually returned in EAX. Anatomy of System Calls

10  There are six registers that are used for the arguments that the system call takes. The first argument goes in EBX, the second in ECX, then EDX, ESI, EDI, and finally EBP. If more then 6 arguments needed (not likely), the EBX register must contain the memory location where the list of arguments is stored.  Files (in Linux everything is a file) are referenced by an integer file descriptor.

11 sys_write – write into a file system call number (in EAX): 4 arguments: –EBX: The file descriptor. –ECX: Pointer to the first byte to read (beginning of the string). –EDX: Number of bytes (characters) to write. Returns in EAX: Number of bytes written. On errors: -1.

12 sys_open - open a file system call number (in EAX): 5 arguments: –EBX: The pathname of the file to open/create –ECX: set file access bits (can be OR’d togather): O_RDONLY open for reading only O_WRONLY open for writing only O_RDRW open for both reading and writing O_APPEND open for appending to the end of file O_TRUNC truncate to 0 length if file exists O_CREAT create the file if it doesn’t exist –EDX: set file permissions (in case of create). Returns in EAX: file descriptor. On errors: -1.

13 sys_open - open a file – an example section.data filename: db “file.ext", 0 Handle dd 0 section.text my_func: moveax,5 movecx, 1 ; O_WRONLY mov ebx,filename int 0x80 inc eax ; eax = -1 on error jz error dec eax mov [Handle],eax jmp file_opened file_opened : …. ret error:… ret

14  In Linux, there is a collection of manual pages specifically for system calls.  The collection number is 2.  In order to read about a specific system call, use the ‘Man’ command  Example: > man 2 open This will show the manual pages for the ‘open’ system call. The Man 2 Pages


Download ppt "Practical Session 5. Addressing Modes #include #define VECTOR_SIZE 5 #define MATRIX_ROWS 2 #define MATRIX_COLUMNS 3 extern int DotProduct(int V1[VECTOR_SIZE],"

Similar presentations


Ads by Google