Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 15.05.2017
Сообщений: 58

Удалить элементы массива между минимальным и максимальным

26.05.2017, 08:19. Показов 1345. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, в задании нужно удалить элементы массива, между минимумом и максимумом, но как удалять, я без понятия, нашел только минимальный и максимальный.
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
.model   small
.data
.code
array db 1,2,3,4,5
mov si, offset array
mov cx, 5
xor bx, bx                     
@1: 
     lodsb 
     cmp al, bh 
     jg max
     cmp al, bl 
     jl min
     jmp @@1
min: 
     mov bl, al
     jmp @@1
max:
    mov bh, al
@@1:
    loop @1 
mov ah,4ch
int 21h    
end
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2017, 08:19
Ответы с готовыми решениями:

Найти разницу между максимальным и минимальным значениями массива (Си + Asm)
Написать програму на Си которая инициализирует одномерный масив и с помощю Ассемблерной вставки щитает разницу между максимальным и...

Обменять слова с максимальным и минимальным количеством букв «а»
Привет! Выручайте! Необходимо обменять слова с максимальным и минимальным количеством букв "а". Программа вроде работает, но не...

Удалить элементы расположенные между максимальным и минимальным элементами массива Х. Элементы массива Х вычисляются по формуле Xi=((-1)^i)*((i^2)-3*i), где i=1,2,...,10.
Удалить элементы расположенные между максимальным и минимальным элементами массива Х. Элементы массива Х вычисляются по формуле...

6
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,304
Записей в блоге: 12
26.05.2017, 10:37
Очевидно, что нужно кроме числа запоминать ещё и индекс максимального и минимального чисел, а затем занести в si и di эти значения, причём в si должно быть большее из 2-х. Потом тупо копируешь через movsb столько раз, сколько чисел осталось после si (включительно). А остальное (то, что останется между di и si) – не знаю, можно нулями заполнить... смотря что должно быть на месте удалённого. А может, и не надо этого – зависит от задания.

p.s. Вот только есть нюанс: программку-то видно, что не сам делал. И даже не пытался компилировать (потому что она не компилируется). И не пытался запустить (потому что даже если бы компилировалась, то работала бы неправильно: в bl изначально находится число, меньшее минимального, да и данные почему в секции кода? и где инициализации ds? (а для movsb нужно будет ещё и es)).
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
26.05.2017, 11:06
Сами числа запоминать не нужно, достаточно только индексы.
Assembler
1
2
cmp al,[si]
cmp al,[di]
Причем безразлично, в каком регистре, что будет, т.к. в массиве числа могут быть расположены относительно друг-друга, либо так ...MIN...MAX..., либо так ...MAX...MIN... . Перед переносом нужно будет их просто проверить.
0
1 / 1 / 0
Регистрация: 15.05.2017
Сообщений: 58
26.05.2017, 12:23  [ТС]
типо так?
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
.model   small
.data
.code
array db 1,2,3,4,5
mov si, offset array
mov cx, 5
xor bx, bx                     
@1: 
     lodsb 
     cmp al, [si] 
     jg max
     cmp al, [di] 
     jl min
     jmp @@1
min: 
     mov bl, al
     jmp @@1
max:
    mov bh, al
@@1:
    loop @1 
mov ah,4ch
int 21h    
end
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
26.05.2017, 12:29
Цитата Сообщение от flu3xz Посмотреть сообщение
типо так?
НЕТ

Вы смешали код и данные.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,304
Записей в блоге: 12
26.05.2017, 23:29
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Сами числа запоминать не нужно, достаточно только индексы.
Да, числа можно не запоминать. Но если есть свободный регистр, лишним не будет. Всё же работа с регистрами эффективнее. Хотя, в данном случае это не так важно

Добавлено через 15 минут
Цитата Сообщение от flu3xz Посмотреть сообщение
типо
типа

Во-первых, lodsb читает из ds:[si], поэтому нельзя использовать si и там, и там.
Читаем так:
Assembler
1
2
3
4
mov bx,offset array  ; вместо si
. . .
mov al,[bx]
inc bx
лишнее (типа xor bx,bx убираем).

Далее mov bl,al и mov bh,al заменяем тоже на mov di,bx mov si,bx

Добавлено через 2 минуты
А, ну и mov si,bx + mov di,bx после mov bx,offset array, чтобы присвоить им адрес первого элемента (изначально предполагаем, что первый элемент и макс, и мин).
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
27.05.2017, 13:04
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
LOCALS
 
.model small
 
.stack 100h
 
.data
        Array   db      3, 1, 3, 8, 15, 10   ;массив
        Len     dw      $-Array         ;длина массива
 
.code
 
main    proc
    mov ax,     @data
    mov ds, ax
 
        lea     si,     Array
        mov     cx,     Len
        mov     bx,     si      ;адрес минимального элемента
        mov     di,     si      ;адрес максимального элемента
@@MinMax:
        mov     al,     [si]
        cmp     al,     [bx]
        jbe     @@TestMax
        mov     bx,     si
@@TestMax:
        cmp     al,     [di]
        jae     @@Next
        mov     di,     si
@@Next:
        add     si,     1
        loop    @@MinMax
 
        ;определение начального индекса и конечного индекса
        cmp     bx,     di
        jbe     @@NoExchange
        xchg    bx,     di
@@NoExchange:
        ;вычисление количества удаляемых элементов
        mov     cx,     di
        sub     cx,     bx
        jcxz    @@Nothing       ;если все элементы одинаковы и минимум равен максимуму
        dec     cx
        jcxz    @@Nothing       ;если минимальный и максимальный элементы расположены рядом
 
        ;сдвиг массива
        mov     ax,     Len
        ;уточнение длины массива после удаления элементов
        sub     Len,    cx
        ;вычисление количества сдвигаемых элементов массива
        mov     si,     di
        mov     di,     bx
        add     di,     1
 
        lea     cx,     Array   ;cx - адрес начала массива
        add     cx,     ax      ;cx - адрес ячейки после массива
        sub     cx,     si      ;cx - количество сдвигаемых элементов
        ;настройка сегментного регистра es для строковой команды movs
        mov     ax,     ds
        mov     es,     ax
        ;перемещение элементов массива
        rep     movsb
@@Nothing:
    mov ax, 4C00h
    int 21h
main    endp
 
end main
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2017, 13:04
Помогаю со студенческими работами здесь

Удалить все элементы массива, находящиеся между минимальным и максимальным
Помогите пожалуйста решить! Заранее Спасибо!)) 2. Решить задачу: Дан массив натуральных чисел. Удалить все элементы массива,...

Удалить из массива положительные элементы между максимальным и минимальным элементами
1 задача расчитать элементы массива по формуле 2 удалить из полученного массива все положительные элементы, расположенные между...

Удалить из одномерного массива элементы, расположенные между максимальным и минимальным элементами массива
Люди добрые,помогите человеку,не понимающему массивы! Необходимо решить задачу: "Удалить из одномерного массива элементы,...

Удалить все элементы массива расположенные между максимальным и минимальным элементами
в целочисленном массиве X(N) удалить все элементы, расположенные между максимальным и минимальным элеметами. Найти средне арифметическое...

Удалить из массива все положительные элементы, расположенные между максимальным и минимальным
удалить из массива все положительные элементы, расположенные между максимальным и минимальным элементами. при компиляции выдаёт ошибку ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru