Сейчас на форуме: hgdagon, asfa (+4 невидимых)

 eXeL@B —› Программирование —› или он нас или мы его (asm)
Посл.ответ Сообщение

Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 февраля 2007 07:18
· Личное сообщение · #1

Друзья! Мы с другом пытаемся решить детскую задачу. Смысл ее:
Haйти сколько в массиве чисел больше 12h и меньше 0Afh. Массив байт.
мы пытались написать так:


Код:
data segment
count dw 0
mass db 151,200,3,48,250,6,170,81,9,10
data ends

code segment
assume cs: code, ds: data
laba3:
mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, mass ; Загрузить адрес смещения массива
mov cx, 10 ; Установить счетчик повторений цикла
mov ax,18
mov dx,175

cycl:
cmp [bx],ax
jg exx
jmp exx3
exx:
cmp [bx],dx
jl exx1
jmp exx3
exx1:
inc count

exx3:
inc bx
Loop cycl

mov ax,count
quit: mov ax,4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end laba3
Но почемуто он не считает в count и всегда выдает 0. Где наша ошибка? Компилятор Tasm/Tlink



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 24 февраля 2007 07:35
· Личное сообщение · #2

>>cmp [bx],ax
нужно
cmp [bx],al
и для dx соответственно




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 24 февраля 2007 07:40 · Поправил: HoBleen
· Личное сообщение · #3

1)Red_bit пишет:
cmp [bx],ax
cmp [bx],dx

Заменить на
cmp [bx],al
cmp [bx],dl
и инициализацию тоже для порядка для al и dl.

2)Red_bit пишет:
jg exx
jmp exx3
exx:

Заменить на jle exx3 (попроще), а еще лучше на jbe, т.к. ты сравниваешь беззнаковое.

P.S. Тему к новичкам ИМХО
P.S.S. RamMerlabs опередил =)



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 февраля 2007 08:00
· Личное сообщение · #4

вот сделали вот так и все равно в конце проги в АХ-0000-????? (: ???

data segment
count dw 0
mass db 151,200,3,48,250,6,170,81,9,10
data ends

code segment
assume cs: code, ds: data
laba3:
mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, mass ; Загрузить адрес смещения массива
mov cx, 10 ; Установить счетчик повторений цикла
mov al,18
mov dl,175

cycl:
cmp [bx],al
jg exx
jle exx3
exx:
cmp [bx],dl
jl exx1
jbe exx3
exx1:
inc count

exx3:
inc bx
Loop cycl

mov ax,count
quit: mov ax,4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end laba3
;Haйти сколько в массиве чисел больше 12h и меньше 0Afh. Массив байт.



Ранг: 29.2 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 24 февраля 2007 08:25
· Личное сообщение · #5

Уважаемый Red_bit, а что за модель памяти у вас, не подскажете ?
если под 16 бит, то зачем тогда такой каунт, чего там такого считать ?
... а если под 32 бита, то ты адрес суешь в АКс, а это хрень какая-то,
в общем случае ошибка где-то "по-невнимательгости" скорее всего,
Пожалуйста, доплни вопрос , чтобы можно было дать на него хоть КАКОЙ-ТО
ОТВЕТ
с Уважением...



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 февраля 2007 08:29
· Личное сообщение · #6

сорри но asm не мой профиль по симу пишу как есть в методичке... что могу вот... как могу так и написал... и можно вопрос задать на языке для ламеров в asm



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 24 февраля 2007 09:26
· Личное сообщение · #7

Red_bit, а что, самому не интересно?
Держи готовый ответ:
------
data segment
mass db 151,200,3,48,250,6,170,81,9,10
data ends

code segment
assume cs: code, ds: data
laba3:
mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, [mass] ; Загрузить адрес смещения массива
mov cx, 10 ; Установить счетчик повторений цикла
xor AX, AX

cycl:
dec CX
js fin

mov DL,[BX]
inc BX

cmp DL,12h
jbe cycl ; Меньше или равно

cmp DL,0Afh
jae cycl ; Больше или равно

inc AX
jmp cycl

fin:
mov ax,4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end laba3

--------
И больше сюда не ходи с такими просьбами.

-----
Всем привет, я вернулся




Ранг: -4.4 (нарушитель)
Активность: 0.020
Статус: Участник

Создано: 24 февраля 2007 09:55
· Личное сообщение · #8

Блин, че вы все тупите? Visual Basic рулит и ниибет.



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 24 февраля 2007 10:01
· Личное сообщение · #9

Тут важен дзен и мнение препода... С васиком не прокатит.



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 февраля 2007 10:18
· Личное сообщение · #10

Bitfry

СПАСИБО ДОБРОМУ МОДЕРАТОРУ ТОК ВОТ РПЕШИЛ ЕНТУ задачу и вот он код

data segment
count dw 0
mass db 11,200,3,48,250,6,170,81,9,10
data ends

code segment
assume cs: code, ds: data
laba3:
mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, mass ; Загрузить адрес смещения массива
mov cx, 10 ; Установить счетчик повторений цикла
mov al,18
mov dl,175

cycl:
cmp [bx],al
ja exx
jmp exx3
exx:
cmp [bx],dl
jb exx1
jmp exx3
exx1:
inc count
exx3:
inc bx
Loop cycl

mov ax,count
quit: mov ax,4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end laba3



 eXeL@B —› Программирование —› или он нас или мы его (asm)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати