A High Level Programming Language like C provides abstractions to program an underlying computing system. The following is a broad classification of various abstractions.
- Data Abstractions: Data Abstractions provide certain primitive data types like int, float, char etc. and a mechanism (like structures, arrays etc.) to hierarchilaly compose the primitive data types to create new abstract data types.
- Data Processing Abstractions: Data Processing Abstractions provide operations (like addition, multiplication, comparison etc.) which act on the primitive data types which can again be composed to act on user-defined data types.
- Control Abstractions: Control abstractions include language features like conditional/unconditional goto, if-then-else, for-loop, while-loop etc. A language which doesn't support at least one these Control Abstractions will not be Turing Complete which means there exists certain functions which are not computable using the language features alone
- Procedural Abstraction: Procedures allows a user to define his/her own operation to act upon primitive or user defined data types. Further it allows modular development of programs enabling software readability, maintainability and efficiency also.
- More Abstractions: Object-oriented languages like C++ and Java provide features like classes, inheritance, polymorphism etc. Similary different langugages can provide different sets of abstraction depending upon their design philosophy and utility.
In this assignment and in the next few we shall learn how to implement these High Level Language Abstractions in the Assembly Language. There are 3 sets of assignments corresponding to MIPS, ARM and x86 Instruction Set Architectures (ISAs). MIPS and ARM ISA follow RISC philosophy and x86 follows a CISC philosophy. It would be good to know one RISC ISA and one CISC ISA. So you can first work on either the MIPS or ARM assignments followed by the assignments on x86 ISA.