Здрасте, помогите начинающему разобраться .model tiny ; com - files .code org 100h start: mov cx,32 mov dl,0 lab: inc dl test dl,0Fh (как здесь значение регистра dl проверяется на кратность 16(Fh- это же 15) ) jnz continue inc dl continue: loop lab
Число X кратно 16 (и вообще любой степени двойки), если X and (16-1) == 0 test - это проверка операции AND. Таким образом ZF после выполнения test dl, 15 будет равен 1 только если число в DL кратно 16-ти ЗЫ. Почеему так происходит с операцией побитового "И" (and) ясно, если расписать число в битовом варианте. допустим, число в DL имеет вид ABCDEFGH (8 бит этого числа), 15 представляет собой 1111. ABCDEFGH & 1111 = EFGH Если EFGH == 0000, то это означает что число в DL имеет вид ABCD0000 или D * 2^4 + C * 2^5 + B * 2^6 + A * 2^7 = 2^4( D + C*2 + B*4 + A*8), то есть число кратно 2^4 = 16. ясно?
так and же это битовая операция..как она для 10-ти работает прошу прощения за дремучесть...я в асме 2-ой день...поэтому в голове каша небольшая с регистрами
rubic_ Посмотри двоичное представление чисел степени двойки и посмотри их остатки. Потом поймёшь что за битовыми операциями стоит.