Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите пожалуйста с программой 
:(
    Опции темы
Tamplier
Дата 23.4.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Надо написать программу, которая бы считала количество едениц в двоичном числе.  Вот мой код, но в нём есть ошибки, помогите пожалуйста их исправить.


 #include <stdio.h>
void main()
{
    int a;
    int c=2;
    int q;
    printf("\n Enter number a=");
    scanf("%d",&a);
    asm {
        mov bx,0
        mov ax,a
       }
    l1:
        asm {
        div c
        add bx,dx
        mov q,bx
        loope l1
       }
    printf("\n kolichestvo edenic=", q);
    getchar();
    getchar();
}
PM MAIL   Вверх
ksnk
Дата 23.4.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



А в каком месте в коде нет ошибок? smile
Я бы сделал примерно так...
asm {mov Ax,a}
l1: asm {
   shl Ax,1
   adc q,0
   Or  Ax,Ax
   jnz l1
}


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Tamplier
Дата 23.4.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В этой программе тоже ошибки в 1, 3, 10, 12,  15, 16, 19, 20, 24, 27 строчках как от них избавиться?
И вообще несовсем понятно, как работает программа.
Я думал, что число нужно делить на 2 и складывать остатки от деления, пока флаг ZF не примет значение 0.
PM MAIL   Вверх
ksnk
Дата 23.4.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Я полагаю, что речь идет о Boralnd-С 3.1 или около того?
Ага! Немного понятнее...
        div c - вы в курсе. что операция div использует пару DX:AX как длинное слово? Что у вас было в DX?
 
       loope l1 - использует CX как счетчик цикла. Где инициализация СX?

У меня 
     shl Ax,1 - сдвигает все биты вверх, а самый верхний попадает в регистр флагов -СF
    adc q,0 - прибавляет значение этого самого СF к значению q
   Or Ax,Ax; jnz l1 - если В Ax остался 0 - прекращаем работу...

Ошибки в С исправляйте сами smile 
 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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