Assembly 我正试图做一个程序,找出两个正整数的GCD。我做错了什么?I';我在做覆盆子皮3 你为什么认为这是错误的?是数学问题还是编程问题?我一直认为GCD是0,而我只是让程序工作而已@dannyc30酷!把你找到的答案作为你自己问题的答案吧!如果您用文字解

Assembly 我正试图做一个程序,找出两个正整数的GCD。我做错了什么?I';我在做覆盆子皮3 你为什么认为这是错误的?是数学问题还是编程问题?我一直认为GCD是0,而我只是让程序工作而已@dannyc30酷!把你找到的答案作为你自己问题的答案吧!如果您用文字解,assembly,arm,Assembly,Arm,我正试图做一个程序,找出两个正整数的GCD。我做错了什么?I';我在做覆盆子皮3 你为什么认为这是错误的?是数学问题还是编程问题?我一直认为GCD是0,而我只是让程序工作而已@dannyc30酷!把你找到的答案作为你自己问题的答案吧!如果您用文字解释原始代码中的错误,这将是一个更好的答案。 .cpu cortex-a53 .fpu neon-fp-armv8 .data message1: .asciz "Enter a positive integer: &quo

我正试图做一个程序,找出两个正整数的GCD。我做错了什么?I';我在做覆盆子皮3
你为什么认为这是错误的?是数学问题还是编程问题?我一直认为GCD是0,而我只是让程序工作而已@dannyc30酷!把你找到的答案作为你自己问题的答案吧!如果您用文字解释原始代码中的错误,这将是一个更好的答案。
.cpu cortex-a53
.fpu neon-fp-armv8

.data

    message1: .asciz "Enter a positive integer: "
    message2: .asciz "Enter another positive integer: "
    input: .asciz "%d"
    output: .asciz "The GCD is: %d\n"

.text
.align 2
.global main
.type main, %function

main:

    push {fp,lr}
    add fp, sp, #4

    @ printing out message
    ldr r0, =message1
    bl printf 
    
    @ getting user input
    ldr r0, =input
    sub sp, sp, #4
    mov r1, sp
    bl scanf
    ldr r5, [sp]

    ldr r0, =message2
    bl printf
    
    @ getting user input
    ldr r0, =input
    sub sp, sp, #4
    mov r1, sp
    bl scanf
    ldr r6, [sp]

compare: 

    cmp r5, r6
    bge loop
    b swap
swap:
    
    add r5, r5, r6
    sub r6, r5, r6
    sub r5, r5, r5

loop:
    
    udiv r4, r5, r6
    mul r4, r4, r6
    sub r4, r5, r4
    cmp r4, #0
    beq doneLoop
    mov r5, r6
    mov r6, r5
    b loop
    
doneLoop:
    
    ldr r0, =output
    bl printf
    mov r1, r4
    bl printf
    
    sub sp, fp, #4
    pop {fp, pc}
.cpu cortex-a53
.fpu neon-fp-armv8

.data

    message1: .asciz "Enter a positive integer: "
    message2: .asciz "Enter another positive integer: "
    
    output: .asciz "The GCD is: %d\n"
    input: .asciz "%d"

.text
.align 2
.global main
.type main, %function

main:

    push {fp,lr}
    add fp, sp, #4

    @ printing out message
    ldr r0, =message1
    bl printf 
    
    @ getting user input
    ldr r0, =input
    sub sp, sp, #4
    mov r1, sp
    bl scanf
    ldr r5, [sp]

    ldr r0, =message2
    bl printf
    
    @ getting user input
    ldr r0, =input
    sub sp, sp, #4
    mov r1, sp
    bl scanf
    ldr r6, [sp]

compare: 

    cmp r5, r6  @ r5 - r6
    bge loop  
    
swap:

    @ swap r5 and r6
    add r5, r5, r6
    sub r6, r5, r6
    sub r5, r5, r6

loop:
    
    @ calculates the remainder
    udiv r4, r5, r6
    mul r4, r4, r6
    sub r4, r5, r4
    cmp r4, #0
    beq doneLoop
    mov r5, r6
    mov r6, r4  @ r6 is the remainder
    @b compare

    @ re run the loop
    b loop  

doneLoop:
    
    @ print output message
    ldr r0, =output
    mov r1, r6   @ moves value of r6 into %d of output message
    bl printf
    
    sub sp, fp, #4
    pop {fp, pc}