Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Команда jne  (Прочитано 10394 раз)
0 Пользователей и 1 Гость смотрят эту тему.
utti
Гость
« : 10-05-2007 17:38 » 

Задание: подсчитать количество чисел в массиве, которые =0. Когда пишу команду jne(не равно), на экране кракозябры, которые невозможно остановить. А если пишу je (равно), хоть это и не соответствует условию задачи, но программа работает. Что это такое?
Код программы:
   .model   small
   .stack
   .data
mas   db 30h,32h,34h,38h,30h,34h,' '
sc   db 30h

   .code
start:
   mov   ax,@data
   mov   ds,ax

   mov di,0
   mov cx,0
   mov bx,offset mas
      
next:
   mov dl,[bx+di]   
   mov ah,02h
   int 21h
   inc di
   cmp dl,30h
   jne next ;что здесь не верно?
   inc sc
   cmp dl,' '
   je exit
   jmp next
exit:
   mov   ah,02h
   mov   dl,0Ah
   int   21h

   mov ah,02h
   mov dl,sc
   int 21h   
.exit   
   ;mov   ah,4Ch
   ;int   21h

   end   start
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 10-05-2007 17:51 » 

utti, нет опечаток ? ))
Код:
   inc di
   cmp dl,30h
   jne next ;что здесь не верно?

di и dl - нигде не попутаны ?

наверное имелось в виду
   cmp di,30h
?
Записан

Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 10-05-2007 19:46 » new

Алексей1153++, нет там же di - это индекс для адресации.

У меня вот вопрос, а что программа вообще должна делать? Потому как она печатает в цикле все символы кроме '0', а если '0' случайно попался, то она сравнивает его с пробелом, ну и поскольку пробелу он не равен, возвращается в цикл и читает следующий символ.

Так что все правильно: бесконечный цикл, выводящий содержимое памяти, начиная с некоторого адреса. Учитывая скорость работы процессора, ты даже не успеваешь заметить обработку своей строки и видишь кракозябры, а так как выхода из цикла нет, то кракозябры нельзя остановить.

Ой, прочитал сверху поста задание... Так что вопрос о том, что она должна делать снимается. Но теперь ты знаешь, что она делает на самом деле, остается только поправить Ага
« Последнее редактирование: 10-05-2007 19:49 от Scorp__) » Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines