Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать программу 
:(
    Опции темы
Vinchenso
Дата 28.1.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Здравствуйте. Помогите мне пожалуйста написать программу для процессора Intel80х86 для определения количества двоичных разрядов (битов), имеющих значение "0" в массиве ячеек с адресами 0F0H-0FFH сегмента данных.
PM MAIL   Вверх
airyashov
Дата 28.1.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



в чем конкретно трудности перебирать биты или байты (слова, двойные слова)


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
MOKACO
Дата 28.1.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



хм

Это сообщение отредактировал(а) MOKACO - 28.1.2010, 18:54
PM MAIL   Вверх
Vinchenso
Дата 28.1.2010, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Ну если можно, то весь код программы. smile  
считать биты
PM MAIL   Вверх
iff
Дата 28.1.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Не знаю, может быть я сделал через ****, но:
Код

;Используется DI, CX, AX.
;При переходе к этой подпрограмме необходимо, чтобы AX содержал 0000 и свободное место в стеке в размере 1 слово.
;Результат подсчёта подпрограмма записывает в регистр AX
        MOV     DI, 0F0H
        MOV     CX, 010H
A10:    PUSH    CX
        MOV     CX, 8
A20:    ROL     BYTE PTR [DI], 1
        JC      A30
        INC     AX
A30:    LOOP    A20
        INC     DI
        POP     CX
        LOOP    A10

Проверил в debug. Работает.

Это сообщение отредактировал(а) iff - 28.1.2010, 22:31


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Vinchenso
Дата 29.1.2010, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



iff, Спасибо тебе большое!  smile 
PM MAIL   Вверх
Mikl_
Дата 29.1.2010, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



iff
это скорее для вас, так как Vinchenso, скорее всего, сюда уже не заглянет
Цитата
определения количества двоичных разрядов (битов), имеющих значение "0" в массиве ячеек с адресами 0F0H-0FFH сегмента данных. 
lдля начала составляем таблицу из 256 ячеек в каждой ячейке количество 0-ых битов соответствующее номеру ячейки
Код
.data
table db 8,7,7,6,7,6,5,7,6,...,1,0; 256 элементов
sum dw 0; здесь будет результат
.code
       mov bx,offset table
       mov cx,0FFh-0F0h+1; общее количество обрабатываемых элементов
       mov ah,0
       mov si,0F0h; начало массива элементов
a1:  lodsb
       xlat; получаем количество нулей в элементе
       add sum,ax
       loop a1



Это сообщение отредактировал(а) Mikl_ - 29.1.2010, 05:17
PM MAIL   Вверх
Vinchenso
Дата 29.1.2010, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.1.2010

Репутация: нет
Всего: нет



Mikl_,  почему же? Я здесь smile  Я же за помощью сюда пришел. Спасибо Mikl_!

Это сообщение отредактировал(а) Vinchenso - 29.1.2010, 08:25
PM MAIL   Вверх
iff
Дата 29.1.2010, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Я понял. Вы в таблице ищите номер байта, совпадающего со значением проверяемого байта и по этой таблице узнаёте ко-во нулей.
Но ведь эта "матрица" будет весит аж 256 байт! Более того нам ещё придётся вычислять эту таблицу, скорее всего нужно будет написать быстренько маленькую программу для вычисления значений таблицы, сделать это например можно на Бейсике (Я часто использую QB, но не для написания программ, а как "интерпретатор командной строки", когда к примеру, нужно выполнить рутинную работу). Возможно вы выиграете в скорости, но поскольку нам нужно проверить всего лишь 16 байт, то не на много. Я проверял, мой код исполняется мгновенно!


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
kjrjgsnjd
Дата 15.10.2012, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 15.10.2012

Репутация: нет
Всего: нет



Помогите откомпликтовать чтобы программа работала в winAsm Studuo

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  лр.txt 0,88 Kb
PM MAIL   Вверх
Maarriiaa
Дата 21.3.2014, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.3.2014

Репутация: нет
Всего: нет



здравствуйте. подскажите пожалуйста, в чем ошибка?
 вот программа, которая подсчитывает количество единиц в двоичной записи числа
 mov ax,1101
 start:
 mov dx,1 
 mov cx,2
 mrp:
 push ax
 and ax,1 
 cmp ax,1 ;сравниваем с 1
 jne msk ;переходим к мск если два числа не равны
 inc dx ;увеличиваем содержимое памяти на 1
 msk:
 pop ax
 shr ax,1 ; сдвигаем на 1 вправо
 loop mrp
 mov ax,1
 int 0x80
 но на выходе всегда 0 . Что не так?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1343 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.