140 likes | 308 Views
CET 3510 - Microcomputer Systems Technology Lecture 7 – Real Assembly. Dr. José M. Reyes Álamo. High Level Assembly (HLA). 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
E N D
CET 3510 - Microcomputer Systems TechnologyLecture 7 – Real Assembly Dr. José M. Reyes Álamo
High Level Assembly (HLA) • 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
Differences between HLA and Real Assembly • 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.
C Language and Assembly • 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)
Example 1 main() { int x = 5; } Assembly: .file "cases.c" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $5, -4(%ebp) leave ret .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5" .section .note.GNU-stack,"",@progbits C Assembly
Example 2 main() { int x = 5; if(x < 0) { x++; } } .file "cases.c" .text .globl main .type main, @function 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 .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5" .section .note.GNU-stack,"",@progbits C Assembly
Example 3 main() { int x = 5; if(x < 0) { x++; } else { x--; } } .file "cases.c" .text .globl main .type main, @function 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 .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5" .section .note.GNU-stack,"",@progbits C Assembly
Example 4 main() { int x = 5; while (x < 10){ x++; } } .file "cases.c" .text .globl main .type main, @function 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 .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5" .section .note.GNU-stack,"",@progbits C Assembly
Example 5 #include<stdio.h> main() { printf("Hello World \n"); } .file "cases.c" .section .rodata .LC0: .string "Hello World " .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $16, %esp movl $.LC0, (%esp) call puts leave ret .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5" .section .note.GNU-stack,"",@progbits C Assembly
Experiment • 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
ReviewforMidterm • Computer and Processor Architecture: • Components of computers • Memory limits, register size etc. • Data organizations (bits, nibble, word, etc.)
ReviewforMidterm • 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
ReviewforMidterm • Number Systems (Binary, Decimal, Hexadecimal) Arithmetic • Conversion to/from different bases • Two’s complement binary • Representation in Hex
ReviewforMidterm • Logical Operations • AND • NOT • OR • XOR • How to use these to manipulate, insert and clear bits