[masm32] Найти сумму элементов под главной диагональю - Assembler
Формулировка задачи:
Помогите пожалуйста. Решить с помощью стурктур. Дана матрица 6x6. Найти сумму елементов под главной диагональю.
Решение задачи: «[masm32] Найти сумму элементов под главной диагональю»
textual
Листинг программы
.586 .model flat,stdcall option casemap:none include windows.inc include user32.inc include kernel32.inc include masm32.inc includelib user32.lib includelib masm32.lib includelib kernel32.lib DATE1 STRUCT ; тип даних СТРУКТУРА з іменем DATE1 elem1 dd ? ; ім'я першого поля структури elem2 dd ? ; ім'я другого поля структури elem3 dd ? ; ім'я третього поля структури elem4 dd ? ; ім'я четвертого поля структури elem5 dd ? elem6 dd ? DATE1 ENDS .data str1 DATE1 <0,5,1,-1,-2,3> ; структура з іменем str1 str2 DATE1 <1,0,0,-2,-1,-3> str3 DATE1 <1,1,0,-1,-2,3> str4 DATE1 <1,1,1,0,-2,3> str5 DATE1 <1,1,1,1,0,3> str6 DATE1 <1,1,1,1,1,0> ; структура з іменем str2 st1 db " Rezault ",0 st2 db 10 dup(?),0 ifmt db "%d",0 .code _start: lea ebx,str2 ;начало 2-й строки mov esi,0 ;Значение строке ниже главной диагонали mov edx,0 ;сумма lp2: push esi ;сохраняем индекс в строке lp1: mov eax,[ebx+esi] ;читаем элемент матрицы ниже гланой диагонали add edx,eax ;суммируем с элементом sub esi,4 ;предыдущий элемент в строке jns lp1 ;продолжаем если не закончиласть строка pop esi ;восстанавливаем индекс в строке add esi,4 ;следующий элемент в строке add ebx,size DATE1 ;переходим на новую строку cmp ebx,offset str1+(size DATE1)*6 jc lp2 ;продолжаем пока не прошли по всем строкам invoke wsprintf, ADDR st2, ADDR ifmt, edx invoke MessageBox,NULL, addr st2, addr st1, MB_OK invoke ExitProcess, 0 end _start end
Объяснение кода листинга программы
Этот код на языке Assembler выполняет следующие действия:
- Объявляет структуру данных под названием
DATE1
с шестью полями типаdd
(double word, то есть 32-битное целое число). - Объявляет шесть строк (массивов) типа
DATE1
с разными значениями в полях. - Создает две переменные типа
char
для хранения строковых значений:st1
иst2
. Переменнаяst1
содержит строкуRezultat
, а переменнаяst2
будет использоваться для хранения суммы элементов. - В основной части кода выполняется цикл, который проходит по всем элементам матрицы, начиная со второго столбца (индекс 1) и заканчивая последним (индекс 5). Для каждой строки выполняется цикл, который суммирует элементы этой строки.
- После выполнения всех операций выводится сообщение с результатом. Вот список действий, которые выполняет этот код:
- Создание структуры данных
DATE1
. - Объявление шести строк типа
DATE1
. - Создание двух переменных типа
char
. - Начало основной части кода.
- Прохождение по всем элементам матрицы для вычисления суммы.
- Вывод результата на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д