Есть матрица 3х3. Найти разницу максимального и минимального элемента матрицы - Assembler
Формулировка задачи:
Завтра на зачёт нужно решить задачу : условие "Есть матрица 3х3. Найти разницу максимального и минимального элемента матрицы.".
Зачёт не по предмету Assembler...нет( Нас ему даже не учили . Поэтому я полный ноль. Помогите.
Решение задачи: «Есть матрица 3х3. Найти разницу максимального и минимального элемента матрицы»
textual
Листинг программы
.486 .model flat, stdcall option casemap :none include d:\masm32\include\windows.inc include d:\masm32\include\user32.inc include d:\masm32\include\kernel32.inc include d:\masm32\include\masm32.inc includelib d:\masm32\lib\user32.lib includelib d:\masm32\lib\kernel32.lib includelib d:\masm32\lib\masm32.lib .data aszPressLeftAlt db 0Dh, 0Ah, 0Dh, 0Ah, "Press Left Alt to exit", 0 aszMsgResult db 'Result: ', 0 Matrix dd 1, 2, 5 dd 3, 2, 0 dd 3, 3, 4 Max dd ? Min dd ? Result dd ? hConsoleOutput HANDLE ? hConsoleInput HANDLE ? Buffer db 1024 dup(?) BufLen dd ? .code start: ; получение описателей ввода и вывода консоли invoke GetStdHandle, STD_INPUT_HANDLE mov hConsoleInput, eax invoke GetStdHandle, STD_OUTPUT_HANDLE mov hConsoleOutput, eax ;очистка экрана invoke ClearScreen ;помск минимума и максимума lea ebx, [Matrix] mov eax, [ebx] mov [Min], eax mov [Max], eax mov edi, 4*3 ;длина строки в байтах (размер элемента умножить на количество) mov ecx, 3 @@ForI: push ecx mov ecx, 3 mov esi, 0 @@ForJ: mov eax, [ebx+4*esi] @@TestMin: cmp eax, [Min] jge @@TestMax mov [Min], eax @@TestMax: cmp eax, [Max] jle @@Next mov [Max], eax @@Next: inc esi loop @@ForJ pop ecx add ebx, edi loop @@ForI ;вычисение разности mov eax, [Max] sub eax, [Min] mov [Result], eax ;вывод результата invoke WriteConsole, hConsoleOutput, ADDR aszMsgResult,\ LENGTHOF aszMsgResult - 1, ADDR BufLen, NULL invoke ltoa, [Result], ADDR Buffer invoke StrLen, ADDR Buffer mov [BufLen], eax invoke WriteConsole, hConsoleOutput, ADDR Buffer,\ BufLen, ADDR BufLen, NULL ;ожидание нажатия Left Alt invoke WriteConsole, hConsoleOutput, ADDR aszPressLeftAlt,\ LENGTHOF aszPressLeftAlt - 1, ADDR BufLen, NULL @@WaitForLAlt: invoke GetAsyncKeyState, VK_LMENU and eax, 8000h jz @@WaitForLAlt invoke ExitProcess, 0 end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д