Как подсчитать и напечатать ведущие нули в 32-битном целом числе в сборке MIPS - PullRequest
0 голосов
/ 21 апреля 2020

Это не сложно и не сложно, но я просто понял это и надеюсь, что это может кому-нибудь помочь.

Он работает, выполняя операцию AND logi c с целым числом, представленным в крайнем левом начальном бите ( т.е. 2 ^ 31) и десятичное целое число, с которым мы работаем, затем загружаем результат этой операции во временный регистр. Затем мы проверяем, содержит ли этот регистр 0 или 1, и используем его для определения остальной функциональной логики c.

. Мы продолжаем запрашивать крайний левый бит и смещаем биты числа влево, затем остановка, когда мы находим 1 и печать значения в регистре счетчика.

Существуют также меры предосторожности, чтобы убедиться, что мы проверяем только 32 бита, и считать только 32 бита числа, равного 0.

Удачи !!

.text
#Test number
li $t0, 1


#Counter for number of leading zeros
li $t2, 0
#Counter for bits traveled
li $t3, 0

countLoop:
    #Check if checked 32 bits
    beq $t3, 32, countLoopDone

    #Query first bit
    andi $t4, $t0, 2147483648

    #See if first bit is zero or nah
    bnez $t4, countLoopDone

    #Add to leading zero counter
    addi $t2, $t2, 1
    #Shift number to the left by one bit
    sll $t0, $t0, 1
    #Add to bits travelled counter
    addi $t3, $t3, 1

    #Jump to loop
    j countLoop

countLoopDone:
    li $v0, 1
    move $a0, $t2
    syscall
...