Computer Architecture and Assembly Languages Course’s web site: Teaching Assistant: Or Peri Office Hours: Thursday 37/ 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++…) Assembly code Binary Object file(s) Executable (app) A running process compiler Linker Loader
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: vr.com/nasm/ for more informationhttp:// vr.com/nasm/
How to? To write a code all you need is a text editor. Assembly files ends with.s Use NASM to compile those into.obj files Use a linker (ld or C’s gcc) to link compiled files into runnable files. Execute
Running NASM To assemble a file, you issue a command of the form > nasm -f [-o ] [ -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.c myelf.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
For windows Download NASM for windows from here: 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
Labs Linux from home – cont. Find an open work station here: Type: >ssh Congrats! You now have a live console as in the lab. You may compile, link and run your code
hellowWorld.c #include 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 int main(int argc, 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 mov ebp,esp mov eax, [ebp+8] dec eax push eax push toPrint call printf add esp,8 mov esp,ebp pop ebp ret
Debugging Command-prompt debugger: – gdb To Launch: >gdb To set breakpoints: >breakpoint To run: >run … – 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 #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: rm bij/* obj/*.o 1.Main target 2.Sub-target list 3.Sub-target 4.List of needed files 5.Command to invoke 6.A special target 7.Clean command
Basic Terminology Basic data unit - 1/0 (true/false)Bit 8 bitsByte 16 bits2 BytesWord 32 bits2 Words (4-byte)Dword Byte structure : MSB (most significant bit) LSB (least significant bit)