![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
dron4ik |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем привет. Цель задания: В одном сегменте данных находиться строка из 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
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата сделал но программа..что то делает не то.. Что именно не то?Цитата Ishodnaia stroka: Что просил - то и получил, что не так?12345678 ABCDEFGH Preobrazovannaia stroka: 12345678 ABCD5678 |
dron4ik |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
она должна пересылать одну строку в другую на пример:
Исходные строки 123456 ABCDE Преобразованные ABCDE 123456 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Но ты НЕ ДЕЛАЕШЬ пересылку в другую сторону, только в одну. У тебя только один MOVSB в программе...
|
dron4ik |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
я написал прогу, но я застрял на таком месте что первая строка пересылается во вторую а вот вторая не пересылается впервую...
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
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Тебе еще раз повторить? У тебя НЕТ пересылки ничего, кроме как первой строки во вторую. Можно уточнить номер строки, в которой данные должны чудесным образом перейти из второй строки в первую? Я не вижу этого места.
|
dron4ik |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
std добавить? a второй rep movsb куда нужно добавить?
Добавлено через 1 мин. извините((ну вот я незнаю как сделать пересылку из второй в первую(( Добавлено через 4 мин. первую легко во вторую переслать а вот вторую в первую...(( вот что у меня выходит на экране Добавлено через 3 мин. я пробовал делать операцию пересссылки второй строки на первую (с точностью наоборот) послеоперации перессылки первой во вторую.. то уменя начинает пищат динамик на пк и какие то не понятные символы выходят.. Эскизы прикрепленных изображений ![]() |
dron4ik |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
все наконец разобрался..
вот код.. 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 то есть конец первой строки в начало второй строки а конец второй строки в начло первой. тоесть строки перевертыши.. вот код...(меняет строки местами т.е. начало первой строки в начало второй строки а начало второй строки в начало первой строик закидывает) Эскизы прикрепленных изображений ![]() |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 4:31 |