Построить вектор, элементы которого равны разности элементов главной и побочной диагоналей матрицы - Assembler

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

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

Ребята, помогите сделать задание! Я новичок в этом деле Никак не могу понять с чего даже начать Задание такое: Построить вектор H, элементы которого равны разности элементов главной и побочной диагоналей матрицы Q(k,k). нужно использовать API функции и написать под MASM32.

Решение задачи: «Построить вектор, элементы которого равны разности элементов главной и побочной диагоналей матрицы»

textual
Листинг программы
.386
.model flat, stdcall;плоская модель, запихивание в обратном порядке
option casemap :none ; case sensitive
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc;шапки библиотек
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib;библиотеки
 
; Построить вектор H, элементы которого равны разности элементов главной и побочной диагоналей матрицы Q(k,k).
 
.data;данные
 
N equ 4
; toeptitz matrix
Q dd 4, 3, 2, 1
dd 3, 2, 1, 4
dd 2, 1, 4, 3
dd 1, 4, 3, 2
 
result_vector dd N dup(0)
 
fmt db "%d", 0
_title db "result vector: ", 0
temp db 10 dup(?)
res db 40 dup (0)
 
.code
start:;точка входа
 
; берем главную диагональ
lea esi, Q
lea edi, result_vector;настраиваем указатели
mov ecx, N;считаем N раз
@@:
movsd;замена слова
add esi, N*4;на следующий элемент
loop @b
 
; и отнимаем побочную
lea esi, Q+(N-1)*4
lea edi, result_vector;опять указатели настраиваем
mov ecx, N
@@:
lodsd;читаем элемент
sub [edi], eax;вычитаем
add edi, 4
add esi, (N-2)*4;на следующий элемент
loop @b
 
; выводим результат в MessageBox:
mov ecx, N
lea esi, result_vector;настраиваем адрес и число элементов
@@:
push ecx;пихам число
lodsd;читаем элемент
invoke wsprintf, addr temp, addr fmt, eax;выводим его
lea edi, temp;сохраняем в память указатель
invoke lstrlen, edi;длину получаем
mov byte ptr [edi+eax], ' ';заносим в конец пробел
invoke lstrcat, addr res, addr temp;находим позицию
pop ecx;выравниваем стек
loop @b
invoke MessageBox, 0, addr res, addr _title, MB_OK;выдаем мессагу
invoke ExitProcess, 0;кончаем процесс
 
end start ;конец кода

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


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

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

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