Добавить новый элемент массива, если его значение не равно значениям элементов заданного массива А(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 /*Организуем прерывание*/