X86 assembly language and C fundamentals PREFACE Although assembly language is not as prevalent as a high level language such as C or an object oriented language like C++ it is the predominant language used in embedded microprocessors. A course in a high level language such as C usually precedes a course in assembly language. Assembly language programming requires a knowledge of number representations such as fixed point decimal and floating point; also digital logic registers and stacks. In order to thoroughly understand assembly language it is necessary to be familiar with the architecture of the computer on which the language is being used. For the X86 assembly language this implies the Intel and Intel like microprocessors. Programs written in assembly language are usually faster and more compact than programs written in a high level language and provide greater control over the program application. Assembly language is machine dependent; that is it is used only with a specific type of processor. A high level language however is usually machine independent; that is it can be used with any processor. Assembly language programs use an assembler to convert the assembly language code to the machine language of 1s and 0s. This is in contrast to high level languages which use compilers to accomplish the transformation. Assembly languages consist of mnemonic codes which are similar to English words making the program easy to read. For example the MOV instruction moves data from a source location to a destination location; the XCHG instruction exchanges the contents of a source location and a destination location; and the logical AND instruction performs the bitwise AND operation of two operands