In order to digress just a little here, an instruction as add B is a one-byte instruction. In other terms this instruction would end up inside the 8085 as one byte. Part of byte is the opcode and the other portion is which register is affected or utilized. The purpose for this is that a prime concern in programming a microprocessor is how several bytes the program will really take up inside the microprcessor, after it has been assembled. The idea is to cram as much as possible into as few bytes as possible. It is why implied addressing is utilized. It limits choices in the use of the instruction, you always need to use the accumulator as either the source or the destination, but it reduced the size of the instruction, in order that more instructions can fit inside the microprocessor. It is a choice made by the maker of the microprocessor, and is not up for discussion. It is a trade off of flexibility vs. size. That is why you will see many instructions that use the accumulator. This is the best way to explain implied addressing.
In the case of an instruction as mvi A, 1, two bytes are assembled. The first byte says that it is a move instruction and that the accumulator is the destination. The second byte is the instantaneous data itself. Therefore we see that an instruction can have its data 'next' to it. This is transparent to programmer where the bytes are in fact stored in memory. Once we may 'find' it through an instruction is all that matters. We shall get into this again, later.
Another form of addressing variables is called as register indirect or just plain indirect addressing. It is a little more complex. Here the address is held in a register, usually the H and L registers but sometimes the B and C or D and E.
As an address is 16 bits long, we require two registers (a register pair) to store an address. Register indirect instructions reference memory using a register pair. Therefore, the instruction MOV M, C moves the contents of C register to the memory address stored in the H and L register pair. The instruction LDAX B loads the accumulator along the byte of data specified by the address in the B and C register pair.
Finally, let us describe something else regarding the assembler. The source file is what the explained program, or any program that has been written, is referred to. It is the source for the assembler, or the file which is going to be read by the assembler to produce the object file (the object of the assembler) from. The object file is refer to the file that will be downloads to the 8085 kit in the laboratory. They are two distinct files. One you have written with a text editor (the source or ASM file) and the other is composed by the assembler (the object or OBJ file) while you assemble the source file. You utilize an assembler with the object in mind of producing a file to download to the microprocessor, therefore the name, object file.
We have left out some of the directives, for simplicities sake, that we have to mention now. One is the .org directive. It is originate or origin directive. It tells the assembler at what address the first byte of assembled code is to be placed inside the 8085. This is the origin of the program or the beginning. Here is how this would look for our last instance program:
.org 2000H ; begin using memory address 2000H