Консультация № 183408
29.05.2011, 20:46
53.35 руб.
0 6 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

Дана двухбайтовая двоичная строка.
Найти, сколько раз в ней встречается сочетание 110 и на каких позициях (сформировать массив начальных позиций).

TASM DOS

Обсуждение

давно
Посетитель
7438
7205
30.05.2011, 12:11
общий
Как задаем слово (двухбайтовую двоичную строку)?
В теле программы? Вводим? Если вводим, то в каком виде?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
30.05.2011, 12:21
общий
30.05.2011, 12:21
Строка задана в программе:
string dw 1100010110101110b
давно
Старший Модератор
31795
6196
31.05.2011, 11:50
общий
это ответ
Здравствуйте, Посетитель - 375878!

Смотрите приложение:
Код:
model	tiny
.code
org 100h
begin: mov cx,string;исходное число
mov bx,0110b;исходное значение
mov dx,0111b;маска поиска
xor ax,ax;счетчик бит
lea di,dwArray;адрес массива
@@01: push cx;запоминаем число
and cx,dx;накладываем маску
xor cx,bx;сравниваем
jnz @@02;несовпало перехаод
stosb;записываем позицию
inc byte ptr count;увеличиваем счетчик совпадений
@@02: pop cx;востанавливаем число
inc ax;следующий бит
shl bx,1;сдвигаем исходное значение
shl dx,1;сдвигаем максу
jnc @@01;пока нет переполнения проверяем
xor ax,ax;ждем любую клавишу
int 16h;
ret;выход
string dw 1100010110101110b
count db 0
dwArray label byte
end begin


Работу программы можно посмотреть в отладчике, к примеру DEBUG.EXE

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
01.06.2011, 00:26
общий
Не совсем понял назначение маски.

and cx,dx;накладываем маску
xor cx,bx;сравниваем

Буду признателен за ответ.
давно
Старший Модератор
31795
6196
01.06.2011, 10:41
общий
01.06.2011, 10:50
Маска служит для выделения проверяемых бит в исходном числе. Можно проверить с помощью команды:
TEST АХ,0000000000010000b один бит, но не всю комбинацию. Для проверки комбинаций нужно последовательно проверять каждый бит, а это усложняет код.

Смотрите Ваше число:
1100010110101110=число
0000000111000000=маска
0000000110000000=операция "И" над числом
0000000110000000=проверяемая комбинация
0000000000000000=XOR
или
1100010110101110=число
0000000000001110=маска
0000000000001110=операция "и" над числом
0000000000001100=проверяемая комбинация
0000000000000010=XOR
Если совпали, то "XOR" даст ноль иначе там будет в одном(или нескольких) из разрядов "1".
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
01.06.2011, 10:58
общий
Спасибо, разобрался.
Форма ответа