Problem – Write an assembly language program in 8086 microprocessor to search a number in a string of 5 bytes, store the offset where the element is found and the number of iterations used to find the number.
- Move 2000 in AX and assign it to ES
- Assign value 600 to DI
- Move 25 in AL
- Move 0005 in CX
- Move the contents of CX to BX
- Clear the value of Directional Flag (DF)
- Repeat step 7 till Zero Flag (ZF) is not set
- Scan byte from [DI] and check its difference with contents of AL. Update the value of DI
- Decrements the value of DI by 1
- Subtract the value of BX by CX
- Decrements the value of BX by 1
- Halt the program
|400||MOV AX, 2000||AX <- 2000|
|403||MOV ES, AX||ES <- AX|
|405||MOV DI, 600||DI <- 600|
|408||MOV AL, 25||AL = 25|
|40A||MOV CX, 0005||CX = 0005|
|40D||MOV BX, CX||BX <- CX|
|40F||CLD||DF = 0 so that memory is accessed
from lower byte to higher byte
|410||REPNE SCAS B||Repeat till ZF = 0. Scan value from [DI] and
compare with AL, Increment DI
|414||DEC DI||DI = DI – 1|
|415||MOV DX, DI||DX = DI|
|417||SUB BX, CX||BX = BX – CX|
|419||DEC BX||BX = BX – 1|
- MOV AX, 2000 is used to move data to register AX.
- MOV ES, AX is used to move the data of AX to segment register ES.
- MOV DI, 600 is used to move offset 600 to Destination Index(DI).
- MOV AX, 25 is used to move data to AL.
- MOV CX, 0005 is used to move data to CX.
- MOV BX, CX is used to copy contents of CX to BX.
- CLD is used to clear the value of Directional Flag (DF), so that memory is accessed from lower byte to higher byte.
- REPNE SCAS B is used to scan data from DI and compare it with data from AL, if equal go to next step else increment the value of DI by 1 and repeat this step.
- DEC DI is used to decrement contents of DI by 1.
- MOV DX, DI is used to move the contents of DI to DX.
- SUB BX, CX is used to subtract the contents of BX by CX.
- DEC BX is used to decrement contents of BX by 1.
- HLT stops executing the program and halts any further execution.