Среднее арифмитическое квадратов ненулевых элементов массива - Assembler

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

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

ВОПРОС: как найти квадрат числа (слово) а*а=а в квадрате. Если я не ошибаюсь! но ведь диапазон чисел (слово) = 0 - 65535 и как быть если пользователь задаст число 65535 (для чисел со знаком –32 768...+32 767; для чисел без знака 0...65 535 то как то не совсем понятно! будет ведь скорей всего складываться только остаток
MOV AL, 2
IMUL AL      ; AX = 4
RET

Решение задачи: «Среднее арифмитическое квадратов ненулевых элементов массива»

textual
Листинг программы
      LEA   SI, dwArray
      MOV   CX, dwDimenArray 
 
      XOR   BX, BX
      XOR   DI, DI            ; Array Sum = DI:BX = 0
addloop:
      LODSW                   ; AX = DS:[SI], SI = SI + 2 
      CMP   AX, 0 
      JE    @addloop
      IMUL  AX                    
      ADD   BX, AX
      ADC   DI, DX            ; DI:BX = DI:BX + DX:AX  
      INC   KolNotZERO
@addloop:
      LOOP  addloop   
;BX=младшая часть числа
;DI=старшая часть числа   
      MOV   CX, KolNotZERO       
      CMP   CX, 0
      JE   OnlyZero
      MOV   AX, DI
      XOR   DX, DX
      DIV   CX
      XCHG  BX, AX
      DIV   CX 
;AX=младшая часть числа
;BX=старшая часть числа

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

  1. Инициализация счётчика и указателя на массив: LEA SI, dwArray MOV CX, dwDimenArray
  2. Инициализация суммы элементов массива: XOR BX, BX XOR DI, DI
  3. Начальный цикл обработки элементов массива: addloop: LODSW CMP AX, 0 JE addloop
  4. Вычисление квадрата текущего элемента массива: IMUL AX
  5. Добавление квадрата к сумме: ADD BX, AX ADC DI, DX
  6. Увеличение счётчика элементов массива: INC KolNotZERO
  7. Проверка: является ли сумма элементов массива равной нулю? CMP CX, 0 JE OnlyZero
  8. Переменные AX и BX используются для хранения результата вычисления среднего арифметического: MOV AX, DI XOR DX, DX
  9. Деление суммы на количество ненулевых элементов массива: DIV CX
  10. Обмен младшей и старшей частей числа: XCHG BX, AX
  11. Деление суммы на количество ненулевых элементов массива: DIV CX
  12. Выход из программы: OnlyZero: ENDP

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

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