Difference between revisions of "MPLab3 Sorting"

From MKWiki
Jump to navigation Jump to search
Line 67: Line 67:
 
                 INC SI
 
                 INC SI
 
LOOP L1
 
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
 
; exit from the program

Revision as of 11:38, 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
		
                MOV DX, SI      ; input element of the array
		MOV AH, 01H
		INT 21H		
              
                SUB AL,30H
		
                MOV SI, DX
		MOV [BX + SI], AX
		
                INC SI
		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