Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Найти и удалить елементы


Автор: Dymikero 12.12.2010, 22:23
Нужно найти последнюю серию отрицательных чисел и числа в этой серии заменить нулями. Прога находит но не заменяет.
Хотелось бы знать, где я ошибся.
Вот текст:

Код

sseg   segment        'STACK'
        db      64 dup(?)
sseg   ends
dseg    segment    'data'
A            dw     8, 2, 3, 6, -1, -1, -1, 2
nA        dw    8
B            dw     1, 0, 1, -2, -3, -2, 3
nB        dw    7
dlA            dw      ?
dlB             dw      ?
nomA            dw    ?
nomB            dw      ?
dseg    ends
code    segment    
    assume ds:dseg, cs:code    

work    proc    far
push    ds
xor     ax,ax
push    ax
mov     ax, dseg
mov    ds,ax


lea    bx,A
mov    cx,nA
lea     si,nomA
lea     di,dlA
call    lab1
lea         bx,B
mov         cx,nB 
lea         si,nomB
lea         di,dlB
call        lab1

lea  ax,A
push ax
lea  ax,nA
push ax
lea  ax,nomA
push ax
lea  ax,dlA
push ax
call lab2
;---------
lea  ax,B
push ax
lea  ax,nB
push ax
lea  ax,nomB
push ax
lea  ax,dlB
push ax
call lab2
ret  6
work endp
;---
lab1    proc    near
    push    si
      push  di
    mov    di,0
        mov     dx,0
        mov     bp,0
p3:
    mov    ax,[bx+di]
    cmp     ax,0
    jge     p13
        inc     dx
        jmp     p2 
p13:
        cmp    dx,3
        jne  p9
        mov  si,di
        jl         p1
p9:
mov          bp,dx
p1:       
             mov dx,0
p2:      
add        di,2
loop            p3

pop             di
mov             [di],bp
mov             di,si
pop             si
add             di,2
shr             di,1
sub             di, bp
mov             [si],di
ret
lab1    endp
;---
lab2 proc near
push bp
mov  bp,sp
push ax bx cx dx si di
mov  cx,[bp+4]
mov  di,[bp+6]
shl  di,1
mov  bx,[bp+10]

m1:  mov  bx,[bx+di]
     mov bx,0
     add di,2
loop m1
pop     di si dx cx bx ax bp
ret  6
lab2 endp
code   ends
end

Автор: Dymikero 13.12.2010, 02:49
Ребят, ну кто нибудь помогите. Действительно интересно где я ошибся. Прога компилируется tasm'щь без ошибок но серию отрицательных элементов так и не зануляет.

Автор: 500mhz 13.12.2010, 19:32
что значит серию? из скольки чисел? или последнюю серию? или как?

Автор: iff 13.12.2010, 20:57
Цитата(Dymikero @  12.12.2010,  22:23 Найти цитируемый пост)
последнюю серию отрицательных чисел 


Автор: Dymikero 14.12.2010, 03:15
Цитата(500mhz @ 13.12.2010,  19:32)
что значит серию? из скольки чисел? или последнюю серию? или как?

Последнюю серию отрицательных чисел, серия 3 и больше эл-тов. Прога находит кол во таких эл-ментов и первый элемент из этой серии. Значит ошибка в процедуре lab2.

Автор: 500mhz 14.12.2010, 23:03
господа, серия - последовательность нескольких элементов (например серия выстрелов)

в данном случае 
A            dw     8, 2, 3, 6, -1, -1, -1, 2

B            dw     1, 0, 1, -2, -3, -2, 3

я вижу здесь одну серию -1 -1 -1 и одну -2 -3 -2 в каждом "массиве"
и постановка ТЗ "последнюю серию отрицательных чисел " не имеет смысла так как в любом массиве эта серия первая и последния.

(ну и препод у вас дебил)

а вот если массив имеет вид 1,2,5,8,9,-5,-5,-5,-6,6,9,8,2,3,-3,-2,-4,5,4,6,5,-1,-1,-1
то "последняя и первая" (так как нет повторений серий), серия с наибольшим колвом элементов будет серия -5 -5 -5 -5 

кароче дайте мне ТЗ нормальное и я напишу )

Автор: Dymikero 15.12.2010, 03:13
Серия 3 и БОЛЬШе эл-тов. Т.е. -1 -1 -1 в перовм и -2 -3 -2. Так было написано в тз. Видимо чтобы не утруждать студентов повторяющиеся серии в задание не включили но по умолчанию мы должны находить именно последнюю.

Автор: Dymikero 17.12.2010, 02:00
Хегей. Есть кто живой?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)