Подсчитать сумму элементов двумерного массива - Assembler

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

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

Здравствуйте. Нужно посчитать сумму элементов двумерного массива, а затем вывести результат на экран. Сама функция вывода у меня есть в программе, но работает она не правильно, думаю что нужно использовать коррекцию, но не совсем разобрался. Прошу помочь.
Листинг программы
  1. cseg segment 'code'
  2. assume cs:cseg, ds:dseg
  3. org 100h
  4. main proc
  5. mov ax, dseg ; указывает на регистр данных
  6. mov ds, ax ; указывает на регистр данных
  7. xor bx, bx; обнуление смещение начала строки ?
  8. xor ch, ch; обнуление старшей половины счетчика строк ?
  9. mov cl, M; загрузка в счетчик кол-ва строк
  10. Stolb:
  11. xor si, si; обнуление смещения элемента от начала строки
  12. push cx; сохранение счетчика строк в стеке
  13. mov cl, N; загрузка в счётчик кол-ва столбцов
  14. Strok:
  15. mov al, mas[bx][si]; загрузка в аккум текущего элемента
  16. Call Write
  17. inc si
  18. loop Strok; цикл по элементам строки
  19. xor ah, ah
  20. mov al, N
  21. add bx, ax; переход к след строке
  22. pop cx; восстановление счётчика строк из стека
  23. loop Stolb; цикл по строкам
  24. Exit:
  25. mov ah, 04ch; выход из программы (функция DOS)
  26. mov al, 0h; код возврата
  27. int 21h;
  28. ret; возвращаем управление отладчику
  29. Write proc
  30. mov ah, 02h
  31. int 21h
  32. ret
  33. Write ENDP
  34. main endp
  35. dseg segment
  36. mas db 01h,02h
  37. db 04h,05h
  38. M db 2; кол-во строк
  39. N db 2; кол-во столбцов
  40. dseg ends
  41. cseg ends
  42. stk segment stack
  43. dw 256 dup (0)
  44. stk ends
  45. end main

Решение задачи: «Подсчитать сумму элементов двумерного массива»

textual
Листинг программы
  1. cseg segment 'code'
  2. assume cs:cseg, ds:dseg
  3. org 100h
  4.  
  5. main proc
  6.  
  7. mov ax, dseg ; указывает на регистр данных
  8. mov ds, ax ; указывает на регистр данных
  9. xor bx, bx; обнуление смещение начала строки ?
  10. mov C, bx
  11. xor ch, ch; обнуление старшей половины счетчика строк ?
  12. mov cl, M; загрузка в счетчик кол-ва строк
  13.  
  14. Stolb:
  15. xor si, si; обнуление смещения элемента от начала строки
  16. push cx; сохранение счетчика строк в стеке
  17. mov cl, N; загрузка в счётчик кол-ва столбцов
  18.  
  19. Strok:
  20. mov al, mas[bx][si]; загрузка в аккум текущего элемента
  21. add C, ax; C=c+a[i,j]
  22. inc si
  23. loop Strok; цикл по элементам строки
  24. xor ah, ah
  25. mov al, N; загрузка кол-ва столбцов
  26. add bx, ax; переход к след строке
  27. pop cx; восстановление счётчика строк из стека
  28.  
  29.  
  30. loop Stolb; цикл по строкам
  31.  
  32.  
  33. Exit:
  34. mov ah, 04ch; выход из программы (функция DOS)
  35. mov al, 0h; код возврата
  36. int 21h;
  37. ret; возвращаем управление отладчику
  38.  
  39. main endp
  40.  
  41. dseg segment
  42. mas     db 1,2
  43.     db 4,5
  44.    
  45. M db 2; кол-во строк
  46. N db 2; кол-во столбцов
  47. C dw ?
  48. dseg ends
  49. cseg ends
  50. stk segment stack
  51. dw 256 dup (0)
  52. stk ends
  53. end main

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

В коде на языке Assembler скомпилирована программа для подсчёта суммы элементов двумерного массива.

  1. Строки с 1 по 4 содержат значения массива.
  2. В переменной M (10h) содержится количество строк.
  3. В переменной N (11h) содержится количество столбцов.
  4. В переменной C (12h) хранится сумма элементов. Программа выполняет следующие действия:
  5. Инициализирует сегмент данных ds и код cs.
  6. Обнуляет регистры bx, ch, si, ah.
  7. Загружает в bx смещение начала строки (10h).
  8. Загружает в cx счётчик строк (10h).
  9. Начинается цикл по строкам с помощью команды loop Stolb.
  10. В каждой итерации цикла происходит загрузка значения элемента массива в аккумулятор al.
  11. К C прибавляется значение al (сумма элементов).
  12. Происходит инкремент смещения элемента si.
  13. Цикл по элементам строки выполняется с помощью команды loop Strok.
  14. После завершения цикла происходит переход к следующей строке: add bx, ax.
  15. Восстанавливается счётчик строк из стека с помощью команды pop cx.
  16. Цикл по строкам завершается командой loop Stolb.
  17. Программа завершается с помощью команды mov ah, 04ch. Сумма элементов массива хранится в переменной C (12h). Значение переменной C равно 1 + 2 + 4 + 5 = 12.

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


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

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

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы