С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 15.10.2016
Сообщений: 23
MASM

Отсортировать по возрастанию только числа, меньше порога, введенного с клавиатуры (раздельная компиляция asm и C)

06.05.2018, 22:27. Показов 875. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Отсортировать по возрастанию только числа, меньше порога, введенного с клавиатуры. Сортировку производить в массиве D.
Числа больше порога должны оставаться на своих местах. Вот такая наработка в объектном файле на MASM. Как допилить?

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
.686
.MODEL FLAT, C
.STACK
.DATA
.CODE
Fun PROC C adr_mas:dword, n:dword, porog:dword
        xor eax,eax
        xor ecx,ecx
        mov esi, adr_mas
        
        a2:
            mov ecx, n
            xor ebx,ebx
        a3:
            mov eax,[esi+ecx*4-4]
            cmp [esi+ecx*4],eax
            jnb a4
            setna bl
            xchg eax,[esi+ecx*4]   
            mov [esi+ecx*4-4],eax
        a4:    
            loop a3   
            add esi,4   
            dec ebx    
            jnz exit    
            dec n
            jnz a2
        exit:
    ret
Fun ENDP
END
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2018, 22:27
Ответы с готовыми решениями:

Зеркально поменять местами разряды внутри старшего и младшего байтов каждого числа. (раздельная компиляция asm и C)
Сюда посылаю 16-битовое число. Как зеркально поменять местами разряды внутри старшего и младшего байтов числа? MASM. .686 .MODEL...

Вводить с клавиатуры 10 целых чисел,выдать на экран те числа,которые меньше введенного с клавиатуры числа,и их сумму
1ая программа. вводить с клавиатуры 10 целых чисел,выдать на экран те числа,которые меньше введенного с клавиатуры числа,и их сумму ...

Поменять местами части строк. Раздельная компиляция QuickC (*.c + *.asm)
Даны 2 строки. Нужно поменять местами их первые, ну допустим 5 символов. Ну т е 5 символов второй строки запихать в 1ю,а 5 символов 1й...

4
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
06.05.2018, 22:38
Думаю, что для начала нужен отлаженный алгоритм. Можете сделать алгоритм на C, а потом построчно переводить его на ассемблер.

Думаю, что алгоритм будет разновидностью пузырька, только сравниваться будут не просто соседние элементы массива, а соседние меньшие порога - т.е. их индексы не обязательно различаются на 1.
1
1 / 1 / 0
Регистрация: 15.10.2016
Сообщений: 23
07.05.2018, 16:05  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int i = 0; i < n; i++) 
    { 
        if (D[i] < porog)
        {
            lastindex = i;   //lastindex - индекс последнего значения меньше порога
            for (int j = i; j < n; j++)
            {
                if (D[j] < D[lastindex] && lastindex != -1)
                {
                    temp = D[j];
                    D[j] = D[lastindex];
                    D[lastindex] = temp;
                }
            }
        }
    }
Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int i = 0; i < n; i++) 
    { 
        if (D[i] <= porog)
        {
            for (int j = i; j < n; j++)
            {
                if (D[j] < D[i])
                {
                    temp = D[j];
                    D[j] = D[i];
                    D[i] = temp;
                }
            }
        }
    }
даже как-то так
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
07.05.2018, 21:13
И такой алгоритм работает? Ведь нет проверки D[j] на (D[j] <= porog)
0
1 / 1 / 0
Регистрация: 15.10.2016
Сообщений: 23
16.05.2018, 19:05  [ТС]
Так вроде работает

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
.686
.MODEL FLAT, C
.STACK
.DATA
.CODE
Fun PROC C adr_mas:dword, n:dword, porog:dword
        
        mov eax, -1
        mov ebx, -1
        mov esi, adr_mas
 
        m1:
            inc eax
            cmp eax, n
            je exit
            mov ecx, [esi + eax*4]
            cmp ecx, porog
            ja m1
            mov ebx,eax
        m2:
            inc ebx
            cmp ebx, n
            je m1
            mov edx, [esi + ebx*4]
            cmp edx, ecx
            ja m2
            xchg ecx , edx
            mov [esi + eax*4], ecx
            mov [esi + ebx*4], edx
            jmp m2
        exit:
    ret
Fun ENDP
END
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2018, 19:05
Помогаю со студенческими работами здесь

Удалить лишние пробелы между словами (раздельная компиляция asm и C)
Есть программа на C++ с ассемблерным кодом. В задании нужно удалить лишние пробелы, т.е. если между пробелами больше одного пробела - всё...

В двумерном массиве A[N*M] найти максимальный элемент в последнем столбце. (раздельная компиляция asm и C)
Есть массив A. extern &quot;C&quot; int Fun(int *a); z = Fun(*A); Надо вернуть максимальный элемент в последнем столбце. .686 ...

Отредактировать текст, удаляя те слова, которые имеют больше 3-х гласных. (раздельная компиляция asm и C)
Как посчитать гласные в ассeмблере, сравнить регистр с пробелом и куда записать слово? Если я написал ерунду, то с помощью чего решить...

Отсортировать по возрастанию числа и вывести те, которые меньше a
Задание такое : дано некоторое число n , затем вводится n чисел , после этого вводится два числа a и b. Нужно : среди этих n чисел...

В конце строки удалить все цифры 0 и символы с кодом меньше пробела (раздельная компиляция Turbo Pascal и TASM)
Помогите, пожалуйста, с ассемблером проблемы, не могу никак понять, как все работает. С высоким уровнем более менее все понятно, а тут гг,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru