Stolar228

Untitled

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