Programa 8086 para encontrar el MCD de dos números e imprimir el MCD

Problema: Nos dan dos números decimales, tenemos que encontrar el MCD de dos números e imprimir el MCD en formato decimal.
Consulte para encontrar el MCD de dos números .

Ejemplos: 

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

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

Explicación: 

  1. Carga valor d1 en ax y d2 en bx
  2. Llamar a la función gcd
  3. Si el valor en bx es cero
  4. Luego establezca el valor de mcd (CX) como hacha
  5. De lo contrario, establezca el valor de ax como bx y el valor de bx como ax % bx
  6. Llame a la función gcd recursivamente
  7. Cargue el valor de cx en ax
  8. Llame a la función de impresión para imprimir el mcd de dos números

Programa: 

.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
  
;initialize 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

Producción: 

8

Nota: el programa no se puede ejecutar en un editor en línea, use MASM para ejecutar el programa y use dos box para ejecutar MASM, puede usar cualquier emulador 8086 para ejecutar el programa
 

Publicación traducida automáticamente

Artículo escrito por andrew1234 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *