Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива - 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 для перестановки положительных элементов в массиве в обратном порядке и вывода результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д