Dr. José M. Reyes Álamo 1
An assembly language that is easier to understand that regular assembly Borrow some features from high-level languages without being a high-level programming language Supported in multiple platforms 2
No “sugary” commands such as if, while, for. Only jump statements and labels are available to do decisions and loops. It is understood by the processor. Programs execute faster but are harder to write.
Under Linux, to compile a C program into assembly use the following command: ◦ gcc –S myProgram.c The gcc compiler works for both C programs (extension.c) and assembly programs (extension.s)
CAssembly main() { int x = 5; } Assembly:.file"cases.c".text.globl main: pushl%ebp movl%esp, %ebp subl$16, %esp movl$5, -4(%ebp) leave ret.sizemain,.-main.ident"GCC: (Ubuntu/Linaro ubuntu5) 4.4.5".section.note.GNU-
CAssembly main() { int x = 5; if(x < 0) { x++; }.file"cases.c".text.globl main: pushl%ebp movl%esp, %ebp subl$16, %esp movl$5, -4(%ebp) cmpl$0, -4(%ebp) jns.L4 addl$1, -4(%ebp).L4: leave ret.sizemain,.-main.ident"GCC: (Ubuntu/Linaro ubuntu5)
CAssembly main() { int x = 5; if(x < 0) { x++; } else { x--; }.file"cases.c".text.globl main: pushl%ebp movl%esp, %ebp subl$16, %esp movl$5, -4(%ebp) cmpl$0, -4(%ebp) jns.L2 addl$1, -4(%ebp) jmp.L5.L2: subl$1, -4(%ebp).L5: leave ret.sizemain,.-main.ident"GCC: (Ubuntu/Linaro ubuntu5)
CAssembly main() { int x = 5; while (x < 10){ x++; }.file"cases.c".text.globl main: pushl%ebp movl%esp, %ebp subl$16, %esp movl$5, -4(%ebp) jmp.L2.L3: addl$1, -4(%ebp).L2: cmpl$9, -4(%ebp) jle.L3 leave ret.sizemain,.-main.ident"GCC: (Ubuntu/Linaro ubuntu5)
CAssembly #include main() { printf("Hello World \n"); }.file"cases.c".section.rodata.LC0:.string"Hello World ".text.globl main: pushl%ebp movl%esp, %ebp andl$-16, %esp subl$16, %esp movl$.LC0, (%esp) callputs leave ret.sizemain,.-main.ident"GCC: (Ubuntu/Linaro ubuntu5)
Write a few simple programs C programs Write the same program in HLA Compile the C program into Real Assembly gcc –S myProgram.c Compare all 3 Try to understand especially how C code is translated to Assembly
Computer and Processor Architecture: ◦ Components of computers ◦ Memory limits, register size etc. ◦ Data organizations (bits, nibble, word, etc.)
HLA Syntax: ◦ Commands ◦ Data types ◦ Standard libraries (stdlib.hhf) ◦ Differences with Real Assembly Language ◦ Differences with High-Level programming languages such as C++ ◦ Be able to read and write HLA code ◦ Labels and jumps
Number Systems (Binary, Decimal, Hexadecimal) Arithmetic ◦ Conversion to/from different bases ◦ Two’s complement binary ◦ Representation in Hex
Logical Operations ◦ AND ◦ NOT ◦ OR ◦ XOR ◦ How to use these to manipulate, insert and clear bits