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:
- Carga valor d1 en ax y d2 en bx
- Llamar a la función gcd
- Si el valor en bx es cero
- Luego establezca el valor de mcd (CX) como hacha
- De lo contrario, establezca el valor de ax como bx y el valor de bx como ax % bx
- Llame a la función gcd recursivamente
- Cargue el valor de cx en ax
- 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