Построить вектор, элементы которого равны разности элементов главной и побочной диагоналей матрицы - 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 ;конец кода
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д