When programming in assembly language, we have to specify operations in a much greater level of detail than we would have to do in a high level language. Furthermore, we get relatively little help from the assembler in finding errors. Assemblers can only check the syntax of each line, and check that every symbol or label used is defined somewhere. We are much less constrained by the structure of the assembly language than we are by the structure of a high level language. This lack of constraint makes the job much harder, not easier. It is much easier to write an incorrect program in assembly language that in C++ or Pascal. It is much more likely that mistakes, will not be found by the assembler, so that we get runtime errors, which are harder to find, rather than compile time errors which are easier to find. For these reasons, we need to be even more careful when programming in assembly language than we are when programming in a high level language. We need to apply all of the skills we have learned in relation to high level language programming to assembly language programming. Planning our work carefully is equally important, building a design package, by following appropriate style conventions when writing the program, and by providing good documentation with appropriate commenting of the program text. After building the design, it is wise to write a high level language program, to help check out the program logic and to serve as a model for the assembly language program. The high level language program can then be translated little by little into assembly language, perhaps a procedure at a time, and can be used to document the logic of the assembly language program. Clearly, we should use a compiler to translate a high level language program into machine code if we have a compiler at hand. There are circumstances, however; when it is necessary to do the translation on our own. It is nevertheless wise to write ...