Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2009, 22:47   #1
ManU
Пользователь Подтвердите свой е-майл
 
Аватар для ManU
 
Регистрация: 30.04.2008
Сообщений: 78
По умолчанию Цикл на ассемблере

Дан массив из 3 байт. Рассматривая его, как массив из 24 бит, посчитать количество одиночных единиц в окружении нулей. Конец последовательности рассматривать как нуль.

Почему программа работает правильно только при посмотре первого байта?

Код:
data segment 
tick1 dw ?
tick2 dw ?
mass db 10101010b,11111111b,010000000b
data ends
code segment 
assume cs:code,ds:data
start:       
       mov ax,data
       mov ds,ax
       mov dx,2
       mov tick1,dx
       lea bx, mass
       mov cx, 3
beg:   mov al,[bx]
      
M3:    
       test al,00000001b ; проверяем установлен ли 0-й бит
       jnz M1 ; если нет то к М1
       inc tick1  ;да увеличиваем счетчик для 0
       shr al,1 ;сдвигаем биты
       inc tick2; увеличиваем счетчик битов
       cmp tick2,8 ;если он равен 8-ми загружаем след байт
       je m4
       jmp M3
M1:    cmp tick1,1 ; 
       jne M2 ; если счетчик не подходит то к М2
       mov tick1,0 ;подходит обнуляем его
       inc si ; увеличиваем счетчик совпадений 010
M2:    mov tick1,0
       shr al,1
       inc tick2
       cmp tick2,8
       je m4
      jmp M3
M4:   mov tick2,0
add bx,1

loop beg 

     mov ax,4c00h
       int 21h
  code ends
  end start
ManU вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34