Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > помогите пожалуйста с программой


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


 #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();
}

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

Автор: Tamplier 23.4.2007, 14:05
В этой программе тоже ошибки в 1, 3, 10, 12,  15, 16, 19, 20, 24, 27 строчках как от них избавиться?
И вообще несовсем понятно, как работает программа.
Я думал, что число нужно делить на 2 и складывать остатки от деления, пока флаг ZF не примет значение 0.

Автор: ksnk 23.4.2007, 15:06
Я полагаю, что речь идет о 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 
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)