-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGCD.ASM
More file actions
87 lines (69 loc) · 1.25 KB
/
Copy pathGCD.ASM
File metadata and controls
87 lines (69 loc) · 1.25 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
WRITELINE MACRO VAR
LEA DX, VAR
MOV AH, 09
INT 21H
ENDM
PUTCHAR MACRO VAR
MOV DL, VAR
MOV AH, 02
INT 21H
ENDM
DISPLAY MACRO VAR, L1, L2
MOV AX, VAR
MOV BX, 10 ;INITIALIZES DIVISOR
MOV DX, 0000H ;CLEARS DX
MOV CX, 0000H ;CLEARS CX
;SPLITTING PROCESS STARTS HERE
L1: MOV DX, 0000H ;CLEARS DX DURING JUMP
DIV BX ;DIVIDES AX BY BX
PUSH DX ;PUSHES DX(REMAINDER) TO STACK
INC CX ;INCREMENTS COUNTER TO TRACK THE NUMBER OF DIGITS
CMP AX, 0 ;CHECKS IF THERE IS STILL SOMETHING IN AX TO DIVIDE
JNE L1 ;JUMPS IF AX IS NOT ZERO
L2:
POP DX ;POPS FROM STACK TO DX
ADD DX, 30H ;CONVERTS TO IT'S ASCII EQUIVALENT
MOV AH, 02H
INT 21H ;CALLS DOS TO DISPLAY CHARACTER
LOOP L2 ;LOOPS TILL CX EQUALS ZERO
ENDM
.MODEL SMALL
.DATA
M DW 56
N DW 23
GCD DW ?
MSG DB 'GCD ($'
RES DB ') = $'
.CODE
MOV AX, @DATA
MOV DS, AX
MOV AX, M
MOV BX, N
CALL GCD1
WRITELINE MSG
DISPLAY M, L1, L2
PUTCHAR ','
PUTCHAR ' '
DISPLAY N, L3, L4
WRITELINE RES
DISPLAY GCD, L5, L6
JMP EOF
GCD1 PROC
LOOP1:
CMP AX, BX
JE EOP
JA ABOVE
JB BELOW
ABOVE:
SUB AX, BX
JMP LOOP1
BELOW:
SUB BX, AX
JMP LOOP1
EOP: MOV GCD, AX
RET
GCD1 ENDP
EOF:
MOV AH, 4CH
INT 21H
END