Difference between revisions of "MPLab3 Sorting"
Jump to navigation
Jump to search
Line 56: | Line 56: | ||
INT 21H | INT 21H | ||
− | + | ; input element of the array | |
+ | MOV DX, SI | ||
MOV AH, 01H | MOV AH, 01H | ||
INT 21H | INT 21H | ||
− | SUB AL,30H | + | SUB AL,30H ; convert the character digit ('0' to '9') into corresponding numeric value( 0 to 9) |
MOV SI, DX | MOV SI, DX | ||
− | MOV [BX + SI], AX | + | MOV [BX + SI], AX ; stores the value in AX into a memory location specified by the contents of the BX and SI registers. |
− | + | INC SI ; increment the value of SI register by 1 | |
− | INC SI | ||
LOOP L1 | LOOP L1 | ||
+ | |||
MOV CX, DATA1 | MOV CX, DATA1 | ||
MOV BX, OFFSET ARRAY | MOV BX, OFFSET ARRAY | ||
MOV DI,CX | MOV DI,CX | ||
L2: MOV CX, DATA1 | L2: MOV CX, DATA1 | ||
− | MOV NUMB, CX | + | MOV NUMB, CX ; Change1 |
− | DEC NUMB | + | DEC NUMB ; Change2 |
− | MOV CX, NUMB | + | MOV CX, NUMB ; change3 |
MOV SI, 0 | MOV SI, 0 | ||
L3: MOV AL, [BX + SI] | L3: MOV AL, [BX + SI] |
Revision as of 12:03, 31 October 2023
; Program to sort an array
1. Define the model and architecture for the assembly code
.model SMALL .stack 100H .386
2. Define your data in the data section ( here you can define various data items: variables, constants, strings, arrays)
.data ARRAY dw 20 DUP (?) ;The DUP directive is used to specify the number of times the question mark (?) is duplicated (20 times) DATA1 dw 0000H NUMB dw 0000H msg db 10,13,"Enter the size of the array: $" msg2 db 10,13,"Enter the elements of array: $" msg3 db 10,13,"The sorted array is: $"
3. Define your instruction in the code section (here you write the assembly instructions that perform computations, control program flow, and interact with data variables and memory)
.code .startup ; print Enter the size of the array message MOV AH, 09H MOV DX, OFFSET msg INT 21H ;Read the size of the array MOV AH, 01H INT 21H ;The binary equivalent(8-bits) of the ASCII code for the entered character is stored in AL SUB AL,30H ; convert the character digit ('0' to '9') into corresponding numeric value( 0 to 9) MOV AH,0 MOV CX, AX ; This instruction loads the CX with the size of array MOV DATA1, AX ; The size is also stored in DATA1 ; print Enter the elements of Array message MOV AH, 09H MOV DX, OFFSET msg2 INT 21H MOV AH, 0 MOV SI, 0 ; SI is initialized to 0, which means it's pointing to the beginning of array MOV BX, OFFSET ARRAY ; Loads the offset address of the label ARRAY into the BX register. L1: MOV DL, 0AH ; Move the newline character (line feed) into DL to jump onto next line MOV AH, 02H INT 21H ; input element of the array MOV DX, SI MOV AH, 01H INT 21H SUB AL,30H ; convert the character digit ('0' to '9') into corresponding numeric value( 0 to 9) MOV SI, DX MOV [BX + SI], AX ; stores the value in AX into a memory location specified by the contents of the BX and SI registers. INC SI ; increment the value of SI register by 1 LOOP L1 MOV CX, DATA1 MOV BX, OFFSET ARRAY MOV DI,CX L2: MOV CX, DATA1 MOV NUMB, CX ; Change1 DEC NUMB ; Change2 MOV CX, NUMB ; change3 MOV SI, 0 L3: MOV AL, [BX + SI] CMP [BX + SI + 1],AL JL L4 XCHG AL,[BX + SI + 1] MOV [BX + SI],AL L4: INC SI LOOP L3 DEC DI JNZ L2 MOV CX, DATA1 MOV SI, 0 MOV BX, OFFSET ARRAY MOV AH,09 MOV DX,OFFSET msg3 INT 21H L5: MOV DL, 0AH ; jump onto next line MOV AH, 02H INT 21H MOV DX, [BX + SI] INC SI ADD DL, 30H MOV AH, 02 INT 21H LOOP L5 ; exit from the program MOV AH, 4CH INT 21H END