When posting any request for help with an assembly language problem, we ask that you provide some crucial information:
- The operating system (Windows, Linux, MacOS, etc.) the program will be running under, including the version,
- The assembler you are using, including the version,
- the bit width being targetted (usually 8, 16, 32, or 64 bits), and
- If you are using an emulator, and if so, which one and what architecture it targets
The reason this is important is that, unlike most of the other languages discussed on the DaniWeb, 'assembly language' is not a single, common, portable language, but rather a class of languages. An assembly language is primarily a human-readable analog for the machine operation codes (opcodes) of a particular processor family, and is specific to that type of processor. While the overwhelming majority of personal computers use some member of the x86 family, they are by no means the only type in use; most mobile phones and tablets, for example, use an ARM processor, which is entirely different from the x86 architecture.
Also, some processors have different bit widths in different models, or in different modes; for example, the original PC ran in a 16-bit 'real' mode, but later models of the x86 family introduced a 32-bit 'protected' mode, and later still, a 64-bit 'long' mode. Each of these modes have their own distinct ways of handling registers, data sizes, and so forth, so it is important to know what the word size is.
Furthermore, there are multiple assemblers for most commonly-used architectures, and each assembler has its own particular variant of the assembly language. While the assemblers for a given processor will generally be similar, they can vary in the instruction syntax, label syntax, order of operations, assembler directives, macro processor syntax, data structure syntax, and more. Knowing which assembler is being used is vital.
Finally, many assembly language courses use a simulator, emulator, or virtual machine to simulate a simpler processor type than that which the program is actually running on. This is in part because the x86 instruction set is unusually difficult to work with, but it also has advantages in running and testing the programs. Since each different emulator will have its own peculiarities, we would need to know which one is being used.