Помощь - Поиск - Пользователи - Календарь
Полная версия: Сегменты данных.
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
dron4ik
Всем привет. Цель задания: В одном сегменте данных находиться строка из 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
Цитата
сделал но программа..что то делает не то..
Что именно не то?
Цитата
Ishodnaia stroka:
12345678
ABCDEFGH

Preobrazovannaia stroka:
12345678
ABCD5678
Что просил - то и получил, что не так?
dron4ik
она должна пересылать одну строку в другую на пример:

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

Преобразованные
ABCDE
123456
volvo
Но ты НЕ ДЕЛАЕШЬ пересылку в другую сторону, только в одну. У тебя только один MOVSB в программе...
dron4ik
я написал прогу, но я застрял на таком месте что первая строка пересылается во вторую а вот вторая не пересылается впервую...

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
Тебе еще раз повторить? У тебя НЕТ пересылки ничего, кроме как первой строки во вторую. Можно уточнить номер строки, в которой данные должны чудесным образом перейти из второй строки в первую? Я не вижу этого места.
dron4ik
std добавить? a второй rep movsb куда нужно добавить?

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

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

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

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


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
то есть конец первой строки в начало второй строки а конец второй строки в начло первой.
тоесть строки перевертыши..
вот код...(меняет строки местами т.е. начало первой строки в начало второй строки а начало второй строки в начало первой строик закидывает)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.