computer architecture and assembly languages
Post on 24-Feb-2016
76 Views
Preview:
DESCRIPTION
TRANSCRIPT
Computer Architecture and Assembly Languages
Course’s web site: www.cs.bgu.ac.il/~arch121
Teaching Assistant: Or PeriOffice Hours: Thursday 14-16 @ 37/-108E-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)…++
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:
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 .obj files• Use a linker (ld or C’s gcc) to link compiled files
into runnable files.• Execute
Running NASMTo 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.oIt 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.outThe -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: 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.sextern printfglobal main
section .texthello: db "hellow world!",10,0main:
push hello call printfpop eaxret
printArgCnt.c
#include <stdio.h>
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.sextern printfglobal printArgc
section .texttoPrint: db "%d",10,0printArgc:
push ebpmov ebp,esp
mov eax, [ebp+8]dec eaxpush eaxpush toPrintcall printfadd esp,8
mov esp,ebppop ebpret
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#macro examples:ASM := nasmASM_FLAGS := -f elf -g
all: example1
example1: obj/neededFile1.o obj/neededFile2.ogcc -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
top related