Пояснить несколько строк в сортировке - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день, можете объяснить несколько строк в сортировке пузырьком
sort proc Arr:DWORD, Lngth:DWORD
    mov esi, Arr    ;позиционируемся на массив
a2: mov eax, [Lngth]
    mov ecx,[eax]    
    xor ebx,ebx        
a3: mov eax,[esi+ecx*4-4]    ;получаем значение очередного элемента    
    cmp [esi+ecx*4],eax    ;сравниваем со значением соседнего элемента
    jnb a1    ;если больше или равен - идем к следующему элементу
    setna bl   
    xchg eax,[esi+ecx*4]    ;меняем значение элементов местами
    mov [esi+ecx*4-4],eax
a1: loop a3    ;двигаемся вверх до границы массива
    add esi,4    ;сдвигаем границу отсортированного массива
    dec ebx    ;проверяем были ли перестановки
    jnz exit    ;если перестановок не было - заканчиваем сортировку
    dec Lngth        ;уменьшаем количество неотсортированных элементов
    jnz a2;если есть еще неотсортированные элементы - начинаем новый проход
exit:   ret
 
sort endp
end
Интересует этот код:
a3: mov eax,[esi+ecx*4-4]    ;получаем значение очередного элемента    
    cmp [esi+ecx*4],eax    ;сравниваем со значением соседнего элемента
    jnb a1    ;если больше или равен - идем к следующему элементу
    setna bl   
    xchg eax,[esi+ecx*4]    ;меняем значение элементов местами
    mov [esi+ecx*4-4],eax
Я понимаю, что тут мы меняем эл-ты местами, и идем с конца массива, не могу понять смысл команды setna bl
Команды, обозначаемые (в книгах, не в программах!) SETcc, осуществляют запись в указанный байтовый операнд 1 или 0 в зависимости от одного из 16 условий, определяемых флагами состояния. Если условие ее выполняется, команда записывает в операнд 1; если условие не выполняется - 0.В качестве операнда можно использовать байтовый регистр или 8-битовую ячейку памяти. В составе команд процессора предусмотрены следующие команды условной установки байта: SETNA r/m8 Установить байт, если не выше (CF=1 или ZF=1) Можете пояснить что именно в этой функции setna делает?

Решение задачи: «Пояснить несколько строк в сортировке»

textual
Листинг программы
mov edx,[esi+ecx*4]
mov [esi+ecx*4],eax
mov eax,edx

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

  1. mov edx,[esi+ecx*4] - из памяти по адресу, который содержит значение смещения от элемента в массиве (esi) и индекс элемента в массиве (ecx), берется значение (edx).
  2. mov [esi+ecx*4],eax - значение (eax), которое было получено из предыдущей операции, записывается в память по адресу, который содержит значение смещения от элемента в массиве (esi) и индекс элемента в массиве (ecx).
  3. mov eax,edx - значение (edx), которое было получено из первой операции, записывается в регистр (eax), который в дальнейшем будет использоваться в арифметических операциях.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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