[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 выполняет следующие действия:

  1. Объявляет структуру данных под названием DATE1 с шестью полями типа dd (double word, то есть 32-битное целое число).
  2. Объявляет шесть строк (массивов) типа DATE1 с разными значениями в полях.
  3. Создает две переменные типа char для хранения строковых значений: st1 и st2. Переменная st1 содержит строку Rezultat, а переменная st2 будет использоваться для хранения суммы элементов.
  4. В основной части кода выполняется цикл, который проходит по всем элементам матрицы, начиная со второго столбца (индекс 1) и заканчивая последним (индекс 5). Для каждой строки выполняется цикл, который суммирует элементы этой строки.
  5. После выполнения всех операций выводится сообщение с результатом. Вот список действий, которые выполняет этот код:
  6. Создание структуры данных DATE1.
  7. Объявление шести строк типа DATE1.
  8. Создание двух переменных типа char.
  9. Начало основной части кода.
  10. Прохождение по всем элементам матрицы для вычисления суммы.
  11. Вывод результата на экран.

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


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

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

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