Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2017, 13:21   #1
CloudHype
Новичок
Джуниор
 
Регистрация: 17.05.2017
Сообщений: 3
Восклицание Assembler (emu8086) Обратный порядок, не меняя положения остальных элементов массива;

Помогите пожалуйста с заданием, ибо сам уже не знаю...
Условие задачи: Переставить положительные элементы в обратном порядке, не меняя положения остальных элементов массива;
Код:
; 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 14
    
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           ;                                           
            inc si
            inc si
            LOOPE CYCL1
           
CYCL2:      mov bx, mas[di]         ; zanosim v dx perviy element       
            TEST AX,8000h           ;                                           
            dec di
            dec di
            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, 14 
 
 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.

Последний раз редактировалось CloudHype; 17.05.2017 в 13:25. Причина: Нашел ошибку, но вопрос в силе
CloudHype вне форума Ответить с цитированием
Старый 17.05.2017, 23:37   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

CloudHype, что значит "в обратном порядке"? Соседнии пары обменять что-ли?
Покажи на своих значениях массива, какой должен быть результат..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 18.05.2017, 19:35   #3
CloudHype
Новичок
Джуниор
 
Регистрация: 17.05.2017
Сообщений: 3
По умолчанию

первый поменять с последним и так далее, например: Изначальный массив: 1,2,-3,4,5
Остортированный массив: 5,4,-3,2,1.
CloudHype вне форума Ответить с цитированием
Старый 18.05.2017, 19:37   #4
CloudHype
Новичок
Джуниор
 
Регистрация: 17.05.2017
Сообщений: 3
По умолчанию

Решили, код прилагаю:
Код:
; 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.
CloudHype вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание на проверку.Задание:Изменить порядок следования элементов массива на обратный. Valiev1 Помощь студентам 1 26.10.2015 20:06
Изменить порядок следования элементов в массиве на обратный, используя массив указателей YaDenis Помощь студентам 0 11.01.2013 19:50
порядок элементов массива Gordan007 Помощь студентам 0 17.12.2011 03:14
Поменять порядок следования отрицательных элементов на обратный JeyKip Общие вопросы C/C++ 1 14.01.2010 01:23