Добавление и удаление элемента массива - 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
- }
Объяснение кода листинга программы
- Инициализируем переменные:
- bx := 0 (смещение между считываемым и сохраняемым элементами массива)
- si := 1 (индекс текущего элемента)
- Начинаем цикл от len (длины массива) до 1:
- cx := len (инициализация переменной-счетчика цикла)
- Проверяем условие:
- если si == p2 (индекс текущего элемента равен индексу удаляемого элемента)
- то делаем смещение на один пропускаемый элемент:
- bx := 1
- Копируем элемент a[si-bx] в a[si]
- Увеличиваем значение si на 1
- Повторяем шаги 3-5 для каждого элемента в цикле
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д