3

我的系统编程课的一部分作业要求我们编写一个汇编模块,该模块返回一个 32 位整数中的位数,给定一个 2 到 36 范围内的基数。除一种情况外,一切正常。当我使用最大有符号正 32 位值0x7FFFFFFF和 的基数时2,代码返回32而不是31作为位数。

作为一种解决方案,我考虑通过包含检查num参数是否等于的指令来处理这种情况,如果是则0x7FFFFFFF返回 31。但是,我不确定这种方法是否正确。

我正在使用“do-while 循环”类型的算法来解决问题。

函数原型:int numOfDigits( long num, int base );

.global numOfdigits

.section ".text"

numOfDigits:

    save   %sp, -96, %sp

    clr    %l0         ! digits = 0

    mov    %i0, %o0    ! num is first argument to .div
    mov    %i1, %o1    ! base is second argument to .div

loop:

    call   .div        ! %o0 = %o0 / %o1
    nop

    inc    %l0         ! ++digits

    cmp    %o0, 0      ! while ( num != 0 )
    bne    loop
    nop

    mov    %l0, %i0    ! copy digits value into return register

    ret
    restore
4

0 回答 0