Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Вадим
- ; безпосередній операнд це константа
- Model Small
- Stack 256
- DATASEG
- Ni db 100 dup (0)
- n db 0
- exCode DB 0
- m1 db 'Vvedit rozmir massivy v diapazoni vid 2 do 99', 0dh, 0ah, '$'
- m2 db 'Vvedit massiv', 0dh, 0ah, '$'
- m3 db 0dh, 0ah, '$'
- m4 db 'Summa otricatelnih elementov: $'
- m5 db 'Maximalniy polozhitelniy element: $'
- m6 db 'Pozicia max. polozhitelnogo elementa: $'
- MaxPos db 0
- MaxPosPos db 0
- BufSize DB 4
- BufLen DB 0
- Text = $
- DataSegTail = $ + 256
- CODESEG
- Start:
- mov ax, @data
- mov ds, ax
- mov ah, 09h
- mov dx, offset m1
- int 21h
- InputAgain:
- call readline
- cmp ax,1
- jle InputAgain
- mov bx,ax ;в BX по ходу программы будет храниться количесвто элементов массива
- mov ah, 09h ; виводимо м2
- mov dx, offset m2
- int 21h
- mov cx,bx ;готовим cx для цикла
- mov si,offset Ni ;готовим массив Ni для принятия вводимых значений
- InputElem: ; цикл для введення з клавіатури
- call readline ;вводим новый элемент
- mov [si],al ;Пишем его в массив
- inc si ;переходимо на наступний елемент
- loop InputElem
- mov si,offset Ni ;готовим массив Ni для принятия вводимых значений
- xor di,di ;В DI будем хранить сумму отрицательных элементов массива
- mov cx,bx ;Пройдемся по каждому элементу массива
- mov dl,1 ;а вот в DL будем считать текущую позицию элемента
- xor ax,ax
- CalcNegSum:
- mov al,[si] ;берем следующий элемент
- test al,al ;Проверяем флаги
- jns NotNeg ;если без знака то смотрим следующий
- mov ah,0ffh
- add di,ax ;иначе суммируем
- xor ah,ah
- jmp NotBigger
- NotNeg:
- cmp [MaxPos],al ;Сравниваем предыдущий макс. положительный элемент с текущим
- ja NotBigger ;Если предыдущий покрупнее будет, то идем дальше
- mov [MaxPos],al ;Иначе обновляем информацию о нашем максимальном элементе и ее позицию.
- mov [MaxPosPos],dl
- NotBigger:
- inc si
- inc dl
- loop CalcNegSum ;пока еще остались элементы, смотрим дальше
- ;По выходу из цикла у нас в регистре di будет сумма отрицательных элементов массива,
- ;а в ячейках памяти [MaxPos] и [MaxPosPos] макс. положительный элемент и его позиция
- ;Осталось только вывести все это дело на экран.
- mov ah, 09h ; виводимо м4
- mov dx, offset m4
- int 21h
- mov ax,di
- call OutVal
- mov ah, 09h ; виводимо м5
- mov dx, offset m5
- int 21h
- xor ax,ax
- mov al,[MaxPos]
- call OutVal
- mov ah, 09h ; виводимо м6
- mov dx, offset m6
- int 21h
- xor ax,ax
- mov al,[MaxPosPos]
- call OutVal
- mov ah, 04Ch
- mov al, [exCode]
- int 21h
- ReadLine:
- push bx
- push cx
- push si
- Againa:
- mov ah,0ah
- mov dx,offset BufSize
- mov [BufLen],4
- int 21h
- xor di,di
- xor ax,ax
- mov cl,[BufLen]
- xor ch,ch
- xor bx,bx
- mov si,cx
- mov cl,10
- xor bp,bp
- cmp byte ptr [Text+di],'-'
- jne ConvToBin
- inc bp
- inc di
- ConvToBin:
- mov bl,byte ptr [Text+di]
- sub bl,"0"
- jb Againa
- cmp bl,9
- ja Againa
- mul cx
- add ax,bx
- inc di
- cmp di,si
- jb ConvToBin
- AfterAll:
- dec bp
- jnz NotNeg2
- neg ax
- NotNeg2:
- push ax
- push dx
- mov ah, 09h ; виводимо м3
- mov dx, offset m3
- int 21h
- pop dx
- pop ax
- pop si
- pop cx
- pop bx
- ret
- OutVal:
- push cx
- push bx
- push ax
- push si
- push dx
- mov si,offset Text
- test ax,ax
- jns d0
- neg ax
- mov [si],byte ptr '-'
- inc si
- d0:
- mov bx,10
- xor cx,cx
- d1:
- xor dx,dx
- idiv bx
- push dx
- inc cx
- test ax,ax
- jnz d1
- d2:
- pop ax
- add al,"0"
- mov [si],al
- inc si
- loop d2
- mov [si],word ptr 3338
- add si,2
- mov [si],byte ptr '$'
- mov dx, offset Text
- mov ah,9
- int 21h
- pop dx
- pop si
- pop ax
- pop bx
- pop cx
- ret
- END Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement