Сумма элементов главной диагонали матрицы - Assembler
Формулировка задачи:
Введите с клавиатуры 25 символов одноразрядных чисел в диапазоне 0 … 9. Представляя массив как матрицу 5 х 5, суммируйте элементы её главной диагонали. Исходную матрицу и результат суммирования отобразите на экране. ПОМОГИТЕ ПОЖАЛЙСТА СЕГОДНЯ ЗДАВАТЬ
Решение задачи: «Сумма элементов главной диагонали матрицы»
textual
Листинг программы
… DATE1 STRUCT ; визначення даних СТРУКТУРА з іменем DATE1 CarName db ? ; ім’я першого поля структури Number dw ? ; ім’я другого поля структури Name1 dw ? ; ім’я третього поля структури Viol dd ? ; ім’я четвертого поля структури DATE1 ENDS ; закінчення даних СТРУКТУРА з іменем DATE1 .data ; директива визначення даних Car1 DATE1 <1,10,2,3> ; структура з іменем Car1 Car2 DATE1 <2,-11,6,7> ; структура з іменем Car2 Car3 DATE1 <3,12,10,11> ; структура з іменем Car3 Car4 DATE1 <4,13,14,15> ; структура з іменем Car4 ifmt db "Исходный массив - ввиде матрицы:",0dh,0ah,\ "01 10 02 03",0dh,0ah,\ "02 -11 06 07",0dh,0ah,\ "03 12 10 11",0dh,0ah,\ "01 13 14 15",0dh,0ah,0ah,\ "Результат сложения значений ",0dh,0ah,\ "элементов главной диагонали: = %d",0dh,0ah,0ah,\ "Автор программы: Рысованый А.Н., НТУ ХПИ",0 titl1 db "Сумма элементов главной диагонали",0 ; назва віконця st2 db 10 dup(?),0 ; .code ; директива початку сегмента даних start: ; мітка початку програми з ім’ям start xor ebx,ebx movzx bx,Car1.CarName ; заповнювання нулями старшої частини add bx,Car2.Number ; bx := Car1.CarName + Car2.Number add bx,Car3.Name1 ; add ebx,Car4.Viol ; .data ; директива визначення даних (спрощена сегментація) res dd ? ; резервування 32-розрядної комірки пам’яті з ім’ям res .code ; директива початку сегмента-даних mov res,ebx ; invoke wsprintf,ADDR st2,ADDR ifmt,res ; функція перетворення res invoke MessageBox, ; функцiя виведення спрощеного вікна консолі 0, ADDR st2, ADDR titl1, MB_ICONINFORMATION+180000h invoke ExitProcess, 0 ; повернення керування ОС Windows та вивільнення ресурсів end start
Объяснение кода листинга программы
Код выполняет сложение элементов главной диагонали матрицы, представленной в виде структур данных DATE1, и выводит результат в консоль. Список действий:
- xor ebx,ebx - инициализация регистра ebx нулем.
- movzx bx,Car1.CarName - заполнение старшей части регистра bx нулями, младшая часть регистра bx получает значение Car1.CarName.
- add bx,Car2.Number - сложение bx и Car2.Number, результат сохраняется в bx.
- add bx,Car3.Name1 - сложение bx и Car3.Name1, результат сохраняется в bx.
- add ebx,Car4.Viol - сложение bx и Car4.Viol, результат сохраняется в ebx.
- mov res,ebx - значение ebx (результат сложения) сохраняется в переменной res.
- invoke wsprintf,ADDR st2,ADDR ifmt,res - функция wsprintf выводит в st2 строку, формат которой задан в ifmt, а данные берутся из res.
- invoke MessageBox,0, ADDR st2, ADDR titl1, MB_ICONINFORMATION+180000h - вывод диалогового окна с сообщением, заголовок которого указан в st2, а текст сообщения - в titl1.
- invoke ExitProcess, 0 - завершение работы программы.
Пояснение к коду:
- Структура данных DATE1 используется для представления матрицы. Каждый элемент матрицы представлен в виде отдельной структуры DATE1.
- Переменные Car1, Car2, Car3 и Car4 представляют собой структуры DATE1, которые содержат данные из матрицы.
- Переменная res используется для хранения суммы элементов главной диагонали матрицы.
- Функция wsprintf используется для форматирования строки, которая затем выводится в диалоговое окно с помощью функции MessageBox.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д