Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Imp3l
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 69
1

Из массива чисел сформировать новый массив, в который должны войти нечетные числа

25.02.2018, 13:34. Просмотров 790. Ответов 3
Метки нет (Все метки)

Дан массив чисел Х = 0,3,-15,19,-26,49,-61,18,55,4. Необходимо сформировать новый массив Y в который должны войти нечетные числа.

Сделал по примеру похожей программы, но что-то не правильно и не могу понять где

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
SDATA SEGMENT WORD PUBLIC 'DATA'
 
    ARRAY_X     DB 0,3,-15,19,-26,49,-61,18,55,4 ; - массив чисел X
    ARRAY_Y     DB 10 DUP(0)                        ; - массив чисел Y
 
SDATA ENDS
 
SSTACK SEGMENT PARA STACK 'STACK'
 
    DW 64 DUP(?)
        
STACK_POINT LABEL WORD
SSTACK ENDS
 
START: MOV AX,SDATA             
    MOV DS,AX                   
    MOV AX,SSTACK       
    MOV SS,AX               
    MOV SP,OFFSET STACK_POINT   
    MOV SI,0                
    MOV DI,0                
    MOV CX,10           
                            
M1: MOV AL,ARRAY_X[SI] 
    IDIV 2  
    CMP AL,2            
    JGE M2                  
    MOV ARRAY_Y[DI],AL      
    INC DI                  
        
M2: INC SI                  
    LOOP M1                 
    MOV AX,4C00H            
    INT 21H                 
                            
SCODE   ENDS                
END START
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2018, 13:34
Ответы с готовыми решениями:

Сформировать новый массив, включив в него все неповторяющиеся элементы исходного массива
Сформировать новый массив, включив в него все неповторяющиеся элементы...

Массив: Из массива чисел создать новый массив, в котором каждое четное число уменьшено в два раза без использования операции деления
Задание: Из массива целых положительных чисел создать новый массив, в котором...

Сформировать массив В из чисел массива А кратных 5
Всем привет! Нужна, Ваша помощь! Задание: Сформировать массив и напечатать...

Перенести в новый массив 13 и 21 биты из чисел старого массива
Помогите сделать сом програму в сегменте даних задать n(n<11) чисел типа DD...

Сформировать массив чисел из целых положительных степеней числа 2
Помогите решить! Сформировать массив чисел, состоящий из целых положительных...

3
Jin X
4970 / 1427 / 165
Регистрация: 14.12.2014
Сообщений: 2,724
Записей в блоге: 8
Завершенные тесты: 2
25.02.2018, 14:23 2
Лучший ответ Сообщение было отмечено Imp3l как решение

Решение

Неправильно то, что вы читаете и записываете в один и тот же массив:
Цитата Сообщение от Imp3l Посмотреть сообщение
MOV SI,0
MOV DI,0
DI должен указывать на ARRAY_Y (OFFSET ARRAY_Y)
И второе: инструкции idiv 2 нет, idiv делит на регистр, а не на константное число. При этом делит AX, а не AL (если говорить о делении на байт), т.е. AL нужно расширять до AX (cbw). Да и как-то вы странно проверяете число на чётность: если частное больше или равно 2, значит число чётное – оригинально!
Обычно пишут:
Assembler
1
2
test al,1
jnz НеЧётное
безо всяких делений...

Добавлено через 1 минуту
Соответственно:
Assembler
1
2
test al,1
jz Чётное
1
Imp3l
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 69
25.02.2018, 15:17  [ТС] 3
Если я все правильно сделал, то должно получиться следующее:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
START: MOV AX,SDATA             
    MOV DS,AX                   
    MOV AX,SSTACK               
    MOV SS,AX                   
    MOV SP,OFFSET STACK_POINT   
    MOV SI,0                    
    MOV DI,0                    
    MOV CX,10                   
                                
M1: MOV AL,ARRAY_X[SI]          
    test al,1                   
    jnz M2                  
    MOV ARRAY_Y[DI],AL          
    INC DI                  
        
M2: INC SI                  
    LOOP M1             
    MOV AX,4C00H
    INT 21H
0
Jin X
4970 / 1427 / 165
Регистрация: 14.12.2014
Сообщений: 2,724
Записей в блоге: 8
Завершенные тесты: 2
25.02.2018, 16:31 4
Почти. Вам же нечётные нужны. Тогда прыгать нужно, если число чётное: jz M2.

И не забудьте перед START'ом добавить:
Assembler
1
2
SCODE SEGMENT 'CODE'
ASSUME CS:SCODE, DS:SDATA, SS:SSTACK
Вот эти строки, кстати, бессмысленны:
Assembler
1
2
3
MOV AX,SSTACK               
MOV SS,AX                   
MOV SP,OFFSET STACK_POINT
т.к. стек у вас и так уже настроен словом STACK при объявлении сегмента SSTACK.

Добавлено через 7 минут
А вообще, сегмент стека я рекомендую располагать всегда в конце.
А перед ним – данные, особенно, если там есть неинициализированные ? данные (типа Some db 10 dup (?) – их в самый конец сегмента данных).

Добавлено через 2 минуты
Короче, все неинициализированные сегменты и данные – в конец.

Добавлено через 2 минуты
В вашем случае: SCODE, SDATA, SSTACK, ну или хотя бы SSTACK в конец...

Добавлено через 55 секунд
Это всё нужно для уменьшения размера EXE-файла – чтобы не записывать ненужные нули в середину файла...
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2018, 16:31

Двумерный массив. Сформировать из элементов массива одномерный массив, в который поместить все нечетные элементы, которые делятся на 3
Дан двумерный массив А с размерностью NxN, элементы массива - случайные целые...

Сформировать другой массив, в который нечетные элементы из первого массива переписать без изменений
Уже всю голову пробил, в чем ошибка? По сути программа должна выводить 2...

Из данного массива сформировать новый массив Y, в который записать все ненулевые элементы массива Х
Помогите создать новый массив Y, в который записать все ненулевые элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru