Ассемблерные вставки в делфи (Найти сумму всех отрицательных элементов) - Assembler

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

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

Здравствуйте! Вот такая задача: Дан массив из 100 элементов, заполняем рандомно от -10 до 20. Найти сумму всех отрицательных элементов. Вот код на делфи:
Нужно сделать ассемблерную вставку вместо кода
Проблема возникает массивом. Заранее спасибо!

Решение задачи: «Ассемблерные вставки в делфи (Найти сумму всех отрицательных элементов)»

textual
Листинг программы
    push    esi     ; сохранить всё кроме eax, ecx, edx
    push    ebx
    xor ebx, ebx    ; sum = 0
    lea esi, [a]    ; esi = @a[i]
    mov ecx, n      ; ecx уменьшается от n do 1
@loop:  mov eax, [esi]  ; eax = a[i]
    cdq         ; edx = знак eax
    and eax, edx    ; если eax > 0, edx = 0, eax = 0; если eax < 0, edx = ffff, eax = eax
    add ebx, eax
    add esi, 4
    dec ecx
    jnz @loop
    mov [sum], ebx
    pop ebx     ; восстановить
    pop esi

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

В этом коде выполняется следующая последовательность действий:

  1. Сохранение регистров:
    • Push esi (сохранение регистра esi)
    • Push ebx (сохранение регистра ebx)
  2. Инициализация переменной sum:
    • Xor ebx, ebx (sum = 0)
  3. Переход к циклу:
    • Lea esi, [a] (esi = @a[i])
    • Mov ecx, n (ecx уменьшается от n do 1)
  4. Цикл для обработки каждого элемента массива:
    • Mov eax, [esi] (eax = a[i])
    • Cdq (edx = знак eax)
    • And eax, edx (если eax > 0, edx = 0, eax = 0; если eax < 0, edx = ffff, eax = eax)
    • Add ebx, eax (sum += eax)
    • Add esi, 4 (esi += 4)
    • Dec ecx (ecx--)
    • Jnz @loop (если ecx больше нуля, перейти к началу цикла)
  5. Запись значения sum в переменную sum:
    • Mov [sum], ebx (sum = ebx)
  6. Восстановление регистров:
    • Pop ebx (восстановление ebx)
    • Pop esi (восстановление esi)

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


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

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

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