Добавление и удаление элемента массива - Assembler
Формулировка задачи:
Есть программа, которая позволяет создавать массив и затем добавлять в него элемент в определенную позицию, а также удалять элемент из заданной позиции.
В ассемблере я плох, поэтому прошу прокомментировать две части кода(добавление и удаление элемента), или хотя бы объяснить, как работает.
Добавление:
Удаление:
xor ax,ax
xor dx,dx
xor bx,bx
dec p
inc len
mov cx,len
mov di,len
mov si,di
dec si
add_num:
mov dl, arr[si]
mov arr[di],dl
cmp si,p
jne miss
mov dl,num
mov arr[si],dl
dec di
miss:
dec si
dec di
loop add_numxor ax,ax
xor dx,dx
xor bx,bx
dec len
mov cx,len
mov si,1
delete:
cmp si,p2
jne miss_1
inc bx
miss_1:
mov di,si
sub di,bx
mov dl,arr[si]
mov arr[di],dl
inc si
loop deleteРешение задачи: «Добавление и удаление элемента массива»
textual
Листинг программы
bx:=0 // смещение между считываемым и сохраняемым элементами массива
si:=1 //индекс текущего элемента
for cx:=len downto 1
{
if si==p2 //если индекс равен индексу удаляемого элемента
{
bx:=1 //сделать смещение на один пропускаемый элемент
}
a[si-bx]:=a[si]
si:=si+1
}
Объяснение кода листинга программы
- Инициализируем переменные:
- bx := 0 (смещение между считываемым и сохраняемым элементами массива)
- si := 1 (индекс текущего элемента)
- Начинаем цикл от len (длины массива) до 1:
- cx := len (инициализация переменной-счетчика цикла)
- Проверяем условие:
- если si == p2 (индекс текущего элемента равен индексу удаляемого элемента)
- то делаем смещение на один пропускаемый элемент:
- bx := 1
- Копируем элемент a[si-bx] в a[si]
- Увеличиваем значение si на 1
- Повторяем шаги 3-5 для каждого элемента в цикле