-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.asm
More file actions
93 lines (85 loc) · 1.65 KB
/
Copy pathmain.asm
File metadata and controls
93 lines (85 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
.model tiny
.stack 100h
; Written By Yasir Nadeem - during the course Microprocessor and Assembly Language
.data
arr db 5,4,7,2,11,14
len = $-arr
nArr db len*4 dup ('$') ; Multiply by 4 because there are two nodes for a root and each node has two children
nArrLen = $-nArr ; newArr Length
sorted db len dup ('$') ; resultant Array
.code
main proc
mov dl, arr[0]
mov nArr[0], dl
xor bx, bx
mov bl, 1
; Forming a binary tree
binaryLoop:
cmp bl, len
je exitLoop
mov si, 0
mov dl, arr[bx]
call comparison
mov nArr[di], dl
inc bl
jmp binaryLoop
exitLoop:
mov si, 0
mov di, 0
xor bl, bl
push dx
call inOrder
pop dx
; Inorder traversal for sorted array
ret
endp main
; 1st Param -> SI - rootIndex
; 2nd Param -> DL = element
; result in DI
comparison proc
cmp nArr[si], '$'
jne cont
mov di, si
ret
cont:
cmp dl, nArr[si]
jg rightComp
sal si, 1
inc si
call comparison
jmp endL
rightComp:
sal si, 1
add si, 2
call comparison
endL:
mov di, si
ret
endp comparison
; 1st Param - rootIndex - SI
; uses DI as an index for resultant array
inOrder proc
cmp si, nArrLen
jge exitInOrder
contt:
push si
sal si, 1
inc si
call inOrder
pop si
cmp nArr[si], '$'
je cont2
xor dl, dl
mov dl, nArr[si]
mov sorted[di], dl
inc di
cont2:
push si
sal si, 1
add si, 2
call inOrder
pop si
exitInOrder:
ret
endp inOrder
end main