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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: [asm] Суммирование отрицательных членов массива  (Прочитано 74138 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Serg79
Команда клуба

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

WWW
« Ответ #90 : 05-10-2009 12:41 » 

Anarky, Ты покажи что у Тебя получилось то. Все таки все старались Тебе помочь и хочется конечный результат увидеть. Улыбаюсь
Записан
Anarky
Постоялец

ru
Offline Offline

« Ответ #91 : 05-10-2009 19:28 » 

вставил условие для сложения отрицательных:
Код:
model small
stack 256
.data
kolvo  dw 8
mas  dw -3, -2, -1, 0, 1, 2, 3, 4
.code
start:
    push [offset kolvo]
    push [offset mas]
    call sum
    add sp, 4
    ret

sum:
    push bp
    mov bp, sp
    mov cx, [bp + 4] ; загружаем количество параметров
    mov si, [bp + 6] ; загружаем указатель на данные
    xor ax, ax ; инициализация суммы
  sum_1:
    add ax, [si]
    cmp ax,0
    jb sob
    jge sled
sob:
    mov bx,ax
    add si,2
   loop sum_1
sled:
    add si,2
    loop sum_1
     pop bp
    ret
end sum
mov ax,4c00h
int 21h
end next
программа работает, но попадает не на те значения, чет со смещением неправильно
CX при первом проходе устанавливается в FFFF
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #92 : 05-10-2009 19:38 » 

Anarky, полный бред... Жаль

Код:
; ...........
  sum_1:
    add ax, [si]
    cmp ax,0
    jb sob
    jge sled
sob:
    mov bx,ax
    add si,2
   loop sum_1
sled:
; ...........

; тоже бред.
mov ax,4c00h
int 21h
end next

Занимаешься бездумным копипастом...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #93 : 05-10-2009 19:43 » 

проверил: бред
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #94 : 05-10-2009 19:44 » 

Который раз говорю: открой справочник и прочитай описание команд. Если так и дальше будет продолжаться, я не буду помогать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #95 : 05-10-2009 19:52 » 

а я могу так написать?
Код:
.......
sum_1:
 cmp [si],0
 jb a
 jge b
a:
 mov ax,[si]
 add si,2
loop sum_1
b:
add si,2
loop sum_1
...........
 
или тоже бред?
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #96 : 05-10-2009 19:57 » 

К сожалению тоже бред...
Одна правильная мысля там есть, но остальное......
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #97 : 05-10-2009 20:05 » 

Код:
..........
mov ax,[si]
sum_1:
 cmp ax,0
 jb a
 jge b
a:
 mov bx,ax
 add si,2
loop sum_1
b:
add si,2
loop sum_1
.........
так?

Кажется, что нет...
« Последнее редактирование: 06-10-2009 15:04 от Sel » Записан
RXL
Технический
Администратор

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

WWW
« Ответ #98 : 06-10-2009 03:45 » 

Anarky, хватит гадать - все равно не угадаешь - комбинаций до хрена!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #99 : 06-10-2009 14:58 » 

RXL, что-то мне кажется, что так правильно:
Код:
sum:
    push bp
    mov bp, sp
    mov cx, [bp + 6] ;!!!!!! загружаем количество параметров
    mov si, [bp + 4] ;!!!!!! загружаем указатель на данные
    xor ax, ax ; инициализация суммы
« Последнее редактирование: 06-10-2009 15:03 от Sel » Записан
RXL
Технический
Администратор

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

WWW
« Ответ #100 : 06-10-2009 15:58 » 

Ну да. Я это сам написал Улыбаюсь
А дальше?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #101 : 06-10-2009 16:30 » 

Код:
.......
sum_1:
mov ax,[si]
cmp ax,0
 jb a
 jge b
a:
 add bx,[si]
 add si,2
loop sum_1
b:
add si,2
loop sum_1
.........
только перед этим еще bx обнулим...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #102 : 07-10-2009 03:57 » 

Anarky, хорошо, это работает. Только наворочено очень. Лучше так:

Код:
sum:
    push bp
    mov bp, sp
    mov cx, [bp + 4] ; загружаем количество параметров
    mov si, [bp + 6] ; загружаем указатель на данные
    xor dx, dx ; как второй аккумулятор лучше использовать DX
sum_1:
    mov ax, [si]
    test ax, ax ; не сравниваем, а просто проверяем свойства
    jns sum_2 ; если положительное значение, пропускаем суммирование
    add dx, ax
sum_2:
    add si,2
    loop sum_1
    mov ax, dx ; возвращаемое значение должно быть в AX
    pop bp
    ret
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #103 : 07-10-2009 08:24 » 

Я правильно понял, что если AX положительное, то установится флаг SF=0
тогда выполнится jns sum_2?
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #104 : 07-10-2009 08:56 » 

Anarky, совершенно верно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #105 : 07-10-2009 17:07 » 

Код:
model small
stack 256
.data
argc  dw 8
args  dw -3, -2, -1, 0, 1, 2, 3, 4

.code
start:
    push [offset args]
    push [offset argc]
    call sum
    add sp, 4
    ret

sum:
    push bp
    mov bp, sp
    mov cx, [bp + 4]
    mov si, [bp + 6]
    xor dx, dx
sum_1:
    mov ax, [si]
    test ax, ax
    jns sum_2
    add dx, ax
    add si,2
    loop sum_1
sum_2:
    add si,2
    loop sum_1
    mov ax, dx
    pop bp
    ret
 end start
 
все равно не работает С ума сойти... подскажите где я промахиваюсь...
« Последнее редактирование: 07-10-2009 17:10 от Anarky » Записан
RXL
Технический
Администратор

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

WWW
« Ответ #106 : 07-10-2009 17:53 » 

Anarky, мне надоел твой бред. Я тебе привел образцы работающего кода - можно сказать, полностью написал за тебя.
А будешь создавать темы с бредовыми названиями и содержимом - они могут оказаться сразу в мусорке или, в лучшем случае, в разделе для не умеющих спрашивать и прочих ленивцев, что не лучше мусорки - там еще и посмеются.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #107 : 07-10-2009 20:10 » 

Чем тебе вопросы и названия не нравятся??? Сказал на форуме спроси, я спросил... Ты напоминаешь инструктора по вождению, который ворчит из-за того что человек сел за руль первый раз!Такого не было, чтоб человек сел и сразу поехал!  Мне код не нужен, просто хочу разобраться как и почему он работает или не работает! За то, что помогаешь большое спасибо!!! А про ленивца зря... Я эту программку могу взять у одногруппников и тупо сдать преподу... Решать тебе помогать или нет...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #108 : 08-10-2009 05:37 » 

Anarky, я тебе привел весь код, да еще и с комментариями. Попробуй в нем разобраться. Игра угадайка нам совершенна не интересна. И кстати - желания научиться совсем-совсем не видно: сколько раз мы тебя поправляли и давали примеры с описаниями, сколько раз я говорил тебе посмотреть в справочник, но ты каждый раз собираешь что-то страшное (и явно копипастом) и нате вам - объясняйте, что я тут понаписал. Это не обучение - это больше на троллизм похоже.
« Последнее редактирование: 08-10-2009 05:40 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anarky
Постоялец

ru
Offline Offline

« Ответ #109 : 08-10-2009 09:53 » 

RXL, когда не знаешь в чем ошибка: в справочник смотреть бесполезно... в AX попадает фигня какая-то, а не то что мне нужно, соответственно дальше все не правильно...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #110 : 08-10-2009 14:50 » 

Распиши все на бумаге - что происходит с каждой командой. Комп тебе сейчас совсем не нужен - нужно просто понимание процесса. Почитай еще раз описание системной архитектуры процессора.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

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

« Ответ #111 : 10-10-2009 07:08 » new

Цитата: Anarky
когда не знаешь в чем ошибка: в справочник смотреть бесполезно... в AX попадает фигня какая-то, а не то что мне нужно, соответственно дальше все не правильно...
Да, думать надо головой, а не справочником. Но твой метод тыка (как в анекдоте "некогда думать, прыгать надо") и правда утомляет. Поскольку в процессоре нет никакой мистики, то фигня в AX - это прямое следствие работы предыдущих команд, работающих с этим регистром, либо же отсутствие его инициализации в самом начале. Вот возьми и проверь, на каком шаге в регистре появляется фигня. А потом смотри по справочнику ту инструкцию, которая эту фигню туда записала, и проверяй, правильно ли ты этой инструкцией воспользовался.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: 1 2 3 [4]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines