Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при сортировке 
:(
    Опции темы
Coruette
Дата 3.12.2011, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.12.2011

Репутация: нет
Всего: нет



Разработать программу по обработке строки, в главной программе присутствуют макрокоманды вызова макроопределения. В строке записаны слова через один или несколько пробелов, переписать в результирующую строку слова через 1 пробел, в начале и в конце строки пробелов быть не должно.А так же записать слова в строке в порядке возрастания их длин.
Код

  Minim macro s1,n1           ;нахождение минимума
  mov   cx,n1    ;Смещение исходной строки
  lea   di,s1    ;Исходная строка
m:
   repe scasb    ;поиск не пробела
   je   n_end
   mov si,di
   dec si        ;Начало слова
   repne scasb   ;поиск пробела
   push di cx ax
   dec di
   mov cx,di    ;Конец слова
   sub cx,si    ;длинна слова
   cmp cx,' '
   je m_m
   cmp cx,min   ;если сх меньше min, то
   jge m_m   
   mov min,cx   ;заносим новый минимум
   mov a1,si    ;его начало 
   mov a2,di    ;и конец   
m_m:
   pop ax cx di
   inc  cx
   loop m
n_end:   
    endm
 
Sorturovka      macro   s1,n1,s2,n2    ;сортировка слов через один пробел
   pusha
   lea  bx,s2
   mov  cx,n1    ;Смещение исходной строки
   lea  di,s1    ;Исходная строка  
   mov  al,' '
c:   
   repe scasb    ;поиск не пробела
   je   m_end
   mov si,di
   dec si        ;Начало слова
   repne scasb   ;поиск пробела
   push di cx ax
   dec di       ;Конец слова
   mov cx,di    
   sub cx,si    ;длинна слова
   mov min,cx
   Minim s1,ns1
   mov cx,min   ;Заносим минимальный элемент
   mov si,a1    ;его начало
   mov di,a2    ;и конец
   push di si
   mov  di,bx
   rep  movsb 
   mov byte ptr es:[di],20h   ;Добавляем пробел
   mov bx,di
   inc bx
   pop si di    
 
f:   
   mov ds:[si],' ' ; заполнение  переписанного
   inc si          ; слова пробелами
   cmp si, di      
   jl f
   
        pop ax cx di
    inc cx
    loop        c
    lea ax,s2
    sub bx,ax
    dec bx
    mov n2,bx
m_end:   
   popa
   endm
;----------------------------   
  
 .286 
;---------------------   
Sseg    segment para stack      'stack'
        db 64 dup(0)
sseg    ends
;---------------------
dseg    segment 'data'
    a1       dw 0
        a2       dw 0
        min      dw 0
    ns1      dw 55
    s1           db     '  первое второе третье четвертое пятое и  шестое слово '
                     db  '$'
    nrs1     dw ?
    rs1      db 55 dup (?)
                 db  '$'
dseg    ends
;--------------------
cseg    segment 'code'
assume  ds:dseg,ss:sseg,cs:cseg
;--------------------
lab8    proc    far
        push    ds
        xor     ax, ax
        push    ax
        mov     ax, dseg
        mov     ds, ax
        mov         es, ax
;-------------------
        Sorturovka      s1,ns1,rs1,nrs1
        ret
lab8 endp
;-------------------
cseg    ends
end     lab8


Здесь есть ошибка, которую я никак не пойму...находится и переписывается самое маленькое слово, потом вместо него в исходной строке записывается пробел, но когда снова ищет минимум, находит тот пробел что был поставлен вместо слова и вписывает его в результирующую строку


Помогите решить проблему...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.