Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива - Assembler

Узнай цену своей работы

Формулировка задачи:

Условие задачи: Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива; Незнаю в чем ошибка. Посоветуйте что-нибудь пожалуйста.
Листинг программы
  1. ; multi-segment executable file template.
  2. include 'emu8086.inc'
  3. data segment
  4. ; add your data here!
  5. mas dw 1,0,4,30,-2,-1,5,7,-28,-12,0,0,13,25
  6. n dw 4
  7. ends
  8. stack segment
  9. dw 256 dup(0)
  10. ends
  11. code segment
  12. start:
  13. ; set segment registers:
  14. mov ax, data
  15. mov ds, ax
  16. mov es, ax
  17. xor si,si
  18. xor di,di
  19. mov cx,n
  20. ;--nachalo koda---------------------------------
  21. xor dl, dl
  22. xor cx, cx
  23. xor al, al
  24. xor si, si
  25. xor di, di
  26. mov di, 27
  27. mov cx, 14 ; obnylili i zanesli v cx kol-vo prohodov
  28. CYCL0:
  29. CYCL1: mov ax, mas[si] ; zanosim v dx perviy element
  30. TEST AX,8000h ;
  31. LOOPE CYCL1
  32. CYCL2: mov bx, mas[di] ; zanosim v dx perviy element
  33. TEST AX,8000h ;
  34. LOOPE CYCL2
  35. CMP SI,DI ; sravnivaem SI i DI
  36. JL L1 ; esli men'she to perehod
  37. jmp vix ; esli ravno ili men'she to prigaem na vix
  38.  
  39. L1: mov ax, mas[si] ; zanosim v ax, zna4enie polojitel'nogo elementa
  40. mov bx, mas[di] ; zanosim v bx, zna4enie polojitel'nogo elementa
  41. mov mas[si],bx ; zanosim zna4enie iz mas[di] v mas[si]
  42. mov mas[di], ax ; zanosim zna4enie iz mas[si] v mas[di]
  43. inc si ; dobal9em k si 1
  44. inc si ; dobal9em k si 1
  45. dec si ; otnimaem ot si 1
  46. dec si ; otnimaem ot si 1
  47. LOOP CYCL0
  48. vix:
  49. xor si,si
  50. mov cx, 4
  51. CALL pthis
  52. DB 13,10, 'otsortirovannii massiv= ', 0
  53. ld: mov ax,mas[si]
  54. cbw
  55. inc si
  56. inc si
  57. CALL print_num
  58. CALL pthis
  59. DB ', ', 0
  60. loop ld
  61. mov ax, 4c00h ; exit to operating system.
  62. int 21h
  63. ends
  64. DEFINE_SCAN_NUM
  65. DEFINE_CLEAR_SCREEN
  66. DEFINE_PTHIS
  67. DEFINE_PRINT_NUM
  68. DEFINE_PRINT_NUM_UNS
  69. end start ; set entry point and stop the assembler.

Решение задачи: «Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива»

textual
Листинг программы
  1. ; multi-segment executable file template.
  2.         include 'emu8086.inc'
  3. data segment
  4.     ; add your data here!
  5.    
  6.     mas dw 1,0,4,30,-2,-1,5,7,-28,-12,0,0,13,25  
  7.     n   dw 4
  8.    
  9. ends
  10.  
  11. stack segment
  12.     dw   256  dup(0)
  13. ends
  14.  
  15. code segment
  16. start:
  17. ; set segment registers:
  18.            mov ax, data
  19.            mov ds, ax
  20.            mov es, ax
  21.            xor si,si
  22.            xor di,di
  23.            mov cx,n  
  24.  
  25. ;--nachalo koda---------------------------------
  26.                                      
  27.             xor dl, dl
  28.             xor cx, cx
  29.             xor al, al
  30.             mov si, -2    
  31.             xor di, di  
  32.             mov di, 28
  33.             mov cx, 14              
  34.                                
  35. CYCL0:      push cx
  36.             mov cx, 14
  37.             mov ax,cx                                        
  38. CYCL1:      inc si
  39.             inc si
  40.             mov ax, mas[si]            
  41.             TEST AX,8000h          
  42.             LOOPNE CYCL1
  43.             jnz vix
  44.             sub dx,cx
  45.             mov cx, 14
  46. CYCL2:      dec di
  47.             dec di
  48.             mov bx, mas[di]          
  49.             TEST bx,8000h                                                  
  50.             LOOPNE CYCL2
  51.            
  52.             CMP SI,DI            
  53.             Jl vix          
  54.             mov cx,1
  55.             jmp  vix1:
  56.       vix:  mov ax, mas[si]          
  57.             mov bx, mas[di]            
  58.             mov mas[si],bx        
  59.             mov mas[di], ax        
  60.  
  61.             pop cx
  62.  vix1:
  63. LOOP CYCL0
  64.    
  65.  
  66.  xor si,si
  67.  mov cx, 4
  68.  
  69.  CALL   pthis
  70.    DB 13,10, 'otsortirovannii massiv= ', 0  
  71.  ld: mov ax,mas[si]
  72. cbw
  73.     inc si  
  74.     inc si
  75.    CALL   print_num
  76.    CALL   pthis
  77.    DB  ', ', 0
  78. loop ld    
  79.    
  80.     mov ax, 4c00h ; exit to operating system.
  81.     int 21h    
  82. ends
  83.       DEFINE_SCAN_NUM          
  84.     DEFINE_CLEAR_SCREEN
  85.     DEFINE_PTHIS
  86.     DEFINE_PRINT_NUM
  87. DEFINE_PRINT_NUM_UNS
  88. end start ; set entry point and stop the assembler.

Объяснение кода листинга программы

  1. Объявляются переменные в сегменте данных:    - название переменной: mas, значение переменной: массив чисел {1,0,4,30,-2,-1,5,7,-28,-12,0,0,13,25}    - название переменной: n, значение переменной: 4
  2. Устанавливаются начальные значения регистров и переменных:    - устанавливаются значения регистров ds и es для доступа к данным    - устанавливаются значения переменных si и di в 0    - устанавливается переменная cx равной значению переменной n (4)
  3. Выполняется операция перестановки положительных элементов массива в обратном порядке:    - цикл перебора элементов массива: проверяется каждый элемент массива на положительность и выполнение условия сравнения    - если элемент положительный, он меняется местами с последним положительным элементом    - выводится отсортированный массив чисел
  4. Программа завершается и передает управление операционной системе. Код представляет собой сегментированную программу на языке Assembler для перестановки положительных элементов в массиве в обратном порядке и вывода результата.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы