Объединение множеств ассемблер
есть следующее задание. Даны два множества заданные в виде массивов А(I) и В(I); I=1,2,..,10. Найти сумму (об’единение) множеств. C(J) - сумма двух множеств есть множество всех элементов принадлежащих А или В. Например, {1,2,3} U {2,3,4} = {1,2,3,4}. Задачу добавления нового элемента массива оформить в виде подпрограммы. Программа работает не корректно, как можно исправить?
.stack 100h
.data
timeCx dw ? ;
A db 1,3,4,6,7,9,12,13,15,16
B db 1,2,4,5,7,8,10,13,15,17
C db 20 dup (0)
len equ 10;
.code
start:
push @data ;инициализируем ds физическим адресом данных
pop ds ;
mov cx,len ;
xor si,si ;
xor di,di ;
xor ax,ax ;обнулили
mov timeCx, 0 ; Количество элементов в массиве С пока нулевое
mov si, offset A ; Указатель в массиве A
mov di, offset C ; Указатель в массиве C
mov cx, len ; Цикл будет по числу элементов в массиве A
copying:
mov al, [si] ; Прочли элемент из массива A
mov [di], al ; Записали его в массив C
inc si ; Продвинули указатель в массиве A
inc di ; Продвинули указатель в массиве C
inc timeCx ; В массиве C стало на один элемент больше
loop copying ; Завернули цикл len раз
; Значение регистра DI тут можно дальше использовать
; как указатель для продолжения заполнения массива C
exit:
mov ax, 4c00h
int 21h
end start