На главную Наши проекты:
Журнал   ·   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
      include 'emu8086.inc'
      org 100h
       
      MOV AH,0
      MOV DH,3  
      MOV BX,9
      MOV DL,0
       
      MOV CX,8
        
       
      for1:
       
      MOV AL, mass[BX]
       
      for2:
       
      SHL AL, 1
      ADC AH, 0                                      
       
      LOOP for2
       
      CMP AH,DH  
      JE var
       
      var:
      ADD DL,1
       
      MOV d,DL
       
      DEC  BX, 1
      JNS for1
       
       
       
      d db ?
       
      ret
       
       
      mass db 1,11,7,4,5,6,5,8,11,10
      Цитата noob322 @
      ExpandedWrap disabled
        CMP AH,DH  
        JE var
         
        var:

      Если условие выполняется, переходим на метку согласно инструкции.
      Если оно не выполняется - переходим на метку как следующий оператор.
        То есть?
          То есть ход выполнения не зависит от результата сравнения.
            А как сделать правильно,чтоб зависело?
              Так, как тебе уже один раз говорили.
              Применение логических инструкций (сообщение #3635041)
                Прост,я хотел попроще сделать..А там слишком сложно для меня :blink:
                  Нет там ничего сложного. Просто надо потратить немного времени и разобраться, как оно работает.
                    А вот данный код никак нельзя подправить?
                      Открой Эксель. В первую колонку помести код, назови её Код. Остальные колонки назови AX, AH, AL, BX, CX, DX, SI, CF. Дополнительно сделай колонку Стек. И "выполняй" код по одной команде, соотв. образом изменяя значения "регистров" (неизвестные/неопределённые чисти).
                        Вообщем я вас понял...
                          Цитата noob322 @
                          Помогите найти ошибку
                          В CX у вас заносится 8, чтобы все биты проанализировать, но в цикле LOOP оно уменьшается, а потом (на новом байте для анализа) оно никак не восстанавливается! Т.е. надо записать так:
                          ExpandedWrap disabled
                            for1:
                            MOV CX,8
                            ...


                          Добавлено
                          Так же и с AH. Надо так:
                          ExpandedWrap disabled
                            for1:
                              MOV CX, 8
                              MOV AH, 0
                               ...


                          Добавлено
                          Ну и тот блок, на ко-й вам указал B.V. надо так поправить:
                          ExpandedWrap disabled
                            CMP AH, DH ;кол-во бит совпало с искомым, с тремя?
                            JNE var ;не совпало - неинтересный байт - прыгнем дальше
                            ADD DL, 1 ; совпало - увеличим найденных байт на 1
                            var:
                            Готов поспорить в методичке есть описание инструкций и примеры использования

                            Славян
                            Цитата
                            Ну и тот блок, на ко-й вам указал B.V. надо так поправить:

                            Кто такой B.V.?
                              Цитата sourceman @
                              Кто такой B.V.?
                              Тьфу, прошу пардона, с Akina'ой попутал. :oops:
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0405 ]   [ 16 queries used ]   [ Generated: 23.04.24, 11:14 GMT ]