Зацикливание массива байтов довольно просто (я предполагаю, что вам следует остановиться, когда вы встретите отрицательное число, но ваша ситуация может измениться):
mov esi, pointerToByteArray
loop_start:
mov al, [esi]
cmp al, 80h
jge loop_end
; Do your byte-checking code here
inc esi
jmp loop_start
loop_end:
Когда цикл завершится, общее количествоколичество элементов будет esi-pointerToByteArray
.Вторую часть вы уже сделали, вы этого не поняли.Вы используете код операции cmp так же, как:
cmp al, threshold
jge not_threshhold
; add to threshold counter
not_threshold:
Третья часть тоже довольно проста, но она потребует некоторых знаний о битых трюках.Вы должны знать, что у каждого четного числа будет очищаться младший значащий бит (1-е место), поэтому, если вы удалите 7 верхних битов, у вас будет либо 1 (для нечетных чисел), либо 0 (для четных):
mov bl, al
and bl, 1
jnz not_even
; add to even counter
not_even:
Самый простой способ выполнить часть 4 - проверить каждое простое число, меньшее или равное 127 (максимальное значение положительного байта):
cmp al, 2
je is_prime
cmp al, 3
je is_prime
cmp al, 5
je is_prime
cmp al, 7
je is_prime
; all the primes up to 127
jmp not_prime
is_prime:
; add to prime counter
not_prime:
Пожалуйста, обратите внимание, что есть намного лучше, более эффективныйи элегантные способы проверить на первичность, чем это, но это должно сделать работу.Не зная больше информации, я не могу сказать вам, как выводить информацию, которую вы собираете.