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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2013, 16:29   #1
Пиф
Пользователь
 
Регистрация: 05.03.2013
Сообщений: 10
По умолчанию Не могу разобраться с задачей на ассемблере (GAS Linux) (первая программа, схожу с ума?)

Добавить новый элемент массива, если его значение не равно значениям элементов заданного массива А(I). I = 1,2,..,5. Максимальная размерность массива А(I)=10. Добавляемые числа находятся в массиве B(J). J = 1,2,...,5.


Написал код, но он никак не хочет работать, помогите пожалуйста, это моя первая программа: (такое чувство, что я уже с ума схожу)

Код:
.data
printf_format:
	.string " %d, %d, %d, %d, %d, %d "

MasA:                                       /*Массив MasA*/
	.long 1, 2, 3, 4, 5
SIZE:                                       /*Максимальная размерность массива MasA*/
	.long 10
MasA_end:

MasB:                                       /*Массив MasB*/
	.long 1, 3, 2, 5, 7
MasB_end:


N:                                          /*Переменная под добавляемые элементы*/
	.long 0

.text
.globl main

main: 

movl SIZE, %eax                             /*Заносим max размерность массива MasA - SIZE в регистр %eax*/

movl $MasA, %ebx                            /*Заносим адрес тек. эл-та массива MasA в регистр %ebx*/
movl $MasB, %ecx                            /*Заносим адрес тек. эл-та массива MasB в регистр %ecx*/

movl $0, %edx                               /*Записываем в регистр %edx число 0 (в %edx находится Флаг)*/

jmp cycl2                                   /*Начинаем работу. Прыгаем во вложенный цикл - cycl2*/

cycl2:

	cmpl $5, (%ecx)                     /*Сравниваем Элемент массива MasB с размерностью цикла MasB (тобишь с 5-кой)*/
	je cycl1                            /*Если равенство - перейти во внешний цикл [cycl1]*/
	cmpl %ebx, %ecx                     /*Иначе, сравниваем Элемент массива MasA с элементом массива MasB ???*/
	addl $1, %edx                     /*В регистре %edx прибавляем к 0 единицу, в итоге в %edx хранится единица ???*/
	addl $4, %ecx                       /*Увеличиваем %ecx на размер одного элемента массива, 4 байта*/

cycl1:                                      /*Внешний цикл*/

	cmpl $0, (%edx)                     /*Сравниваем константу 0 со значением хранящемся в регистре %edx ???*/
	je block                            /*Если равенство выполнилось - переходим на метку block*/

	block:                              /*Блок инструкций (что если не выполнилось равенство)*/
		addl N, %eax                /*Прибавить к значению регистра %eax число N ???*/
		movl (%eax), %ebx          
		movl %ecx, %ebx             /*Добавляем Элемент массива MasB, (отличный от эл-тов массива MasA)*/
                                            /*, к уже 5-ти существующим элементам массива MasA ???*/
	
	cmpl $5,(%ebx)                      /*Проверяем не конец ли массива*/
	je cycl3                            /*Если конец - перейти в цикл вывода чисел на экран монитора [cycl3]*/
	jmp cycl1                           /*Иначе, повторить цикл заново*/
	addl $4, %ebx                       /*Увеличиваем %ebx на размер одного элемента массива, 4 байта*/
	incl N                              /*Накапливаем число эл-тов*/
	movl $0, %edx                       /*Заменяем значение хранящееся в регистре %edx (Флаг), на 0*/

cycl3:                                      
	
	movl $0, %ebx                       /*Начинаем обработку цикла с нуля*/
	cmpl %ebx, %eax                     /*Проверяем не конец ли массива*/
	je Exit                             /*Если конец - перейти к метке выхода (Exit)*/
	pushl %ebx                          /*Иначе, загружаем в стек все 5 элементов массива MasA*/

	addl $4, %ebx                       /*Увеличиваем %ebx на размер одного элемента массива, 4 байта*/
	jmp cycl3                           /*Повторяем цикл (cycl3) заново*/
		

Exit:
	pushl %ebx                          /*Выгружаем из регистра %ebx*/
	pushl $printf_format                /*Вызываем маску вывода*/
	call printf                         /*Вызываем функцию вывода*/
	movl $1, %ebx
	movl $0, %ecx
	int $0x80                           /*Организуем прерывание*/
Пиф вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу разобраться с задачей Sagara2_kis7 Помощь студентам 18 28.02.2011 18:56
не могу разобраться с задачей MAX722 Microsoft Office Excel 9 23.02.2011 13:11
схожу с ума!!!!!!!! Mariya181818181818 Паскаль, Turbo Pascal, PascalABC.NET 1 01.06.2009 23:16
я схожу с ума!!!! Mariya181818181818 Помощь студентам 6 01.06.2009 22:33