eXeL@B —› Программирование —› или он нас или мы его (asm) |
Посл.ответ | Сообщение |
|
Создано: 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 |
|
Создано: 24 февраля 2007 07:35 · Личное сообщение · #2 |
|
Создано: 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 опередил =) |
|
Создано: 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. Массив байт. |
|
Создано: 24 февраля 2007 08:25 · Личное сообщение · #5 Уважаемый Red_bit, а что за модель памяти у вас, не подскажете ? если под 16 бит, то зачем тогда такой каунт, чего там такого считать ? ... а если под 32 бита, то ты адрес суешь в АКс, а это хрень какая-то, в общем случае ошибка где-то "по-невнимательгости" скорее всего, Пожалуйста, доплни вопрос , чтобы можно было дать на него хоть КАКОЙ-ТО ОТВЕТ с Уважением... |
|
Создано: 24 февраля 2007 08:29 · Личное сообщение · #6 |
|
Создано: 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 -------- И больше сюда не ходи с такими просьбами. ----- Всем привет, я вернулся |
|
Создано: 24 февраля 2007 09:55 · Личное сообщение · #8 |
|
Создано: 24 февраля 2007 10:01 · Личное сообщение · #9 |
|
Создано: 24 февраля 2007 10:18 · Личное сообщение · #10 Bitfry СПАСИБО ДОБРОМУ МОДЕРАТОРУ ТОК ВОТ РПЕШИЛ ЕНТУ задачу и вот он код
|
eXeL@B —› Программирование —› или он нас или мы его (asm) |
Эта тема закрыта. Ответы больше не принимаются. |