Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2012, 05:24   #1
Okami666
 
Регистрация: 10.06.2010
Сообщений: 4
Печаль Модификация строки и число пробелов

Всем доброго времени суток! Помогите, пожалуйста, разобраться в программе на Ассемблере, выполняющую следующее задание: имеется предложение из нескольких слов. Переставить все пробелы в начало строки. Дополнительных строк не использовать. Выдать на печать число пробелов и модифицированную строку. Не могу разобраться в коде, не работает. Посмотрите, пожалуйста, в чем причина и если не составит труда, добавьте комментариев, потому что сам ноль в этом...
вот программа:
Код:
;TASM, COM-файл
.model tiny
.code
.386
org 100h
start:
    mov ah,0Ah
    lea dx,strin
    int 21h
    mov si,dx
 
    mov ah,2
    mov dl,0Ah
    int 21h
 
    inc si
    xor ax,ax
    xor cx,cx
    mov cl,[si]
    mov dh,cl
    add si,cx
    inc si
    mov byte ptr [si],0Dh
    mov word ptr [si+1],240Ah
m1:
    dec si
    dec cl
    cmp byte ptr [si],' '
    jnz short m1
    inc ah
    mov di,si
 
m2:
    dec si
    cmp byte ptr [si],' '
    jnz short m3
    inc ah
    dec cl
    jmp short m2
m3:
    mov al,[si]
    mov [di],al
    dec di
    loop m2
 
    mov cl,ah
    mov al,' '
    std
    rep stosb
    inc di
push ax
    mov ah,9
    mov dx,di
    int 21h
pop ax
 
    lea si,lenL
    mov al,ah
    xor ah,ah
    mov cx,10
m4:
    cmp ax,10
    jb short m5
    xor dx,dx
    div cx
    or dl,30h
    mov [si],dl
    dec si
    jmp short m4
m5:
    or al,30h
    mov [si],al
 
    mov ah,9
    mov dx,si
    int 21h
 
    mov ah,0
    int 16h
 
    ret
 
lenH    db 0
lenL    db 0,'$'
strin db 100,8,'12 34 56',0dh
 
    end start


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 08.06.2012 в 10:53.
Okami666 вне форума Ответить с цитированием
Старый 14.06.2012, 09:55   #2
Fedor666
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 71
По умолчанию

Что-то очень большой и непонятный код.
Имеется строка, получаем ее длину, устанавливаем SI и DI на ее конец и флаг направления - обратный. Делаем LODSB, проверяем AL на пробел. Если пробел, то снова LODSB. Иначе STOSB. И так пока строка не кончится (начнется). Потом заносим в AL пробел и делаем REP STOSB.
Вроде у меня как-то проще получилось и всего три с половиной строчки...
А в чужих кодах пока не ройся, лучше сам с нуля пиши - полезней и понятней!
Fedor666 вне форума Ответить с цитированием
Старый 15.06.2012, 09:46   #3
Okami666
 
Регистрация: 10.06.2010
Сообщений: 4
По умолчанию

Fedor666, тогда может поможете с реализацией данного кода? буду признательно благодарен.
Okami666 вне форума Ответить с цитированием
Старый 15.06.2012, 10:15   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
stroka db 100 dup (?)
....
  mov si, offset stroka 
  mov al, ' '
  mov cx, 100
@loop:
  repne cmpsb
  jnz @ex
  push cx
  push si
  push si
  pop di
  dec si
  sub cx, 101
  neg cx
  std
  rep movsb
  stosb
  pop si
  pop cx
  jmp @loop
ex:
....
что-то вроде такого (не забываем после сборки немножко обрабатывать напильником)
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 15.06.2012 в 11:50.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти максимальное число пробелов идущих подряд angelochek7 Помощь студентам 0 08.05.2012 21:42
Определить, сколько строк массива имеют максимальное число пробелов vaako Паскаль, Turbo Pascal, PascalABC.NET 8 03.04.2012 15:28
Удаление пробелов из строки.... paravoz1k Общие вопросы Delphi 1 13.08.2011 15:21
Количество пробелов до конца строки Qv_1 Microsoft Office Word 8 01.06.2009 19:58
Строки(удаление пробелов). C language SuccEssoR Помощь студентам 4 15.01.2009 17:13