Q. Define looping in assembly language?
LOOPING  
; Program: Assume a constant inflation factor that is added to a series of prices
; stored in the memory. The program copies the new price over the old price. It is 
; assumed that price data is available in BCD form.
; The algorithm:
; Repeat
; Read a price from the array
; Add inflation factor
; Adjust result to correct BCD
; Put result back in array
; Until all prices are inflated
; REGISTERS: Uses DS, CS, AX, BX, CX
; PORTS        : Not used
ARRAYS                   SEGMENT
                                    PRICE                        DB 36h, 55h, 27h, 42h, 38h, 41h, 29h, 39h
ARRAYS                   ENDS
CODE                         SEGMENT
                                    ASSUME CS:CODE, DS: ARRAYS
START:                       MOV AX, ARRAYS; Initialize data segment
                                    MOV DS, AX; register using AX
                                    LEA BX, PRICES; initialize pointer to base of array
                                    MOV CX, 0008h; Initialise counter to 8 as array have 8
; Values.
DO_NEXT:                MOV AL, [BX]                      ; Copy a price to AL. BX is addressed in 
; Indirect mode.
                                    ADD AL, 0Ah                        ; Add inflation factor
                                    DAA                                                   ; Make sure that result is BCD
                                    MOV [BX], AL                      ; Copy result back to the memory 
                                    INC BX                                  ; increment BX to make it point to next price 
                                    DEC CX                                 ; Decrement counter register
                                    JNZ DO_NEXT                     : If not last, (last would be when CX will 
; become 0) Loop back to DO_NEXT
                                    MOV AH, 4CH                      ; Return to DOS
                                    INT 21H
CODE ENDS  
END START
Discussion:  
Please note the use of instruction: LEA BX, PRICES: It would load BX register with offset of the array PRICES in data segment. [BX] is an indirection through BX and comprises the value stored at that element of array. PRICES. BX is incremented to point to next element of array. CX register acts as a loop counter and is decremented by one to keep a check of the bounds of array. As soon as CX register becomes zero, zero flag is set to 1. JNZ instruction keeps track of value of CX and loop terminates when zero flag is 1 as JNZ doesn't loop back. The same program can be written by LOOP instruction in such case DEC CX and JNZ DO_NEXT instructions are substituted by LOOP DO_NEXT instruction. LOOP decrements value of CX and jumps to given label only if CX isn't equal to zero.