Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 14:17   #1
admiral121
 
Регистрация: 11.12.2010
Сообщений: 9
По умолчанию Работа с массивом, ошибка

Код:
data segment
  mass db 1,12,20,14,3,7,15,31,23,2
   kol db ?
data ends

code segment
  assume cs:code,ds:data

start:
  mov ax,data
  mov ds,ax
  mov dx,0
  mov bx,mass; загрузка адреса смещения массива
  mov cx,10  ; установка воличества повторений цикла
beg:
  cmp byte ptr bx,12h; сравниваем элемент массива
  jle no; он меньше или равен
  cmp byte ptr bx,0afh; сравниваем элемент массива
  jge no; он больше или равен
  inc bx
  inc bx
  add dx,1
  mov kol,dx
no:
  inc bx
  loop beg
quit: mov ax,4C00h
      int 21h
code ends
end start
вот код программы. Нужно найти колличество чисел в массиве больше 12h и меньше 0afh. Подскажите что не так и помогите исправить ошибку. Очень прошу не переписывать полностью программу, потому что нужно использовать только самые простые операнды и т.д.
admiral121 вне форума Ответить с цитированием
Старый 17.12.2010, 15:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
cmp byte ptr bx,12h; сравниваем элемент массива
а не
Код:
cmp byte ptr [bx],12h;
ли?
Цитата:
inc bx
inc bx
Зачем два раза? у тебя же массив байт. Один раз надо увеличивать.
Цитата:
mov kol,dx
Ну это вообще в конец мона перенести...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2010, 17:07   #3
admiral121
 
Регистрация: 11.12.2010
Сообщений: 9
По умолчанию

Спасибо, немного подправил, ошибки исчезли. Но компилятор ругается поему то на mov kol dx. И программа ВСЁ РАВНО НЕ РАБОТАЕТ ПРАВИЛЬНО. Я уже голову сломал. Если перенести увеличение счётчика в несоответствие условию, то он срабатывает и все 10 раз. А если оставить там, где положенно, то не срабатывает вообще.
admiral121 вне форума Ответить с цитированием
Старый 17.12.2010, 17:35   #4
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

тупое условие x>18 x<-81

программа правленая
Код:
data segment
  mass db 1,12,20,14,3,7,15,31,23,2
   kol db ?
data ends

code segment
  assume cs:code,ds:data

start:
  mov ax,data
  mov ds,ax
  mov dx,0
  mov bx, offset mass; загрузка адреса смещения массива
  mov cx,10  ; установка воличества повторений цикла
beg:
  cmp byte ptr [bx],12h; сравниваем элемент массива
  jle no; он меньше или равен
  cmp byte ptr [bx],0afh; сравниваем элемент массива
  jge no; он больше или равен
  add dx,1
  mov kol,dl
no:
  inc bx
  loop beg
quit: mov ax,4C00h
      int 21h
code ends
end start
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с массивом novi4ok_Delphi Помощь студентам 4 24.03.2010 20:28
работа с массивом Андрей.12 Помощь студентам 2 22.10.2009 00:25
Ошибка с массивом. Система тестирования. motor666 Помощь студентам 0 17.04.2009 21:25
Работа с массивом Horknee Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 14.04.2009 18:02