Добавление и удаление элемента массива - 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_num
Удаление:
xor 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
}

Объяснение кода листинга программы

  1. Инициализируем переменные:
    • bx := 0 (смещение между считываемым и сохраняемым элементами массива)
    • si := 1 (индекс текущего элемента)
  2. Начинаем цикл от len (длины массива) до 1:
    • cx := len (инициализация переменной-счетчика цикла)
  3. Проверяем условие:
    • если si == p2 (индекс текущего элемента равен индексу удаляемого элемента)
    • то делаем смещение на один пропускаемый элемент:
      • bx := 1
  4. Копируем элемент a[si-bx] в a[si]
  5. Увеличиваем значение si на 1
  6. Повторяем шаги 3-5 для каждого элемента в цикле

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы