Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Одномерный массив


Автор: Truegirl 4.7.2010, 22:14
Ребята, помогите разобраться с массивами ассемблере.
Вот есть такое задание :
Удалить нечетные по значению элементы. Отсортировать полученный массив по убыванию. 

Вопрос в следующем. Как на ассемблере определить, что элемент четный/нечетный и как удалить? 

Автор: DarkProg 5.7.2010, 08:19
Выполнить операцию деления на 2 и посмотреть остаток, если остаток равен 0, значит чётный элемент в противном нечетный.

Удалить элемент можно одним из способов как в высокоуровневых языках либо вы просто создаёте второй массив куда кидаете все чётные элементы, либо делаете циклический сдвиг всех элементов на один влево, с уменьшением значения длины массива(на саму длину вы не сможете повлиять, а просто уменьшаете значение некоторой переменной где хранится число элементов массива)

Далее можно ожидать только вашего кода, решать здесь за вас не будут.

Автор: Truegirl 5.7.2010, 14:08
спасибо огромное. В процессе выполнения появилась проблема. Я решила не удалять элементы, а занести четные элементы в новый массив result, когда он сформировался его надо вывести на экран,тот метод, который нам дал препод не работает,как  правильно вывести получившийся массив?


Код

sseg   segment stack 'stack'
    db  64  dup(0)
sseg ends

dseg segment

array  DB  2,1,7,3,4  
n db 5 
result db dup(0)      
s db dup(0)
 dseg ends
 cseg segment 
     assume cs: cseg ss:sseg ds:dseg  
     lab3   proc      far  
     push      ds     
     sub       ax,ax 
     push      ax  
     mov       ax,dseg
     mov       ds,ax  
     
             
    
mov si,offset array
m1: lodsb 
       test al,00000001b
       jz m2
       add [result],al 
       adc [result+1],0    
      ; cmp array, 5 
      ; jne m1
      ; jmp print
    
m2: 
  mov al, result[si]  
  cmp si, 5 
  jne m1
  jmp print      
  
  

print:
 mov dl, 30h   
 mov cl, ','    
 sub si,si
j1: 
 mov al, result[si]
 add al,dl
 mov  s[si],al
 inc si
 mov s[si],cl
 inc si
 cmp si,dx
 jl j1
 mov ah, 09h
 mov dx, offset s
 int 21h/9h   
         ret
lab3   endp
                        
cseg ends

end lab3

        

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)