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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2013, 18:40   #1
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
Сообщение Выбрать из строки те слова, чьи символы упорядочены по алфавиту (Assembler, FASM)

При сравнивании пропускает буквы, так же не ясно как действовать, когда есть пробел (предполагалось в этом условии прыгнуть на цикл перекачки из промежуточного буфера в массив результата), в реализации промежуточного буфера для не до конца проверенных слов, и как обратиться к следующему символу строки на этапе сравнение с предыдущим, дабы убрать строку inc esi , которая, как мне кажется, и портит последовательность проверки.

Код:
section '.data' data readable writeable
i db 58
ArrayZ db 'abc set on the pipe a drop b lost who stay on the pipe',0
ArrayRezult db ?
 
section '.text' code readable executable
Start:
lea esi, [ArrayZ]
lea edi, [ArrayRezult]
movsx ecx, [i]
xor eax, eax

begin:
mov al, [esi]  ;записываем первый эл. строки в al
inc esi        ; переходим на 2-й лемент строки
cmp al, ' '
je begin
cmp al, 0
je Exit
cmp al, [esi]  ; сравниваем элемент со следующим
jl o1         ; если <= то записываем в массив результата
loop begin     
 
o1:
mov [edi], al
inc edi
jmp begin        
Exit:

Последний раз редактировалось Satansoft; 06.11.2013 в 18:42.
Satansoft вне форума Ответить с цитированием
Старый 06.11.2013, 21:16   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Короче не получилось. На FASM перепишете, надеюсь, самостоятельно.
Код:
.model tiny
.code
org 100h
start:

lea bp,ArrayZ
lea bx,ArrayResult
mov cx,len

@1:
mov si,bp
mov al,20h
mov di,si
repnz scasb
mov bp,di

sub di,2
sub di,si
mov dx,di
mov di,bx

@2:
lodsb
mov ah,al
inc ah
cmp ah,[si]
jnz @3

stosb
dec dx
jnz @2

lodsb
stosb
mov al,20h
stosb
mov bx,di

@3:
test cx,cx
jnz @1

exit:
mov dx,offset ArrayResult
mov byte ptr [di-1],24h

mov ah,9
int 21h

xor ax,ax
int 16h

ret
ArrayZ db 'abcdef set def zxy klmn',0
len = $-ArrayZ
ArrayResult db len dup (?)
end start
vadimych вне форума Ответить с цитированием
Старый 07.11.2013, 02:03   #3
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
По умолчанию

Написано под MASM, вижу, но чуть более месяца изучения ASM не позволяют пока осознать весь код, тем более без комментариев и с использованием прерываний.
Satansoft вне форума Ответить с цитированием
Старый 07.11.2013, 06:50   #4
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Вот на fasm под windows, без прерываний. Ход работы программы для лучшего понимания рекомендую посмотреть в отладчике.

Код:
format PE CONSOLE 5.0
entry start

include 'include\win32a.inc'

ArrayZ db 'abcdef set def zxy klmn',0
len = $-ArrayZ
ArrayResult rb len

start:

push ebp
mov ebp,ArrayZ
mov ebx,ArrayResult
mov ecx,len

@1:
mov esi,ebp
mov al,20h
mov edi,esi
repnz scasb
mov ebp,edi

sub edi,2
sub edi,esi
mov edx,edi
mov edi,ebx

@2:
lodsb
mov ah,al
inc ah
cmp ah,[esi]
jnz @3

stosb
dec edx
jnz @2

lodsb
stosb
mov al,20h
stosb
mov ebx,edi

@3:
test ecx,ecx
jnz @1

exit:
pop ebp
mov byte [edi-1],0

invoke printf,ArrayResult
invoke _getch
invoke ExitProcess,0
 
data import
 
  library kernel,'KERNEL32.DLL',\
          msvcrt,'MSVCRT.DLL'
 
  import kernel,\
       ExitProcess,'ExitProcess'
  import msvcrt,\
       printf,'printf',\
       _getch,'_getch' 
end data

Последний раз редактировалось vadimych; 07.11.2013 в 06:52.
vadimych вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки. Проверка принадлежности слова латинскому алфавиту NinoZombie Общие вопросы C/C++ 3 16.05.2011 04:48
упорядочены ли буквы по алфавиту в задаче Анастасья Помощь студентам 1 15.05.2011 16:57
FASM (assembler). Удалить пробелы в начале и в конце строки Zart Помощь студентам 4 23.04.2011 21:18
упорядочены ли буквы по алфавиту Анастасья Помощь студентам 1 11.04.2011 21:14
определить упорядочены ли буквы по алфавиту(Delphi7) Анастасья Помощь студентам 0 10.04.2011 13:31