Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива - Assembler
Формулировка задачи:
Условие задачи:
Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива;
Незнаю в чем ошибка. Посоветуйте что-нибудь пожалуйста.
Листинг программы
- ; multi-segment executable file template.
- include 'emu8086.inc'
- data segment
- ; add your data here!
- mas dw 1,0,4,30,-2,-1,5,7,-28,-12,0,0,13,25
- n dw 4
- ends
- stack segment
- dw 256 dup(0)
- ends
- code segment
- start:
- ; set segment registers:
- mov ax, data
- mov ds, ax
- mov es, ax
- xor si,si
- xor di,di
- mov cx,n
- ;--nachalo koda---------------------------------
- xor dl, dl
- xor cx, cx
- xor al, al
- xor si, si
- xor di, di
- mov di, 27
- mov cx, 14 ; obnylili i zanesli v cx kol-vo prohodov
- CYCL0:
- CYCL1: mov ax, mas[si] ; zanosim v dx perviy element
- TEST AX,8000h ;
- LOOPE CYCL1
- CYCL2: mov bx, mas[di] ; zanosim v dx perviy element
- TEST AX,8000h ;
- LOOPE CYCL2
- CMP SI,DI ; sravnivaem SI i DI
- JL L1 ; esli men'she to perehod
- jmp vix ; esli ravno ili men'she to prigaem na vix
- L1: mov ax, mas[si] ; zanosim v ax, zna4enie polojitel'nogo elementa
- mov bx, mas[di] ; zanosim v bx, zna4enie polojitel'nogo elementa
- mov mas[si],bx ; zanosim zna4enie iz mas[di] v mas[si]
- mov mas[di], ax ; zanosim zna4enie iz mas[si] v mas[di]
- inc si ; dobal9em k si 1
- inc si ; dobal9em k si 1
- dec si ; otnimaem ot si 1
- dec si ; otnimaem ot si 1
- LOOP CYCL0
- vix:
- xor si,si
- mov cx, 4
- CALL pthis
- DB 13,10, 'otsortirovannii massiv= ', 0
- ld: mov ax,mas[si]
- cbw
- inc si
- inc si
- CALL print_num
- CALL pthis
- DB ', ', 0
- loop ld
- mov ax, 4c00h ; exit to operating system.
- int 21h
- ends
- DEFINE_SCAN_NUM
- DEFINE_CLEAR_SCREEN
- DEFINE_PTHIS
- DEFINE_PRINT_NUM
- DEFINE_PRINT_NUM_UNS
- end start ; set entry point and stop the assembler.
Решение задачи: «Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива»
textual
Листинг программы
- ; multi-segment executable file template.
- include 'emu8086.inc'
- data segment
- ; add your data here!
- mas dw 1,0,4,30,-2,-1,5,7,-28,-12,0,0,13,25
- n dw 4
- ends
- stack segment
- dw 256 dup(0)
- ends
- code segment
- start:
- ; set segment registers:
- mov ax, data
- mov ds, ax
- mov es, ax
- xor si,si
- xor di,di
- mov cx,n
- ;--nachalo koda---------------------------------
- xor dl, dl
- xor cx, cx
- xor al, al
- mov si, -2
- xor di, di
- mov di, 28
- mov cx, 14
- CYCL0: push cx
- mov cx, 14
- mov ax,cx
- CYCL1: inc si
- inc si
- mov ax, mas[si]
- TEST AX,8000h
- LOOPNE CYCL1
- jnz vix
- sub dx,cx
- mov cx, 14
- CYCL2: dec di
- dec di
- mov bx, mas[di]
- TEST bx,8000h
- LOOPNE CYCL2
- CMP SI,DI
- Jl vix
- mov cx,1
- jmp vix1:
- vix: mov ax, mas[si]
- mov bx, mas[di]
- mov mas[si],bx
- mov mas[di], ax
- pop cx
- vix1:
- LOOP CYCL0
- xor si,si
- mov cx, 4
- CALL pthis
- DB 13,10, 'otsortirovannii massiv= ', 0
- ld: mov ax,mas[si]
- cbw
- inc si
- inc si
- CALL print_num
- CALL pthis
- DB ', ', 0
- loop ld
- mov ax, 4c00h ; exit to operating system.
- int 21h
- ends
- DEFINE_SCAN_NUM
- DEFINE_CLEAR_SCREEN
- DEFINE_PTHIS
- DEFINE_PRINT_NUM
- DEFINE_PRINT_NUM_UNS
- end start ; set entry point and stop the assembler.
Объяснение кода листинга программы
- Объявляются переменные в сегменте данных:
- название переменной:
mas
, значение переменной: массив чисел {1,0,4,30,-2,-1,5,7,-28,-12,0,0,13,25} - название переменной:n
, значение переменной: 4 - Устанавливаются начальные значения регистров и переменных: - устанавливаются значения регистров ds и es для доступа к данным - устанавливаются значения переменных si и di в 0 - устанавливается переменная cx равной значению переменной n (4)
- Выполняется операция перестановки положительных элементов массива в обратном порядке: - цикл перебора элементов массива: проверяется каждый элемент массива на положительность и выполнение условия сравнения - если элемент положительный, он меняется местами с последним положительным элементом - выводится отсортированный массив чисел
- Программа завершается и передает управление операционной системе. Код представляет собой сегментированную программу на языке Assembler для перестановки положительных элементов в массиве в обратном порядке и вывода результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д