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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2008, 11:17   #1
Nikolai_90
 
Регистрация: 30.05.2008
Сообщений: 7
По умолчанию вывод на экран

строку символьных данных я ввожу, а вот как переставить символы в строке, и вывести их на экран?

Задача: ввести строку символьных данных, задавая буфер равный 12 байт. Переставить символы в строке следующим образом: первый символ на место последнего, второй на место предпоследнего, ..., предпоследний на место второго, а последний на место первого. Выдавать полученную строку символов в 10 строку экрана, начиная с 30 позиции.

Код:
Stacksg        Segment         stack 
                  dw                 12 dup(?)
Stacksg       ends        
Datasg        segment
buf             db                  12 dup('?')
ll                db                  12 dup('$ ')
namelen      label                byte
maxlen       db                   12
len            db                    ?
lenfld         db                  12 dup(' ')
Datasg       ends    
Codesg      segment
Begin         proc                  far
             Assume  ss:stacksg,cs:codesg,ds:datasg
             Push    ds
             Sub     ax,ax
             Push    ax
             mov     ax,datasg   
             mov     ds,ax
 
             mov     ax,0600h
             mov     bh,07
             mov     cx,0000
             mov     dx,184fh
             int     10h

             mov     ah,02
             mov     bh,00
     	  mov     dh,10
             mov     dl,30
             int       10h
 
             mov     ah,0Ah
             lea       dx,namelen
             int       21h

             sub     dx,dx
             lea     si,lenfld
             mov     cx,12
             mov     al,' '
m1:
             mov     ah,[si]
             cmp     ah,al
             jnz     m2
             inc     dl

m2:
             inc     si
             loop    m1
             mov     al,dl

	  cmp     al,0
    
             mov     ah,02
             mov     bh,00
             mov     dh,11
             mov     dl,30
             int     10h
 
             mov     ah,09h
             lea     dx,lenfld
             int     21h
      	           
             ret     
begin        endp
Codesg       ends
             end     begin
// Пользуйтесь тэгом [code]

Последний раз редактировалось Nikolai_90; 02.06.2008 в 12:18.
Nikolai_90 вне форума Ответить с цитированием
Старый 02.06.2008, 13:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Это что реверсия строки?
Это лаба? тогда так:
Код:
.data
Caption			db "Form1234567890",0
m				db 2

.code
start:
.........
mov ebx, offset Caption
mov edi, ebx
xor eax,eax
repne scasb
mov eax,edi
dec edi
dec edi
sub eax,ebx
div m
xor ecx,ecx
mov cl,al
a1:
 mov al,byte ptr [ebx]
 xchg al, byte ptr [edi]
 mov byte ptr [ebx],al

 inc ebx
 dec edi
loop a1
Если нет то в МАСМ есть szRev воспользуйся ею.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2008, 14:23   #3
Nikolai_90
 
Регистрация: 30.05.2008
Сообщений: 7
По умолчанию

это не лаба. Мне нужно сделать программу, в .exe формате.

"Если нет то в МАСМ есть szRev воспользуйся ею." - szRev - что это, и как ей пользоваться?
Nikolai_90 вне форума Ответить с цитированием
Старый 02.06.2008, 14:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну примерно так:

Код:
; MASM 9
	.386
	.model flat,stdcall
	option casemap:none
	include d:\masm32\include\user32.inc
	include d:\masm32\include\masm32.inc
	include D:\masm32\macros\macros.asm
  includelib d:\masm32\lib\user32.lib
	includelib d:\masm32\lib\masm32.lib
.data
;_______________
Caption			db "Forma моя",0
;_______________
.code
start:
 invoke szRev, addr Caption, addr Caption
   invoke MessageBoxA,FUNC(GetForegroundWindow),addr Caption,0,0
 ret
end start
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2008, 16:01   #5
Nikolai_90
 
Регистрация: 30.05.2008
Сообщений: 7
По умолчанию

А вот мне интересно, можно ли решить эту задачу с помощью циклического сдвига, и если можно, то как?
Nikolai_90 вне форума Ответить с цитированием
Старый 02.06.2008, 16:07   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Nikolai_90, какой ещё циклический сдвиг?! Вам нужно всего-то поменять местами элементы массива в "сужающемся" цикле. Не говоря о том, что можно просто вывести эту строку посимвольно задом-наперёд.
B_N вне форума Ответить с цитированием
Старый 02.06.2008, 16:08   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
с помощью циклического сдвига
А в твоем понимании циклический сдвиг это как?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2008, 17:27   #8
Nikolai_90
 
Регистрация: 30.05.2008
Сообщений: 7
По умолчанию

Я думал что с помощью "ROR" или "ROL" можно всю строку символов сдвинуть по кругу.

Цитата:
Сообщение от B_N Посмотреть сообщение
Не говоря о том, что можно просто вывести эту строку посимвольно задом-наперёд.
А как это сделать? я в ассемблере только месяц занимаюсь, да я с преподом мне не очень повезло.

Последний раз редактировалось rpy3uH; 02.06.2008 в 18:30.
Nikolai_90 вне форума Ответить с цитированием
Старый 02.06.2008, 17:34   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Я думал что с помощью "ROR" или "ROL"
Только для регистров. Максимум для 4-х байт.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2008, 17:47   #10
Nikolai_90
 
Регистрация: 30.05.2008
Сообщений: 7
По умолчанию

А как мне нужно исправить мою программку, чтобы она заработала?
Nikolai_90 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод на экран Rifler Паскаль, Turbo Pascal, PascalABC.NET 10 18.07.2008 18:30
Вывод на 2-ой экран DShiller Общие вопросы Delphi 0 26.05.2008 15:25
вывод массива на экран Неясыть Общие вопросы Delphi 9 20.01.2008 20:18
вывод файла на экран! Шушелла Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.10.2007 09:34