You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RISC-V排列组合实现错误排查与修正,及可重组合问题求解

RISC-V汇编实现排列组合问题排查与可重组合实现求助

一、初始排列计算错误排查

当输入M=4、N=2时,预期输出P(M,N)=12、C(M,N)=6,但实际P(M,N)=24,以下是初始代码,请排查错误并给出修正方案:

.data
str1: .string "s1113310"
m: .string "\ninput number M="
n: .string "input number N="
p_result: .string "P(M,N)="
c_result: .string "C(M,N)="

.text
main:
    la a0, str1
    li a7, 4
    ecall

    la a0, m
    li a7, 4
    ecall
    li a7, 5
    ecall
    mv s0, a0  # s0 = M

    la a0, n
    li a7, 4
    ecall
    li a7, 5
    ecall
    mv s1, a0  # s1 = N

    mv a0, s0
    jal factorial
    mv s2, a0  # s2 = M!

    sub a0, s0, s1
    jal factorial
    mv s3, a0  # s3 = (M-N)!

    div s4, s2, s3  # s4 = P(M,N) = M! / (M-N)!
    jal pp
    
    mv a0, s1
    jal factorial
    mv s5, a0  # s5 = N!

    mul s6, s3, s5  # s6 = (M-N)! * N!
    div s7, s2, s6  # s7 = C(M,N) = M! / ((M-N)! * N!)
    jal pc

    j end

pp:
    la a0, p_result
    li a7, 4
    ecall
    mv a0, s4
    li a7, 1
    ecall
    li a0, '\n'
    li a7, 11
    ecall
    ret

pc:
    la a0, c_result
    li a7, 4
    ecall
    mv a0, s7
    li a7, 1
    ecall
    li a0, '\n'
    li a7, 11
    ecall
    ret

factorial:
    li t0, 1
    mv t1, a0
loop:
    bge t0, t1, endfactorial
    mul a0, a0, t1
    addi t1, t1, -1
    j loop
endfactorial:
    ret

end:
    li a7, 10
    ecall

二、已解决排列错误,寻求可重组合H(M,N)实现帮助

已修正排列计算错误,更新后的代码如下,现尝试实现可重组合H(M,N),请提供相关解决办法:

.data
str1: .string "s1113310\\n"
m: .string "input number M="
n: .string "input number N="
p_result: .string "P(M,N)="
c_result: .string "C(M,N)=" 
h_result: .string "H(M,N)="
mn_result: .string "M^N="

.text
main:
    la a0, m
    li a7, 4
    ecall
    li a7, 5
    ecall
    mv s0, a0

    # 输入 n
    la a0, n
    li a7, 4
    ecall
    li a7, 5
    ecall
    mv s1, a0

    li t0,0
    #P(n, k) = n! / (n-k)!
    mv a0, s0
    jal factorial
    mv s2, a0
    sub a0, s0, s1
    jal factorial
    div s2, s2, a0
    mv s3, s2
    jal pp

    #C(n, k) = n! / (k! * (n-k)!)
    mv a0, s1
    jal factorial
    div s3, s3, a0
    jal pc

    #H(M,N) = C(M+N-1,N) = (M+N-1)! / (N! * (M-1)!)
    add t0, s0, s1
    addi t0, t0, -1
    mv a0, t0
    jal factorial
    mv s4, a0
    mv a0, s1
    jal factorial
    mv t1, a0
    mv a0, s0
    addi a0, a0, -1
    jal factorial
    mul t1, t1, a0
    div s4, s4, t1
    jal ph

    #M^N
    mv a0, s0
    mv a1, s1
    jal power
    mv s5, a0
    jal pmn

    j end

pp:
    la a0, p_result
    li a7, 4
    ecall
    mv a0, s3
    li a7, 1
    ecall
    li a0, '\n'
    li a7, 11
    ecall
    ret

pc:
    la a0, c_result
    li a7, 4
    ecall
    mv a0, s3
    li a7, 1
    ecall
    li a0, '\n'
    li a7, 11
    ecall
    ret

ph:
    la a0, h_result
    li a7, 4
    ecall
    mv a0, s4
    li a7, 1
    ecall
    li a0, '\n'
    li a7, 11
    ecall
    ret

pmn:
    la a0, mn_result
    li a7, 4
    ecall
    mv a0, s5
    li a7, 1
    ecall
    li a0, '\n'
    li a7, 11
    ecall
    ret

factorial:
    li t0, 1
    mv t1,a0
    addi t1,t1,-1
loop:
    bge t0, t1, endfactorial
    mul a0, a0, t1
    addi t1, t1, -1
    jal x0, loop
endfactorial:
    jr ra

power:
    li t0, 1
    mv t1, a1
loop_pow:
    beq t1, zero, end_pow
    mul t0, t0, a0
    addi t1, t1, -1
    j loop_pow
end_pow:
    mv a0, t0
    jr ra

end:
    li a7, 10
    ecall

内容的提问来源于stack exchange,提问作者Ping

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:27:09