На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Применение логических инструкций
    Доброго времени суток) Народ,помогите разобраться с такой задачей (даже не представляю как это должно выглядеть :-? ):
    Дан массив из 10 байт. Посчитать кол-во байт с числом единиц в байте равным 3.
      Примерно так:
      ExpandedWrap disabled
        char a[10]="proba PeRA";
        int count=0;
        for( int i=0; i<10; i++) // символы анализируем
        {
          int bits=0; // сколько единичек
          for( int b=0; b<8; b++) // все биты проверяем
            if( a[i]&(1<<b) ) bits++; // о, единичка!
          if( bits==3 ) count++; // 3 штуки -> нужный символ!
        }
        // выдать count
      с переводом в ASM, само собой. :blush:

      Добавлено
      Есть, правда, инструкция popcnt, считающая сколько уже единичек в байте, но... вас наверняка просят без оной сделать.
        С переводом то и все проблемы :D
          Цитата noob322 @
          С переводом то и все проблемы
          Набросайте что получилось, там и посмотрим где ошибки. ;)
            ExpandedWrap disabled
              mov si,[array]
              cld
              xor ax,ax
              xor dx,dx
              mov cx, 10
              loop_array:
              push cx
              lodsb
              mov cx,8
              xor ah,ah
              loop_bits:
              rcr al
              adc ah, 0
              loop loop_bits
              cmp ah,3
              jne next_byte
              inc dx
              next_byte:
              pop cx
              loop loop_array
              mov ax,dx
              ret
              А где у вас массив задается?
                Цитата noob322 @
                Посчитать кол-во байт с числом единиц в байте равным 3.

                Делаешь массив из 256 элементов помечаешь нужные. Читываешь байт и проверяешь соответствующий элемент в массиве, если помечен - значит этот байт подходящий :lol:
                А так нормальное решение предложил Akina.
                Сообщение отредактировано: shm -
                  Цитата noob322 @
                  где у вас массив задается?

                  Вот мне больше делать нечего... ты вопрос формулируешь как?
                  Цитата noob322 @
                  Дан массив из 10 байт. Посчитать кол-во байт с числом единиц в байте равным 3.

                  Массив уже дан, надо только посчитать. Где и как - не мои проблемы. Разбирайся и цепляйся к массиву, который "дан".
                    Прост чтобы проверить данное решение,надо ж с конкретным массивом работать
                      Цитата noob322 @
                      чтобы проверить данное решение,надо ж с конкретным массивом работать

                      Ну так сгенери тестовый массив. Хоть статический в коде. Какая нафиг разница, откуда он возьмётся? Заодно будешь правильный ответ знать.
                        mov si,[array] вот тут ошибка при компиляции,не подскажете из-за чего?
                          offtop
                          Цитата noob322 @
                          не подскажете из-за чего?

                          На этом месте должно было быть написано "угадайте, какая"...
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0356 ]   [ 16 queries used ]   [ Generated: 26.04.24, 07:47 GMT ]