Home »
Embedded Systems
Find the minimum value in a given array | 8086 Microprocessor
In this tutorial, we will learn how to write an assembly language program in 8086 Microprocessor to find the minimum value in a given range?
By Ayush Sharma Last updated : May 22, 2023
Problem Statement
Write a program to find the minimum value in a given array in assembly 8086 Microprocessor.
Assumptions: Starting address of input array is 0500 and stores the result at address 0600.
Algorithm
- Assign value 500 in SI and 600 in DI
- Move the contents of [SI] in CL and increment SI by 1
- Assign the value 00 H to CH
- Move the content of [SI] in AL
- Decrease the value of CX by 1
- Increase the value of SI by 1
- Move the contents of [SI] in BL
- Compare the value of BL with AL
- Jump to step 11 if carry flag is set
- Move the contents of BL in AL
- Jump to step 6 until the value of CX becomes 0, and decrease CX by 1
- Move the contents of AL in [DI]
- Halt the program
Program
ADDRESS | MNEMONICS | COMMENTS |
0400 | MOV SI, 500 | SI ← 500 |
0403 | MOV DI, 600 | DI ← 600 |
0406 | MOV CL, [SI] | CL ← [SI] |
0408 | MOV CH, 00 | CH ← 00 |
040A | INC SI | SI ← SI+1 |
040B | MOV AL, [SI] | AL ← [SI] |
040D | DEC CX | CX ← CX-1 |
040E | INC SI | SI ← SI+1 |
040F | MOV BL, [SI] | BL ← [SI] |
0411 | CMP AL, BL | AL-BL |
0413 | JC 0417 | Jump if carry is 1 |
0415 | MOV AL, BL | AL ← BL |
0417 | LOOP 040E | Jump if CX not equal to 0 |
0419 | MOV [DI], AL | [DI] ← AL |
041B | HLT | End of the program |
Explanation
- MOV SI, 500 assigns 500 to SI
- MOV DI, 600 assigns 600 to DI
- MOV CL, [SI] moves the content of [SI] to CL register
- MOV CH, 00 assign 00 to CH register
- INC SI increase the value SI by 1
- MOV AL, [SI] moves the content of [SI] to AL register
- DEC CX decrease the content of CX register by 1
- INC SI increase the value SI by 1
- MOV BL, [SI] moves the content of [SI] to BL register
- CMP AL, BL subtract the value of BL register from AL and it modify flag registers
- JC 0417 jump to 0417 address if carry flag is set
- MOV AL, BL moves the content of BL register to AL register
- LOOP 040E runs loop till CX not equal to Zero and decrease the value of CX by 1
- MOV [DI], AL moves the content of AL to [DI]
- HLT stops the execution of program