Вопрос № 183532: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Задание такое Дана двухбайтовая двоичная строка. Найти, сколько раз в ней встречается сочетание 110 и на каких позициях Мне предложили решение, но когда прогоняю программу в count...
Вопрос № 183532:
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Задание такое Дана двухбайтовая двоичная строка. Найти, сколько раз в ней встречается сочетание 110 и на каких позициях
Мне предложили решение, но когда прогоняю программу в count ничего и в dwarray случайные значения. Прошу помочь с данным заданием.
.286 .model tiny .stack 256 ;.org 100h
.data string dw 1100010110101110b count db 0 dwArray label byte
.code 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;выход end begin
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
Существуют несколько моделей организации памяти, каждая характеризуется количеством и совмещенностью сегментов кода, данных и стека. Для каждой из них есть определенные правила написания и компиляции. Одна из моделей TINY. Её особенности: - программа всегда начинается с адреса 100h; - размер программы не больше 64Кб; - префикс программы, сегмент кода, данных и стека совмещены; - сегментные регистры имеют одинаковое значение и их не нужно настраивать(см.
выше); - программисту нужно следить, что бы данные не стали, вдруг кодом :). Ключи компиляции: TASM: /t; MASM: /At) Вот собственно и всё о модели, если кратко.
Теперь, об отладке программы: Анализируя код, нужно обращать внимание на используемые команды. Для формирования массива используется строковая команда: STOS(B,W,D), её особенностью является использование регистров AL(AX,EAX), ES и DI(EDI). Команда записывает содержимое аккумулято
ра по адресу, расположному в паре регистров ES:DI и автоматически увеличивает DI, т.е.где-то до использования команды будет присвоение нужным регистрам некоторого значения, смотрирм:
Есть команда MOV DI,012Bh это и будет адрес начала формируемого массива. После строковой команды есть ещё одна, которая увеличивает счетчик найденых последовательностей: INC BYTE PTR[012A] Аналогичную
информацию можно увидеть и в LST-файле(ключи компилятора TASM: /l; MASM: /Fl)
Итак, есть два адреса 012А и 012В, с помощью клавиш управления настраиваем окно дампа:
запускаем программу и смотрим результат:
вопросы задавайте в минифорум. Удачи!
----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч
Ответ отправил: Зенченко Константин Николаевич (Модератор)
Ответ отправлен: 08.06.2011, 11:52
Номер ответа: 267637 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267637
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.