Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
nigorro
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 8
1

Не работает программа

17.04.2011, 22:04. Просмотров 420. Ответов 3
Метки нет (Все метки)

Доброго Вам времени суток.
Есть программа, которая должна считать сколько четных элементов присудствует в массиве dist_index и записывать это число в cnt, но почему то это не происходит(
т.к. как опыта программирования на ассемблере практически не имею, то обращаюсь к вам за разъяснениями, почему она не хочет работать)

Код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
.model small
.stack 100h
 
            
            
.code 
        cnt dw 0
        dist_index  dd  0b6372342h,12f71268h,324a4456h,0ff78ab07h,1234b789h ; массив дальних указателей 
        num_el=5
        mov  si, offset dist_index      ; в si адресс массива 
        mov cx, num_el; число указателей в массиве 
        
calculation: 
        test byte ptr [si], 00000001b; проверка четности младщего байта элемента массива ?
        jnz next ; нет, проверяем следующий элемент 
        inc cnt  ; да, увеличваем счетчик элементов 
            
next: 
        add si,4; si на след указатель
        loop calculation 
            
        mov  ax,cnt
    
Conversion:
        xor dx,dx ; обнуляем dx (для деления)
        div cx ; делим DX:DX na CX (10) получаем в AX частоне, в DX отстаток
        xchg ax,dx ; меняем их местами, нам нужен остаток   
        add al,'0' ; получаем в AL      символ десятичной цифры 
        stosb ; записываем ее в строку 
        xchg ax,dx ; востанавливем АХ частное 
        or ax,ax ; сравниваем АХ с 0
        jne Conversion ; если не ноль, то повторяем
    ; вывод строки на экран 
        mov ah,9
        lea dx,[di+1] ; заносим в DX  адрес  начала строки 
        int  21h; выводим ее на экран 
    string db 5 dup (?),'$' ; резервируем 5 бай для строки
    StringEnd = $-1 ; экзывает на символ $  
 end
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2011, 22:04
Ответы с готовыми решениями:

Не работает программа!
CSEG segment org 100h Start: mov ah,3 int 10h mov ax,0B800h mov es,ax...

Не работает программа
имеется прога которая удаляет лишние пробелы и заменяет пробел на символ "_",...

ПРограмма не работает
Вообщем есть программа, но она не работает. ПИшет, что ошибка в символе @....

Программа hello world не работает
вот код model small .data mesg db "Hello World! $" data end .code...

Неправильно работает программа
Есть программа из одной книги. Она должна печатать на принтере. При запуске...

3
spolyr
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 3
19.04.2011, 09:25 2
Привет, я переделал в com файл,
работает, только выводит ошибку деления на ноль
вопрос: у тебя массив из двойных слов, а элементы которые надо подсчитать тоже двойное слово, или другое?
0
murderer
3321 / 1467 / 134
Регистрация: 06.10.2010
Сообщений: 3,230
19.04.2011, 09:36 3
1) Перед меткой Conversion напиши mov cx,10
2) di нигде не инициализируется
3) lea dx,[di+1] это адрес конца строки + 1
1
nigorro
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 8
19.04.2011, 14:51  [ТС] 4
Спасибо, разобрался )) сделал другой вывод и немного инициалицую нормальную)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2011, 14:51

Не работает программа (Пирогов)
Изучаю ассемблер по Пирогову "Учебный курс". Написал программу, пытаюсь...

Некорректно работает программа
Добрый вечер ! мне нужно найти произведение всех нечетных элементов массива ,...

как работает программа???
не могли бы вы мне объяснить, что происходит в этой программе: CSEG segment...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru