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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2009, 01:02   #1
dron4ikkkk
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 12
По умолчанию Работа со строками

Всем привет. Цель задания: В одном сегменте данных находиться строка из 12 символов к примеру 1,2,3,3,4... и в другом сегменте данных находится др строка из 12 символов к примеру А , В , С , К, П... Нужно переслать их между собой побайтно командой MOVSB.
например
исходные строки
123456789123
ЙЦУКЕНГШЩЗХЪ

преобразованные строки

ЙЦУКЕНГШЩЗХЪ
123456789123
т.е. меняються строки местами.. я написал прогу она пересылает первую строку во вторую, а вторая строка в первую не пересылается она я не знаю как переслать вторую в первую(((может кто посмотрет как это сделать вот код проги

Цитата:
Код:
MyData1 Segment 'Data'
Before db 'Ishodnaia stroka: ',0Ah,0Dh,'$'
After db 'Preobrazovannaia stroka: ',0Ah,0Dh,'$'
Source DB '123456789123',0Ah,0Dh,'$'
    
MyData1 EndS
MyData2 Segment 'Data'
Dest DB 'ABCDEFGHRTPZ',0Ah,0Ah,0Dh,'$'
     
MyData2 EndS

MyStack Segment 'Stack' Stack
EmptySpace DW 0,0,0,0
           DW 256 DUP(0)
           DB 64 Dup('Stack123') ; 64*8=512
MyStack EndS

MyCode Segment 'Code'
      DB 'Note: In Exe-file'
      DB 'Datas may be first'
Main Proc
StartPoint:
Assume CS: MyCode, SS: MyStack, DS: MyData1, ES: MyData2


Mov AX, MyData1 ; v before kidaem ishodnie stroki i pokazivaem
Mov DS, AX
mov ah, 09h
lea dx, Before
int 21h
lea dx, Source
int 21h
Mov AX, MyData2
MOv DS, AX
mov ah, 09h
lea dx, Dest
int 21h

Mov AX, MyData1
Mov DS, AX
lea si, Source
Mov AX, MyData2
MOv ES, AX
lea di, Dest

cld
mov cx,12
rep movsb



mov ah, 09h
lea dx, After
int 21h
lea dx, Source
int 21h
Mov AX, MyData2
Mov DS, AX
mov ah, 09h
lea dx, Dest
int 21h




MOV AX, 4C00H
Int 21H
 

Main EndP
MyCode EndS
End StartPoint
dron4ikkkk вне форума Ответить с цитированием
Старый 25.10.2009, 01:04   #2
dron4ikkkk
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 12
По умолчанию

вот что у меня выводит эта прога
Изображения
Тип файла: jpg 1.JPG (18.6 Кб, 96 просмотров)
dron4ikkkk вне форума Ответить с цитированием
Старый 25.10.2009, 03:03   #3
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
masm
model small
stack 100h

mydata1 segment 'Data'
A DB "123456789123","$"
buf DB 12 dup(" "),"$"
mydata1 ends

mydata2 segment 'Data'
B DB "ABCDEFGHRTPZ","$"
mydata2 ends

.code
start:
  mov ax,mydata1
  mov ds,ax
  mov es,ax
  lea si,A
  lea di,buf
  mov cx,12
  
  cld
  rep movsb
  
  mov ax,mydata2
  mov ds,ax
  mov ax,mydata1
  mov es,ax
  lea si,B
  lea di,A
  mov cx,12
  
  rep movsb
  
  mov ax,mydata1
  mov ds,ax
  mov ax,mydata2
  mov es,ax
  lea si,buf
  lea di,B
  mov cx,12
  
  rep movsb
  
  xor ax,ax
  mov ah,09h
  
  mov dx, offset A
  int 21h
  
  mov ax,mydata2
  mov ds,ax
  xor ax,ax
  mov ah,09h

  mov dx, offset B
  int 21h

  mov ax,4c00h
  int 21h
end start
я завел буфер, тебе тоже, думаю, следует его завести в каком-нибудь из сегментов
PS: выполнено в AsmTool v0.93.LE

Последний раз редактировалось capta1n; 25.10.2009 в 03:49.
capta1n вне форума Ответить с цитированием
Старый 25.10.2009, 11:09   #4
dron4ikkkk
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 12
По умолчанию

Спасибо capta1n))))))все отлично работает)))
dron4ikkkk вне форума Ответить с цитированием
Старый 25.10.2009, 11:41   #5
dron4ikkkk
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 12
По умолчанию

А как осуществить такую перессылку:

Исходная строка: каждая строка из 12 символов.
123456789999
qwertyuiopjk


Преобразованная строка:

kjpoiuytrewq
999987654321
то есть конец первой строки в начало второй строки а конец второй строки в начло первой.
тоесть строки перевертыши..
вот код...(меняет строки местами т.е. начало первой строки в начало второй строки а начало второй строки в начало первой строик закидывает)

Код:
MyData1 Segment 'Data'
Before db 'Ishodnaia stroka: ',0Ah,0Dh,'$'
Source DB '123456789123',0Ah,0Dh,'$'
mas1 dw 12 dup(?)
MyData1 EndS

MyData2 Segment 'Data'
Dest DB 'ABCDEFGHRTPZ',0Ah,0Ah,0Dh,'$'   
MyData2 EndS

MyStack Segment 'Stack' Stack
EmptySpace DW 0,0,0,0
           DW 256 DUP(0)
           DB 64 Dup('Stack123') ; 64*8=512
MyStack EndS

MyCode Segment 'Code'
      DB 'Note: In Exe-file'
      DB 'Datas may be first'
Main Proc
StartPoint:
Assume CS: MyCode, SS: MyStack, DS: MyData1, ES: MyData2


Mov AX, MyData1 ; v before kidaem ishodnie stroki i pokazivaem
Mov DS, AX
mov ah, 09h
lea dx, Before
int 21h
lea dx, Source
int 21h
Mov AX, MyData2
MOv DS, AX
mov ah, 09h
lea dx, Dest
int 21h

Mov AX, MyData1; sohranaem v bufer pervuu stroku
Mov DS, AX
MOv ES, AX
lea si, Source
lea di, mas1
mov cx,12
cld
rep movsb

mov ax,mydata2; persilaem vtoruu v pervuu
mov ds,ax
mov ax,mydata1
mov es,ax
lea si, Dest
  lea di, Source
mov cx,12  
  rep movsb


mov ax,mydata1 ; buffer zakid v dest
  mov ds,ax
  mov ax,mydata2
  mov es,ax
  lea si, mas1
  lea di, Dest
  mov cx,12
  rep movsb


xor ax,ax
  mov ah,09h
  
  mov dx, offset Source
  int 21h
  
  mov ax,mydata2
  mov ds,ax
  xor ax,ax
  mov ah,09h
  mov dx, offset Dest
  int 21h






MOV AX, 4C00H
Int 21H
 

Main EndP
MyCode EndS
End StartPoint
dron4ikkkk вне форума Ответить с цитированием
Старый 25.10.2009, 11:46   #6
dron4ikkkk
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 12
По умолчанию

Вот что делает этот код проги.
Изображения
Тип файла: jpg Captain.JPG (19.0 Кб, 92 просмотров)
dron4ikkkk вне форума Ответить с цитированием
Старый 25.10.2009, 14:23   #7
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

надо помудрить со сбросом флага направления cld и установкой флага направления std
capta1n вне форума Ответить с цитированием
Старый 25.10.2009, 14:52   #8
dron4ikkkk
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 12
По умолчанию

Я пытался но получается ерунда какая то...((
dron4ikkkk вне форума Ответить с цитированием
Старый 25.10.2009, 18:48   #9
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

да понимаю, это я глупости сказал насчет std и cld, знаешь, поробуй организовать передачу через цикл loop
capta1n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками semennn Помощь студентам 6 05.05.2009 19:10
Работа со строками в С++ Алекс...))) Помощь студентам 1 04.02.2009 19:48
Работа со строками pant Помощь студентам 2 30.12.2008 17:12
[С++]работа со строками Федор Помощь студентам 6 23.12.2007 12:35