Advertisement
intsashka

w

Apr 30th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "io.inc"
  2.  
  3. section .bss
  4.     a resd  500003
  5.     a1 resd 500003
  6.     a2 resd 500003
  7.     n resd 1  
  8.     l1 resd 1 ;кол-во локальных минимумов
  9.     l2 resd 1 ;кол-во локальных максимумов
  10. section .text
  11. global CMAIN
  12. CMAIN:
  13.    
  14.     ;Считывание кол-ва чисел в последовательности.
  15.     GET_DEC 4, n
  16.    
  17.     ;Обработка случая, когда n равно 0
  18.     cmp dword[n], 0
  19.     jz .writeRes
  20.    
  21.     ;Считываем последовательность в цикле.
  22.     mov ecx, 0 ;ecx - переменная цикла.
  23.     .for:
  24.         GET_DEC 4, eax
  25.         mov dword[a+ecx*4], eax
  26.         inc ecx
  27.         cmp ecx, dword[n]
  28.         jnz .for
  29.        
  30.     ;В цикле поочереди проверяем число на лок. мин и макс.
  31.     mov ecx, 0 ;ecx - переменная цикла.
  32.     dec dword[n]
  33.     .for_ij:
  34.         inc ecx
  35.         cmp ecx, dword[n]
  36.         jns .end_for
  37.        
  38.         mov eax, dword[a+4*ecx]; текущее число
  39.        
  40.         ;Проверка на лок. минимум
  41.         cmp eax, dword[a+4*ecx-4]
  42.         jns .endCheckMin
  43.         cmp eax, dword[a+4*ecx+4]
  44.         jns .endCheckMin
  45.        
  46.         ;Добавление числа в лок. минимумы
  47.         mov ebx, dword[l1]
  48.         mov dword[a1+ebx*4], ecx
  49.         inc dword[l1]
  50.        
  51.         .endCheckMin:
  52.        
  53.         ;Проверка на лок. максимум
  54.         cmp dword[a+4*ecx-4], eax
  55.         jns .endCheckMax
  56.         cmp dword[a+4*ecx+4], eax
  57.         jns .endCheckMax
  58.        
  59.         ;Добавление в лок. максимумы
  60.         mov ebx, dword[l2]
  61.         mov dword[a2+ebx*4], ecx
  62.         inc dword[l2]
  63.         .endCheckMax:    
  64.         jmp .for_ij          
  65.     .end_for:
  66.        
  67.        
  68.    
  69.     .writeRes:
  70.     ;Вывод кол-ва лок. минимумом.
  71.     PRINT_DEC 4, l1
  72.     NEWLINE
  73.     ;Если l1 равно нулю, то переходим на метку .notMin
  74.     cmp dword[l1], 0
  75.     jz .notMin
  76.         ;Обнуляем переменную цикла.
  77.         mov ecx, 0
  78.         .forMin:
  79.             ;Вычисляем eax = a1[ecx]
  80.             mov eax, dword[a1+ecx*4]
  81.             PRINT_DEC 4, eax
  82.             PRINT_CHAR ' '
  83.             inc ecx
  84.             cmp ecx, dword[l1]
  85.             jnz .forMin
  86.         NEWLINE
  87.     .notMin:
  88.    
  89.      
  90.     ;Вывод кол-ва лок. максимумов.
  91.     PRINT_DEC 4, l2
  92.     NEWLINE
  93.      ;Если l2 равно нулю, то переходим на метку .notMax
  94.     cmp dword[l2], 0
  95.     jz .notMax
  96.         ;Обнуляем переменную цикла.
  97.         mov ecx, 0
  98.         .forMax:
  99.             ;Вычисляем eax = a2[ecx]
  100.             mov eax, dword[a2+ecx*4]
  101.             PRINT_DEC 4, eax
  102.             PRINT_CHAR ' '
  103.             inc ecx
  104.             cmp ecx, dword[l2]
  105.             jnz .forMax
  106.         NEWLINE
  107.     .notMax:
  108.    
  109.    
  110.     xor eax, eax
  111.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement