Федеральное государственное бюджетное образовательное учреждение высшего образования «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)» (МГТУ им. Н.Э. Баумана) ФАКУЛЬТЕТ Информатика и системы управления КАФЕДРА Компьютерные системы и сети Отчет по лабораторной работе № 4 Дисциплина: Машинно-зависимые языки и основы компиляции Название лабораторной работы: Программирование обработки массивов и матриц Вариант 24 Студент гр. ИУ6-43 __________________ Прокопенко М. О. (Подпись, дата) Преподаватель (И.О. Фамилия) __________________ __________________ (Подпись, дата) Москва, 2017 (И.О. Фамилия) Задание: Дана матрица 6х4. Вычеркнуть строки с отрицательной суммой элементов. Организовать ввод матрицы и вывод результатов. Схема алгоритма: Текст программы: ; Template for console application .586 .MODEL flat, stdcall OPTION CASEMAP:NONE Include kernel32.inc Include masm32.inc IncludeLib kernel32.lib IncludeLib masm32.lib .CONST MsgExit DB "Press Enter to Exit",0AH,0DH,0 msgInput DB "Please, enter the value: ", 0 nextL DB " ", 0 nextY DB " ", 0AH, 0DH,0 .DATA res SWORD ? stri dd "-", 0 array SWORD 28 DUP (?) resStr DB 16 DUP (' '), 0AH, 0DH ,0 .DATA? inbuf DB 100 DUP (?) buffer DB 10 DUP (?) mas dd 10 dup (?) .CODE Start: xor eax, eax xor ecx,ecx mov ecx, 24 mov ebx, 0 cycleInput: push ecx Invoke StdOut, ADDR msgInput Invoke StdIn, ADDR inbuf, LengthOf inbuf Invoke StripLF, ADDR inbuf Invoke atol, ADDR inbuf mov array[ebx * 4], eax inc ebx pop ecx loop cycleInput xor ebx, ebx xor eax, eax xor ecx, ecx xor esi, esi xor edi, edi mov ecx, 6 cycl1: add eax, array[ebx*4] inc ebx loop cycl1 xor edx, edx mov edx, 0 cmp eax, edx jl find mov ecx, 6 xor eax, eax inc esi cmp ebx, 24 jge fin jmp cycl1 find: inc esi mov mas[edi*4], esi dec esi inc edi sub ebx, 6 mov ecx, 6 xor edx, edx mov edx, stri loop cycl2 mov ecx, 6 cmp ebx, 24 jge fin inc esi xor eax, eax jmp cycl1 fin: xor eax, eax xor edx, edx xor ecx, ecx xor esi, esi xor ebx, ebx mov ecx, 24 mov edx,0 kek: push ecx push edx push eax inc eax cmp mas[esi*4], eax je ero Invoke dwtoa, array[ebx * 4], ADDR resStr Invoke StdOut, ADDR resStr Invoke StdOut, ADDR nextL xor edx, edx xor eax, eax pop eax pop edx inc edx cmp edx,6 je lol inc ebx xor ecx, ecx pop ecx loop kek lol: push eax Invoke StdOut, ADDR nextY xor eax, eax pop eax xor edx, edx inc ebx xor ecx, ecx pop ecx inc eax loop kek jmp final cycl2: mov array[ebx*4], edx inc ebx ero: xor ecx, ecx mov ecx, 6 inc esi dab: push ecx Invoke StdOut, ADDR array[ebx * 4] Invoke StdOut, ADDR nextL xor ecx, ecx pop ecx inc ebx loop dab dec ebx pop eax pop edx xor ecx, ecx pop ecx sub ecx, 5 push ecx jmp lol final: XOR EAX,EAX Invoke StdOut,ADDR MsgExit Invoke StdIn,ADDR inbuf,LengthOf inbuf Invoke ExitProcess,0 End Start Исходные данные Таблица тестирования: Ожидаемый результат Полученный результ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4 1, 1, 1, 1, 1, -56, 2, 2, 2, -95, 2, 2, 3, 3, 3, 3, 3, 3, 4, -58, 99, 4, 4, 4 ------------3, 3, 3, 3, 3, 3, 4, -58, 99, 4, 4, 4 ------------3, 3, 3, 3, 3, 3, 4, -58, 99, 4, 4, 4 -1, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3, -3, -4, -4, -4, -4, -4, -4, ------------------------- ------------------------- Вывод: В это лабораторной работе были усвоены приемы работы с матрицами в ассемблере. В данной работе у меня большое затруднение вызвал корректный вывод матрицы, содержащей и символы, и цифры. Контрольные вопросы: 1) Массив и матрица во внутреннем представлении – это последовательность элементов в памяти. Программирование обработки выполняется с использованием адресного регистра, в котором хранится либо смещение текущего элемента относительно начала сегмента данных, либо его смещение относительно начала массива. При переходе к следующему элементу и то и то смещение увеличиваются на длину элемента. 2) В ассемблере такую последовательность можно определить, например, так: A SWORD 10,13,28,67,0,-1 ; массив из 6 чисел длиной слово. 3) См. Вопрос 1 4) См. Вопрос 1 5) Матрица расположена в памяти построчно, как и массив. При последовательном прохождении по матрице используют один регистр, а при произвольном прохождении используются 2 регистра (регистр номера строки и столбца).