IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Сегменты данных., Пересылка строк побайтно(MOVSB) находящихся в разных сегментах данных.
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Всем привет. Цель задания: В одном сегменте данных находиться строка из 12 символов к примеру 1,2,3,3,4... и в другом сегменте данных находится др строка из 12 символов к примеру А , В , С , К, П... Нужно переслать их между собой побайтно командой MOVSB.
сделал но программа..что то делает не то..


DAdata1 segment 'Data'
Before db 'Ishodnaia stroka: ',0Ah,0Dh,'$'
After db 'Preobrazovannaia stroka: ',0Ah,0Dh,'$'
Source db '12345678',0Ah,0Dh,'$'

DAdata1 ends
DAdata2 segment 'Data'
Dest db 'ABCDEFGH',0Ah,0Ah,0Dh,'$'
DAdata2 ends

DAstack segment 'Stack' stack
emptyspace dw 0,0,0,0
dw 256 dup(0)
DAstack ends

DAcode segment 'Code'
main proc
StartPoint:
assume cs: DAcode,ss: DAstack,ds: DAdata1,es: DAdata2

mov ax, DAdata1
mov ds, ax
mov ah, 09h
lea dx, Before
int 21h
lea dx, Source
int 21h
mov ax, DAdata2
mov ds, ax
mov ah, 09h
lea dx, Dest
int 21h

mov ax, DAdata1
mov ds, ax
lea si, Source+7
mov ax, DAdata2
mov es, ax
lea di, Dest+7
std ; cld
mov cx,4
rep movsb
mov ah, 09h
lea dx, After
int 21h
lea dx, Source
int 21h
mov ax, DAdata2
mov ds, ax
mov ah, 09h
lea dx, Dest
int 21h

MOV AX, 4C00H
Int 21H

Main EndP
DACode ends
End StartPoint
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
сделал но программа..что то делает не то..
Что именно не то?
Цитата
Ishodnaia stroka:
12345678
ABCDEFGH

Preobrazovannaia stroka:
12345678
ABCD5678
Что просил - то и получил, что не так?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


она должна пересылать одну строку в другую на пример:

Исходные строки
123456
ABCDE

Преобразованные
ABCDE
123456
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Но ты НЕ ДЕЛАЕШЬ пересылку в другую сторону, только в одну. У тебя только один MOVSB в программе...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


я написал прогу, но я застрял на таком месте что первая строка пересылается во вторую а вот вторая не пересылается впервую...

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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Тебе еще раз повторить? У тебя НЕТ пересылки ничего, кроме как первой строки во вторую. Можно уточнить номер строки, в которой данные должны чудесным образом перейти из второй строки в первую? Я не вижу этого места.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


std добавить? a второй rep movsb куда нужно добавить?

Добавлено через 1 мин.
извините((ну вот я незнаю как сделать пересылку из второй в первую((

Добавлено через 4 мин.
первую легко во вторую переслать а вот вторую в первую...((

вот что у меня выходит на экране

Добавлено через 3 мин.
я пробовал делать операцию пересссылки второй строки на первую (с точностью наоборот) послеоперации перессылки первой во вторую.. то уменя начинает пищат динамик на пк и какие то не понятные символы выходят..


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


все наконец разобрался..
вот код..


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


вот скрин что делает эта прога

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

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


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

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


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 31.10.2020 15:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name