0 / 0 / 2
Регистрация: 17.08.2017
Сообщений: 118
1

Сортировка массива слов

02.11.2017, 20:07. Показов 3115. Ответов 10

Author24 — интернет-сервис помощи студентам
Доброго времени суток, сортирую массив слов (dw) в ДосБоксе, но сама сортировка как-то странно работает, вот я в конце в ax заношу 5 элемент, и там должно быть 5, но мне показывает 3, что не так?

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
.model small
.stack 256h
 
.data
Array dw 10, 9, 8, 7, 6 ,5 ,4 ,3 ,2 ,1
Len dw 10
 
.code
main proc 
mov ax,@data    
mov ds,ax
 
lea si, Array
mov cx, Len
call BubbleSort
 
mov si, 5   
mov ax, Array[si-1]        
 
mov ah,4ch          
int 21h
endp main
 
BubbleSort      proc       
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        mov     bx,     si
        mov     dx,     cx
        dec     dx
        shl     dx,     1               
        dec     cx                      
        mov     si,     0
ForI:
        mov     di,     dx             
ForJ:                                 
        mov     ax,     [bx+di-2]       
        cmp     ax,     [bx+di]
        jbe     NextJ                
        xchg    ax,     [bx+di]         
        xchg    ax,     [bx+di-2]       
        xchg    ax,     [bx+di]         
NextJ:
        sub     di,     2              
        cmp     di,     si             
        ja      ForJ
        add     si,     2              
        loop    ForI
 
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
BubbleSort      endp                  
end
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2017, 20:07
Ответы с готовыми решениями:

Сортировка массива слов по возрастанию
Разработать подпрограмму, которая преобразовывает заданное целое двоичное число в символьную...

Сортировка массива слов
Помогите, пожалуйста, нужно отсортировать массив слов по количеству маленьких букв.

Сортировка массива слов
В чем ошибка почему не сортирует массив слов? #include "stdio.h" int main(){ char...

Сортировка слов из массива по алфавиту
Помогите пожалуйста найти ошибку. Неправильно сортирует слова. #include<iostream> using...

10
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,456
Записей в блоге: 8
02.11.2017, 21:21 2
Наверное, потому, что в строках 17 и 18 si это не индекс массива, а смещение относительно начала массива. А размер элемента - напомню - равен 2 байта.
Возникает вопрос - на какой элемент указывает Array[si] при si=4?
1
0 / 0 / 2
Регистрация: 17.08.2017
Сообщений: 118
03.11.2017, 08:50  [ТС] 3
ФедосеевПавел, как же я затупил, на 2 элемент, если с 0 брать

Добавлено через 11 часов 20 минут
ФедосеевПавел, а можно еще вопрос, если я хочу ввести элементы массива для сортировки, вызывая из асма функцию Си программы для ввода массива, вот к примеру у меня код на Си. Как мне вызвать функцию "Enter"? И нужно ли мне, то что буду вводить, записать еще в массив в самом асме, если хочу отсортировать после ввода?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#define n 10
 
void Enter(int * ptr)
{
    int i;
    printf("Enter 10 array elements: ");
    for (i = 0; i < n; i++)
    {
    scanf("%d", &ptr[i]);
    }
}
 
void main ()
{
    int a[n];
    //Enter(a);
    getch();
}
0
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,456
Записей в блоге: 8
03.11.2017, 20:50 4
Это си для Windows или для DOS?
0
0 / 0 / 2
Регистрация: 17.08.2017
Сообщений: 118
03.11.2017, 21:11  [ТС] 5
ФедосеевПавел, и тасм и си под дос, надо как-то их объединить и оба компильнуть через bcc, но я не понимаю как
0
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,456
Записей в блоге: 8
03.11.2017, 21:20 6
Если встроенный ассемблер, попробуйте
C
1
2
3
4
5
6
asm{
    lea ax, [a]
    push ax
    call Enter
    pop ax
}
Это если модель памяти medium или small.

А вместе их объединить - поищите "раздельная компиляция bcc".
Я когда-то прописывал это в окне Project среды bcc 3.1. Но детали уже забыл.
0
0 / 0 / 2
Регистрация: 17.08.2017
Сообщений: 118
03.11.2017, 21:25  [ТС] 7
ФедосеевПавел, а если мне нужно именно с ассемблера вызывать Си функции? Да и проблема не в самой компиляции, а в том как вызвать функцию ввода массива в Си, потом в асм программе отсортировать , опять вызвать си и вывести
0
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,456
Записей в блоге: 8
03.11.2017, 21:35 8
Кажется так (это в файле с ассемблерным кодом)
Assembler
1
2
3
4
5
6
7
extrn Enter near
........
    lea ax, [a]
    push ax
    call Enter
    pop ax       ;если в модели будет язык C, то, возможно, эту строку нужно удалить - нужно смотреть по листингу
........
0
0 / 0 / 2
Регистрация: 17.08.2017
Сообщений: 118
03.11.2017, 21:40  [ТС] 9
ФедосеевПавел, а если я после этого его этим же пузырьком захочу отсортировать, мне его нужно в самом асме еще в массив записать?
0
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,456
Записей в блоге: 8
03.11.2017, 21:54 10
Лучший ответ Сообщение было отмечено DavidJarr как решение

Решение

Нет.
Assembler
1
2
3
4
5
6
    lea ax, [a]
    push ax
    call Enter
    mov cx, [n]
    lea si, [a]
    call Sort
Только переменные a и n нужно объявить как внешние или передать их в asm функцию в виде параметров.

У меня нет bcc, поэтому всё без проверки и в общих фразах. Как объявлять внешние процедуры и переменные - гляньте в руководстве на tasm.

Добавлено через 3 минуты
Для внешних меток в каких-то случаях используют extrn, а в каких-то extern.
1
0 / 0 / 2
Регистрация: 17.08.2017
Сообщений: 118
03.11.2017, 22:25  [ТС] 11
ФедосеевПавел, понял, спасибо за ответ
0
03.11.2017, 22:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2017, 22:25
Помогаю со студенческими работами здесь

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

Сортировка слов из массива по алфавиту
Здравствуйте! Возникла проблема. Написал программу для сортировки слов по алфавиту. Без...

Сортировка массива слов по первой букве
Доброго времени суток! Нужно получить текст, в котором слова исходного текста упорядочены по первой...

Сортировка массива слов в алфавитном порядке
Здравствуйте, хотел узнать как можно произвести &quot;сортировку букв в массиве слов в алфавитном...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru