.DATA ; reserve storage for data
explain BYTE "This will calculate the greatest common divisor of two numbers.",cr,Lf,0
prompt1 BYTE "First number: ",0
prompt2 BYTE "Second number: ",0
string BYTE 20 DUP (?) ; for inputing each number
a DWORD ? ; for temporary storage
final BYTE cr,Lf,"The GCD is: " ; final output control
gcd BYTE 11 DUP (?)
BYTE cr,Lf,0
.CODE ; start of main program code
_start:
output explain ; outputs explanation
output prompt1 ; prompt output
input string,20 ; inputs into string
atod string ; converts ASCII to doubleword
mov ebx, eax ; moves first number to ebx
output prompt2 ; prompt output
input string,20 ; inputs into string
atod string ; converts ASCII to doubleword
mov edx, eax ; moves second number to edx
aloop: mov a, edx ; copies ebx into temp variable a
mov eax, ebx ; preps for division by copying ebx into eax
div edx ; divides by edx, edx now holds the remainder
mov ebx, a ; copies a back into ebx
cmp edx,0 ; compare edx (the "remainder" of the div) to 0
jz exitplace ; jump if zero
loop aloop ; loop back to aloop
exitplace: dtoa gcd, ebx
output final ; outputs final prompts