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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2011, 03:06   #1
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию Работа с массивами

Доброго времени суток!
Есть задание, с основной частью я справился, но один нюанс никак не могу разобрать.
Вот задание:
Задано шаблон структуры
Node struc
namex db 4 dup (?)
dst dw ?
Node ENDS
Задано логический сегмент
Data1 segment
I_struc db ?
Order db 0,4,2,1,3
A1 Node 5 dup (<>)
Data1 ends
1.Создать сегмент данных (например, с именем Code1), в котором программа реализовывала такое задание – на базе массива А1 создать кольцевой список, где в поле dst структуры А1[0] записывается смещение в сегменте структуры А1[4], в поле dst структуры А1[4] записывается смещение в сегменте структуры А1[2] и т.д. согласно с порядком, который задан в массиве Order. В поле dst структуры А1[3] записывается смещение в сегменте структуры А1[0]. При создании программы для индексации массивов структур используется байт по адресу I_struc.
2.Создать еще один логический сегмент данных (например, з именем Data2), в котором задать следуйщую директиву
A2 Node 5 dup (<>)
3.Создать еще 1 логический сегмент кодов (например, с іменем Code2), в котором путем использования цепочных команд переписать массив А1 в массив А2, и откоректировать значения полей dst, чтобы массив А2 тоже являл собой кольцевио список. Обеспечить безусловную передачу управления из сегмента Code1 в сегмент Code2 с помощью непрямой межсегментной передачи управленния.
вот мой код
Код:
.386
Node		struc
namex		db	4 dup (?)
dst		dw	?
Node		ENDS


Data1 segment use16
I_struc		db		?
Order		db		0,4,2,1,3
A1		Node		5 dup (<>)
addr_lbl		dd		lbl
Data1 ends

Code1 segment	use16
	assume cs:code1,ds:data1

begin:	mov dx,data1
	mov ds,dx
	
	mov I_struc[0],0
	xor dh,dh
	xor ch,ch
	xor bh,bh
@10 :	mov bl,i_struc[0]
	cmp bx,4
	jg @20
	mov cl,order[bx]
	cmp bx,4
	je @30
	inc bx
	mov dl,Order[bx]
@40 :	imul si,dx,type node
	add si,6
	imul di,cx,type node
	mov [di+10],si
	inc i_struc[0]
	jmp @10
@30 :   mov dl,order[0]
	jmp @40
@20 :   jmp addr_lbl
Code1 ENDS

data2 segment use16
A2			Node		5 dup (<>)
data2 ends

code2 segment use16
	assume cs:code2,es:data2,ds:data1

lbl:	mov dx,data2
	mov es,dx
	mov si,6
	mov di,0

	mov cx,size a2
	rep movsb


	mov ax,0
	mov di,4
@60 :	cmp ax,length a2
	jg @50
	mov cx,di
	sub cx,6
	add di,type a2
	inc ax
	jmp @60

@50 : 	mov dx,data2
	mov ds,dx

	mov dx,4c00h
	int 21
code2 ends
end begin
Проблема в том 3 пункте. Массив А2 не корректируется, тоесть смещения не меняются под новы й массив. Буду признателен за помощь в решение данного нюанса.
Gausse вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами. BaRSyk174 Помощь студентам 0 27.12.2010 23:03
Работа с массивами kaaron Общие вопросы C/C++ 1 24.10.2010 19:40
C#: работа с массивами tyurroma Помощь студентам 6 19.09.2010 15:16
Работа с массивами Эллочка Помощь студентам 2 18.11.2009 16:14
Работа с массивами на VB =Apple= Помощь студентам 11 16.06.2009 14:29