Stolar228

Untitled

Apr 20th, 2023 (edited)
1,309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Проверить является ли последовательность элементов между двумя заданными
  2. ; индексами массива упорядоченной по убыванию. Результат проверки записать в
  3. ; регистр.
  4. ; проверки записать в регистр.
  5. ; результат будет записан в A5
  6.  
  7.     .global  _c_int00
  8. ;///////////////////////////////////////
  9. ;секция данных
  10. .data
  11. array: .ushort 1, 1, 3, 2, 1            ; массив (ответ будет 1)
  12. ;array: .ushort 1, 2, 3, 4, 5           ; массив (ответ будет 0)
  13. ;array: .ushort -5, -4, -3, -2, -1  ; массив (ответ будет 0)
  14. size .set 5                         ; размер мессива
  15. buf: .ushort 0                      ; текущее значение массива
  16.  
  17. ;; диапазон в котором будет происходить проверка
  18. left .set 1
  19. right .set 4
  20.  
  21. ;///////////////////////////////////////
  22. _c_int00: ; метка с которой будет выполняться программа
  23. ; основной код программы
  24. .text
  25.     ; записываем адресс массива в регистр
  26.     MVKL .S1 array, A3 ;загружаем адрес массива1 в A3
  27.     MVKH .S1 array, A3
  28.     MVKL .S2 array, B3 ;загружаем адрес массива1 в B3
  29.     MVKH .S2 array, B3
  30.     MVK .S1 right, A2
  31.     MVK .S2 left, B2
  32.     ADD .L1 A2, 1, A2
  33.     || SUB .L2 B2, 1, B2
  34.  
  35.     MVK .S1 buf, A6
  36.     MVK .S2 buf, B6
  37.     LDH .D1 *A6, A4
  38.     || LDH .D2 *B6, B4
  39.     NOP 4
  40.  
  41.     ; регистр куда запишется результат в виде 1 или 0 (true или false)
  42.     MVK .S1 1, A5
  43.  
  44.     ; буферные регисты для хранения предыдущих значения массива
  45.     MVK .S1 -128, A7
  46.     MVK .S2 128, B7
  47.     ; LDW .D1 *A7, A7
  48.     ; || LDW .D2 *B7, B7
  49.     NOP 4
  50.  
  51. LOOP:
  52.     ; счетчики
  53.     SUB .L1 A2, 1, A2
  54.     || ADD .L2 B2, 1, B2
  55.  
  56.     ; достаём элемент массива и записываем его в A4
  57.     LDH .D1 *A3[A2], A4
  58.     || LDH .D2 *B3[B2], B4
  59.     NOP 4
  60.  
  61.     CMPGTU .L1 A4, A7, A0
  62.     || CMPGTU .L2 B7, B4, B0
  63.  
  64.     ; NOT .L1 A0, A0
  65.     ; || NOT .L2 B0, B0
  66.     OR .L1 A0, B0, A0
  67.  
  68.     [!A0] SUB .L1 A5, 1, A5
  69.     [!A0] B .S1 EXIT
  70.     NOP 5
  71.  
  72.     SUB .S1 A4, 0, A7
  73.     || SUB .S2 B4, 0, B7
  74.  
  75.     ; если в массиве больше нет значений, то заканчиваем программу
  76.     SUB .L1 A2, B2, A0
  77.     [!A0] B .S1 EXIT
  78.     NOP 5
  79.  
  80.     ADD .L1 A2, 1, A0
  81.     SUB .L1 A0, B2, A0
  82.     [!A0] B .S1 EXIT
  83.     NOP 5
  84.  
  85.     ; следующая итерация
  86.     B .S1 LOOP ;переход если A2 <> 0
  87.     NOP 5
  88.  
  89. EXIT:
  90.  
Advertisement
Add Comment
Please, Sign In to add comment