Количество отрицательных из заданного массива - Assembler

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

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

Есть заданный массив ,количество отрицательных в регистр ESI
void main () {
long x[10]={10, -50, 50, -9, -10, 55, 4, -40, 80, -7} ; 
_asm { 
lea EBX, x ; 
mov ECX, 9 ; счетчик повторений
mov EAX, dword ptr[EBX] ; первый элемент – в ЕАХ
m2: add EBX, 4 ; увеличение адреса
cmp......
а дальше не могу ,cравнение с нулем ?

Решение задачи: «Количество отрицательных из заданного массива»

textual
Листинг программы
; переменная X типа WORD
_asm {
     lea  esi,x       ; адрес массива
     mov  ecx,10      ; длина массива
     xor  ebx,ebx     ; счётчик отрицательных
     xor  eax,eax     ; EAX := 0
m1:  lodsw            ; AX - очередной элемент из ESI
     or   ax,ax       ; проверка флага SF на 1
     jns  m2          ; нет - пропускаем
     inc  ebx         ; да - счётчик +1
m2:  loop m1          ; мотаем цикл ECX-раз..
;--------------------------------------------------------
;---------------------; результат в EBX

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

  1. Переменная X типа WORD.
  2. Код инициализирует ESI значением массива.
  3. ECX содержит длину массива, равную 10.
  4. EBX инициализируется как счётчик отрицательных.
  5. EAX инициализируется как 0.
  6. Начинается цикл, который будет выполняться 10 раз (ECX).
  7. Каждый раз в AX будет загружаться очередной элемент массива из ESI.
  8. Флаг SF (старший бит ответа) проверяется на 1, что означает, что текущий элемент отрицательный.
  9. Если SF = 0, то счётчик увеличивается на 1.
  10. Цикл продолжается до тех пор, пока ECX не станет равным 0.
  11. Результат (количество отрицательных) хранится в EBX.

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


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

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

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