📜  8086程序查找两个数字的GCD并打印GCD

📅  最后修改于: 2021-06-28 15:39:29             🧑  作者: Mango

问题:我们给了两个十进制数字,我们必须找到两个数字的GCD并以十进制格式打印GCD。

有关查找两个数字的GCD的信息,请参阅。

例子:

Input: d1 = 16, d2 = 24
Output: GCD = 8

Input: d1 = 12, d2 = 18
Output: GCD = 6 

解释:

  1. ax中的加载值d1和bx中的加载值d2
  2. 调用gcd函数
  3. 如果bx中的值为零
  4. 然后将gcd(CX)的值设置为ax
  5. 否则将ax的值设置为bx并将bx的值设置为ax%bx
  6. 递归调用gcd函数
  7. 将cx的值加载到ax中
  8. 调用打印函数以打印两个数字的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仿真器运行该程序