190 likes | 362 Views
Computer Architecture and Assembly Languages. Course’s web site: www.cs.bgu.ac.il/~arch121 Teaching Assistant: Or Peri Office Hours: Thursday 14-16 @ 37/-108 E-mail: perio at cs …. Why Assembly?. Efficiency Accessibility to system hardware Space efficiency
E N D
Computer Architecture and Assembly Languages Course’s web site: www.cs.bgu.ac.il/~arch121 Teaching Assistant: Or Peri Office Hours: Thursday 14-16 @ 37/-108 E-mail: perio at cs…
Why Assembly? • Efficiency • Accessibility to system hardware • Space efficiency • Discovering “the missing link” (good education)
From code to Process High-level language code (C,C++…) compiler Assembly code Binary Object file(s) Linker Executable (app) Loader A running process
NASM • An Intel 80x86 assembly compiler • Natively for Linux • Your assignments will be checked on labs’ linux • Available also for Windows • You may start here: http://www.realtech-vr.com/nasm/ for more information
How to? • To write a code all you need is a text editor. • Assembly files ends with .s • Use NASM to compile those into .objfiles • Use a linker (ld or C’s gcc) to link compiled files into runnable files. • Execute
To assemble a file, you issue a command of the form > nasm -f <format> <filename> [-o <output>] [ -l listing] Example: > nasm -f elf mytry.s -o myelf.o It would create myelf.o file that has elf format (executable and linkable format).We use main.c file (that is written in C language) to start our program, and sometimes also for input / output from a user. So to compile main.c with our assembly file we should execute the following command: > gcc–m32 main.cmyelf.o -o myexe.out The -m32 option is being used to comply with 32-bit environment It would create executable file myexe.out.In order to run it you should write its name on the command line: > myexe.out Running NASM
For windows • Download NASM for windows from here: http://sourceforge.net/projects/nasm/ • Install it and add the path for nasm.exe to the PATH variable. • NOTE! Your code will be tested under linux, you must check compatibility before submission.
Labs Linux from home (win) • Download putty • Connect to one of the university’s servers (lace/tapuz) • From your home linux you may simply open a terminal and type: >ssh userName@lace.cs.bgu.ac.il
Labs Linux from home – cont. • Find an open work station here: http://www.cs.bgu.ac.il/facilities/labs.html • Type: >ssh <workstationName> • Congrats! You now have a live console as in the lab. You may compile, link and run your code
hellowWorld.c #include<stdio.h> Int main(){ printf(“hellow world!\n”); }
hellowWorld.s extern printf global main section .text hello: db "hellow world!",10,0 main: push hello call printf pop eax ret
printArgCnt.c #include <stdio.h> int main(intargc, char* argv[]){ printArgc(argc); } • An example program (mixed c and assembly code). • This one will print the amount of parameters received from invoker
printArgCnt.s extern printf global printArgc section .text toPrint: db "%d",10,0 printArgc: push ebp movebp,esp moveax, [ebp+8] deceax push eax push toPrint call printf add esp,8 movesp,ebp pop ebp ret
Debugging • Command-prompt debugger: • gdb • To Launch: >gdb <progName> • To set breakpoints: >breakpoint <label_or_offset> • To run: >run <parameter1> <parameter2> … • Use ‘help’ to get help and master the art of debugging.
Debugging • Using Eclipse: • Install cdt plugin (labs have it installed) • Project has to be a C project • Build preferences has to be altered so that auto makefile generation is off. • You need to write your own makefile • Upon debugging, user can view the registers, memory addresses as requested etc…
Makefile example 2.Sub-target list #macro examples: ASM := nasm ASM_FLAGS := -f elf -g all: example1 example1: obj/neededFile1.o obj/neededFile2.o gcc -m32 obj/neededFile1.o obj/neededFile2.o -o bin/binaryFileName neededFile1.o : asmFile1.s $(ASM) $(ASM_FLAGS) asmFile1.s -o neededFile1.o neededFile2.o : asmFile2.s $(ASM) $(ASM_FLAGS) asmFile2.s -o neededFile2.o clean: rmbij/* obj/*.o 1.Main target 4.List of needed files 3.Sub-target 5.Command to invoke 7.Clean command 6.A special target