Advertisement
Abaduaber

VadSid_1

May 10th, 2013
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Вадим
  2. ; безпосередній операнд це константа
  3. Model Small
  4. Stack 256
  5. DATASEG
  6.  
  7. Ni db 100 dup (0)
  8. n db 0
  9. exCode DB 0
  10.  
  11. m1 db 'Vvedit rozmir massivy v diapazoni vid 2 do 99', 0dh, 0ah, '$'
  12. m2 db 'Vvedit massiv', 0dh, 0ah, '$'
  13. m3 db 0dh, 0ah, '$'
  14. m4 db 'Summa otricatelnih elementov: $'
  15. m5 db 'Maximalniy polozhitelniy element: $'
  16. m6 db 'Pozicia max. polozhitelnogo elementa: $'
  17. MaxPos db 0
  18. MaxPosPos db 0
  19. BufSize DB 4
  20. BufLen DB 0
  21. Text = $
  22. DataSegTail = $ + 256
  23.  
  24. CODESEG
  25.  
  26. Start:
  27.  
  28. mov ax, @data
  29. mov ds, ax
  30. mov ah, 09h
  31. mov dx, offset m1
  32. int 21h
  33.  
  34. InputAgain:
  35. call readline
  36. cmp ax,1
  37. jle InputAgain
  38. mov bx,ax ;в BX по ходу программы будет храниться количесвто элементов массива
  39.  
  40. mov ah, 09h ; виводимо м2
  41. mov dx, offset m2
  42. int 21h
  43.  
  44. mov cx,bx ;готовим cx для цикла
  45. mov si,offset Ni ;готовим массив Ni для принятия вводимых значений
  46. InputElem: ; цикл для введення з клавіатури
  47. call readline ;вводим новый элемент
  48. mov [si],al ;Пишем его в массив
  49. inc si ;переходимо на наступний елемент
  50. loop InputElem
  51.  
  52. mov si,offset Ni ;готовим массив Ni для принятия вводимых значений
  53. xor di,di ;В DI будем хранить сумму отрицательных элементов массива
  54. mov cx,bx ;Пройдемся по каждому элементу массива
  55. mov dl,1 ;а вот в DL будем считать текущую позицию элемента
  56. xor ax,ax
  57. CalcNegSum:
  58. mov al,[si] ;берем следующий элемент
  59. test al,al ;Проверяем флаги
  60. jns NotNeg ;если без знака то смотрим следующий
  61. mov ah,0ffh
  62. add di,ax ;иначе суммируем
  63. xor ah,ah
  64. jmp NotBigger
  65. NotNeg:
  66. cmp [MaxPos],al ;Сравниваем предыдущий макс. положительный элемент с текущим
  67. ja NotBigger ;Если предыдущий покрупнее будет, то идем дальше
  68. mov [MaxPos],al ;Иначе обновляем информацию о нашем максимальном элементе и ее позицию.
  69. mov [MaxPosPos],dl
  70. NotBigger:
  71. inc si
  72. inc dl
  73. loop CalcNegSum ;пока еще остались элементы, смотрим дальше
  74. ;По выходу из цикла у нас в регистре di будет сумма отрицательных элементов массива,
  75. ;а в ячейках памяти [MaxPos] и [MaxPosPos] макс. положительный элемент и его позиция
  76. ;Осталось только вывести все это дело на экран.
  77. mov ah, 09h ; виводимо м4
  78. mov dx, offset m4
  79. int 21h
  80. mov ax,di
  81. call OutVal
  82. mov ah, 09h ; виводимо м5
  83. mov dx, offset m5
  84. int 21h
  85. xor ax,ax
  86. mov al,[MaxPos]
  87. call OutVal
  88. mov ah, 09h ; виводимо м6
  89. mov dx, offset m6
  90. int 21h
  91. xor ax,ax
  92. mov al,[MaxPosPos]
  93. call OutVal
  94.  
  95. mov ah, 04Ch
  96. mov al, [exCode]
  97. int 21h
  98.  
  99. ReadLine:
  100.     push bx
  101.     push cx
  102.     push si
  103. Againa:
  104.     mov ah,0ah
  105.         mov dx,offset BufSize
  106.     mov [BufLen],4
  107.     int 21h
  108.     xor di,di
  109.     xor ax,ax
  110.     mov cl,[BufLen]
  111.     xor ch,ch
  112.     xor bx,bx
  113.     mov si,cx
  114.     mov cl,10
  115.     xor bp,bp
  116.     cmp byte ptr [Text+di],'-'
  117.     jne ConvToBin
  118.     inc bp
  119.     inc di
  120. ConvToBin:
  121.     mov bl,byte ptr [Text+di]
  122.     sub bl,"0"
  123.     jb Againa
  124.     cmp bl,9
  125.     ja Againa
  126.     mul cx
  127.     add ax,bx
  128.     inc di
  129.     cmp di,si
  130.     jb ConvToBin
  131. AfterAll:
  132.     dec bp
  133.     jnz NotNeg2
  134.     neg ax
  135. NotNeg2:      
  136.     push ax
  137.     push dx
  138.         mov ah, 09h ; виводимо м3
  139.         mov dx, offset m3
  140.         int 21h
  141.     pop dx
  142.     pop ax
  143.     pop si
  144.     pop cx
  145.     pop bx
  146.         ret
  147.  
  148. OutVal:
  149.     push cx
  150.     push bx
  151.     push ax
  152.     push si
  153.     push dx
  154.     mov si,offset Text
  155.     test ax,ax
  156.     jns d0
  157.     neg ax
  158.     mov [si],byte ptr '-'
  159.     inc si
  160. d0:
  161.     mov bx,10
  162.     xor cx,cx
  163. d1:
  164.     xor dx,dx
  165.     idiv bx
  166.     push dx
  167.     inc cx
  168.     test ax,ax
  169.     jnz d1
  170. d2:
  171.     pop ax
  172.     add al,"0"
  173.     mov [si],al
  174.     inc si
  175.     loop d2
  176.     mov [si],word ptr 3338
  177.     add si,2
  178.     mov [si],byte ptr '$'
  179.     mov dx, offset Text
  180.     mov ah,9
  181.     int 21h
  182.     pop dx
  183.     pop si
  184.     pop ax
  185.     pop bx
  186.     pop cx
  187.     ret
  188. END Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement