Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Alexxx221
-23 / 1 / 1
Регистрация: 27.11.2012
Сообщений: 20
1

Массив: посчитать количество одиночных единиц в окружении нулей

24.04.2013, 19:49. Просмотров 1281. Ответов 6
Метки нет (Все метки)

Помогите решить,не могу понять!
13. Дан массив из 3 байт. Рассматривая его, как массив из 24 бит, посчитать количество одиночных единиц в окружении нулей. Конец последовательности рассматривать как нуль.
Текст программы:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
что не так с этой программой!?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 19:49
Ответы с готовыми решениями:

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

Посчитать количество нулей в окружении единиц
Здравствуйте, уважаемые программисты. Помогите с решением задачки: есть массив из 9 байт. Нужно его...

Дан массив из 8 байт. Рассматривая его, как массив из 64 бит, посчитать количество единиц
кто может, напишите пожалуйста, с ассемблером беда( 2. Дан массив из 8 байт. Рассматривая его,...

Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать в нем количество нулей.
Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать в нем количество нулей...

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

6
Argogo
643 / 244 / 42
Регистрация: 29.03.2013
Сообщений: 539
25.04.2013, 19:14 2
Цитата Сообщение от Alexxx221 Посмотреть сообщение
Конец последовательности рассматривать как нуль.
это как, типа бит24=0, бит25=0, и тд.? Если так, то имеем:
Массив: посчитать количество одиночных единиц в окружении нулей

где MyVar - битовый массив, для простоты рассматриваемый как 32-битная переменная(dword), у которой старший байт равен нулю. Count010 - счетчик количества вхождений "010". Shifted - счётчик сдвинутых бит.
Реализация сдвига зависит от размерности разрешенных к использованию регистров (т.е. 8, 16 или 32 бита). Если нельзя пользоваться 32х битными регситрами, то, ИМХО, сдвиг лучше оформить в виде подпрограммы:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
Shift   PROC    NEAR
    push    bx
    mov bx, offset MyVar
    mov al, [bx+2]
    shr al, 1
    mov [bx+2], al
    mov ax, [bx]
    rcr ax, 1
    mov [bx], ax
    pop bx
    ret
Shift   ENDP
после её вызова останется сделать
Assembler
1
2
    and al, 111b
    cmp al, 010b
и далее согласно блок-схеме.
0
Alexxx221
-23 / 1 / 1
Регистрация: 27.11.2012
Сообщений: 20
25.04.2013, 19:26  [ТС] 3
если честно я не особо понял,что вы написали!?
0
Argogo
643 / 244 / 42
Регистрация: 29.03.2013
Сообщений: 539
25.04.2013, 20:16 4
что именно непонятно, уточняй, а то задавать наводящие вопросы мне быстро надоедает, мне становится скучно и я линяю.
0
Mikl___
Автор FAQ
13388 / 6388 / 631
Регистрация: 11.11.2010
Сообщений: 11,555
26.04.2013, 03:50 5
Цитата Сообщение от Alexxx221 Посмотреть сообщение
если честно я не особо понял,что вы написали!?
Argogo, перевожу
ТС какбэ прозрачно намекает "не будет ли любезен многоуважаемый Джин написать за Alexxx221 программу без этого словоблудия?"
0
КонецСвета
01.05.2013, 00:54
  #6
 Комментарий модератора 
Alexxx221, раз уж вы обратились за помощью, проявите уважение к людям, которые захотят вам помочь.
0
KSanch
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 4
26.10.2014, 17:06 7
Добрый вечер, форумчане. задание такое же, пошел по другому пути, т.к. нельзя использовать подпрограммы. Подскажите пожалуйста, что не так с программой.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
data segment
a dw ?
mass db 10101010b, 10101010b, 10101010b
data ends
data segment
assume cs: code, ds: data
start:
mov ax, data
mov ds, ax
xor dx, dx
mov cx, 3
lea bx, mass
beg: mov al, [bx]
beg1:
jc no
test al,1
jz no
test al, 2
jnz no
inc dx
no: loop beg1
shr ax,1
loop beg
mov a, dx
quit:mov ax, 4c00h
int 21h
code ends
end start
опирался на

оrg 100h
mov eax, 011101101010101b ; eax содержит исходный массив
xor bx, bx ; bx = искомое число единиц
mov cx, 24 ; проверяем 24 бита
clc ; чтобы вначале jc не переходил
..next_bit: ; цикл: на каждом шаге проверяем 0-ой бит
jc .notfound ; если предыдущий равен 1 - переход
test ax, 1 ; проверяем 0-ой бит
jz .notfound ; если он равен 0 - переход
test ax, 2 ; проверяем 1-ый бит
jnz .notfound ; если он не равен 0 - переход
inc bx ; увеличиваем счетчик
..notfound:
shr eax, 1
loop .next_bit

заранее спасибо
0
26.10.2014, 17:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2014, 17:06

Дан массив из 10 байт. Посчитать количество единиц во всех разрядах, кратных трём: 3, 6, 9, …, 75, 78
Всем здрасьте. Знаю были посты на эту тему,но я сам писал задачу. У меня проблема. С переходами,не...

Дан массив из 10 байт. Посчитать количество единиц во всех разрядах, кратных трём: 3, 6, 9, …, 75, 78
Помогите пожалуйста.

Дан массив из 10 байт. Посчитать количество единиц во всех разрядах, кратных трём: 3, 6, 9, …, 75, 78
помогите пожалуйста найти ошибки! заранее спасибо) Ассемблер. Дан массив из 10 байт. Посчитать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru