Сумма элементов массива, находящихся на нечетных местах - Assembler

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

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

Подскажите как это можно реализовать?Найти сумму элементов массива, находящихся на нечетных местах Для определенных 8 цыфр: на пример 1, 3, 12, -4, -6,- 2, 1, -8 Если можно то с коментами что бы было проще разобраться

Решение задачи: «Сумма элементов массива, находящихся на нечетных местах»

textual
Листинг программы
.model small
.stack 100h
.data
massiv db 5,4,3,6,7,8,22,15     
sym db ? 
.code
start:
mov ax,@data
mov ds,ax
mov es,ax 
 
mov cx,8 ;количество элементов
proverka:
mov al,massiv[si] ;заносим элемент массива
test si,1;проверка на чётность
jnz esline4etnoe ;если нечётное то переходишь на метку иначе идёшь дальше
inc si ;и увеличиваешь si,т.е переходишь к следующему элементу
loop proverka ;цикл заново пока сх не станет 0
jmp exit ;если же последний элемент поступивший сюда будет на чётной позиции то тупо выход,иначе прога слетит и начнёт работать до тех пор пока стек не переполниться
esline4etnoe:
add sym,al ;суммируем числа
inc si ;объяснял уже
loop proverka ;цикл
 
exit: ;выход...
mov ax,4c00h
int 21h

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

  1. .model small - устанавливает модель памяти, в данном случае - маленькую (small), что означает, что адрес стека будет в пределах 64 Кб;
  2. .stack 100h - устанавливает размер стека в 100 байт;
  3. .data - секция данных;
  4. massiv db 5,4,3,6,7,8,22,15 - определение массива на 8 элементов, начиная с адреса 5 (массив может быть больше, но в данном коде используется только 8 элементов);
  5. sym db ? - переменная для хранения суммы нечетных элементов;
  6. .code - секция кода;
  7. start: - метка начала работы программы;
  8. mov ax,@data - перенос сегмента данных в регистр AX;
  9. mov ds,ax - установка сегмента данных в качестве активного;
  10. mov es,ax - установка сегмента данных в качестве сегмента стека;
  11. mov cx,8 - установка счётчика на 8 (количество элементов в массиве);
  12. proverka: - метка цикла;
  13. mov al,massiv[si] - загрузка очередного элемента массива в регистр AX;
  14. test si,1 - проверка на чётность текущего индекса;
  15. jnz esline4etnoe - если индекс нечётный, переход на метку esline4etnoe;
  16. inc si - увеличение индекса на 1;
  17. loop proverka - переход на метку proverka;
  18. esline4etnoe: - метка для обработки нечётных индексов;
  19. add sym,al - добавление текущего элемента массива к переменной sym;
  20. inc si - увеличение индекса на 1;
  21. loop proverka - переход на метку proverka;
  22. exit: - метка выхода из программы;
  23. mov ax,4c00h - код выхода из DOS;
  24. int 21h - вызов интеррутуры 21h для выхода из программы.

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

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