| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| А в каком месте в коде нет ошибок? Я бы сделал примерно так... 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 - прекращаем работу... Ошибки в С исправляйте сами |