问题:我们给了两个十进制数字,我们必须找到两个数字的GCD并以十进制格式打印GCD。
有关查找两个数字的GCD的信息,请参阅。
例子:
Input: d1 = 16, d2 = 24
Output: GCD = 8
Input: d1 = 12, d2 = 18
Output: GCD = 6
解释:
- ax中的加载值d1和bx中的加载值d2
- 调用gcd函数
- 如果bx中的值为零
- 然后将gcd(CX)的值设置为ax
- 否则将ax的值设置为bx并将bx的值设置为ax%bx
- 递归调用gcd函数
- 将cx的值加载到ax中
- 调用打印函数以打印两个数字的gcd
程序:
.MODEL SMALL
.STACK 100H
.DATA
d1 dw 16 d2 dw 24
.CODE
MAIN PROC FAR
MOV AX,
@DATA
MOV DS,
AX
;initialize ax and bx
mov bx,
d2
mov ax,
d1
;find gcd of two numbers
call gcd
;load the gcd in ax
mov ax,
cx
;print the value
CALL PRINT
;interrupt to exit
MOV AH,
4CH INT 21H
MAIN ENDP
GCD PROC
;if
bx is 0 cmp bx, 0 jne continue
;then gcd is ax
mov cx,
ax
ret
continue:
;else gcd(b, a % b)
xor dx,
dx
;divide ax by bx
div bx
;initialize ax as bx
mov ax,
bx
;and
bx as ax % bx
mov bx,
dx
;recursively call gcd
call GCD
ret
GCD ENDP
PRINT PROC
;initilize count
mov cx,
0 mov dx, 0 label1:
;if
ax is zero
cmp ax,
0 je print1
;initialize bx to 10 mov bx, 10
;extract the last digit
div bx
;push it in the stack
push dx
;increment the count
inc cx
;set dx to 0
xor dx,
dx
jmp label1
print1:
;check if count
;is greater than zero
cmp cx,
0 je exit
;pop the top of stack
pop dx
;add 48 so that it
;represents the ASCII
;value of digits
add dx,
48
;interrupt to print a
;character
mov ah,
02h int 21h
;decrease the count
dec cx
jmp print1
exit : ret
PRINT ENDP
END MAIN
输出:
8
注意:该程序无法在在线编辑器上运行,请使用MASM运行该程序,并使用dos框运行MASM,您可以使用任何8086仿真器运行该程序