This course provides fundamental understanding of programming a computer hardware by teaching a low-level programming language, known as the assembly language programming. Assembly language structures, operators, macros and directives are covered. The hardware context is based on Intel and AMD processors and their architectures. The course teaches better manipulation of the hardware using assembly language programming; teaches real versus protected mode programming, interaction between assembly language and operation systems as well as application programs. The course also teaches, how to use assembly language to develop system level efficient software modules.
This course establishes a relation between hardware and software. With the recent switch from uniprocessor to multicore processors the compliers writers, operating system designers, database programmers, software engineers, programmers for the faster program and efficient programming need a firm understanding of processor and multicore design and performance evaluation; instruction set design, and addressing having implicit parallelism; data path design and pipelining; control structures and microprogramming; memory management, caches, and memory hierarchies; interrupts and I/O structures; parallel processing, GPU and so on. Hardware designers also need to clearly know the effect of their work on software applications. This course will help achieve these goals.