Это не сложно и не сложно, но я просто понял это и надеюсь, что это может кому-нибудь помочь.
Он работает, выполняя операцию 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