Задана матрица 3 X 4. Определить максимальный элемент каждой строки. Результат выполнения программы вывести в окно консоли
Категория: Assembler
2011-08-21 10:38:47
code: #assembler
- .386 ; директива определения типа микропроцессора
- .model flat, stdcall ; задание линейной модели памяти
- option casemap:none ; отличие малых и больших букв
- include \masm32\include\windows.inc
- include \masm32\include\user32.inc
- include \masm32\include\kernel32.inc
- includelib \masm32\lib\user32.lib
- includelib \masm32\lib\kernel32.lib
- ExitProcess proto: dword ; прототип API-функции
- DATE1 STRUCT ; тип данных СТРУКТУРА с именем DATE1
- elem1 db ? ; имя первого поля структуры
- elem2 db ? ; имя второго поля структуры
- elem3 db ? ; имя третьего поля структуры
- elem4 db ? ; имя четвертого поля структуры
- DATE1 ENDS
- .data ; директива определения данные
- max db 0
- nomer db 1
- str1 DATE1 <20,9,2,15> ; структура с именем str1
- str2 DATE1 <6,31,1,3> ; структура с именем str2
- str3 DATE1 <4,6,155,2> ; структура с именем str2
- st1 db " Вывод максимальных чисел ",0
- st2 db 180 dup(?),0
- stemp db 0
- stemp2 db 3 dup(?),0
- st4 db " Нажмите Ок",0
- st3 db "-й ряд имеет максимальное число = "
- kol3 = $ - st3
- kol4 = $ - st4
- ifmt db "%d ",0
- .code ; директива начала сегмента-данных
- start: ; метка начала программы с именем start
- xor edx,edx ; заполнение нулями
- mov ebx,3 ; загрузка количества строк
- lea esi, str1 ; загрузка адреса первой строки структуры
- lea edi,st2
- m1: mov ecx,4 ; количество элементов в строке
- mov max,0
- m2: mov al[esi] ; загрузка элемента из строки структуры
- .IF (al > max)
- mov max,al
- .ENDIF
- jmp m4 ; безусловный переход, если наоборот
- m3: add edx,eax ; добавление негативных элементов строки структуры
- m4: inc esi ; подготовка адреса нового элемента
- loop m2 ; есх := ecx – 1 и переход на m3, если не нуль
- mov eax,0
- mov al,nomer
- invoke wsprintf \ ; API-ФУНКЦИЯ превращения числа
- ADDR stemp \ ; адрес буфф., куда будет записан помет. символов
- ADDR ifmt \ ; адрес строки превращения формата
- eax ; регистр, содержание которого превращается
- mov al,stemp
- mov [edi],al
- inc edi
- lea esi, st3
- mov ecx,kol3
- _m1:
- mov al[esi]
- mov [edi],al
- inc esi
- inc edi
- loop _m1
- mov eax,0
- mov al,max
- invoke wsprintf \ ; API-ФУНКЦИЯ превращения числа
- ADDR stemp2 \ ; адрес буфф., куда будет записан помет. символов
- ADDR ifmt \ ; адрес строки превращения формата
- eax ; регистр, содержание которого превращается
- lea esi, stemp2
- mov ecx,3
- z1:
- mov al[esi]
- mov [edi],al
- inc edi
- inc esi
- loop z1
- mov al,10
- mov [edi],al
- inc edi
- inc nomer
- dec ebx ; ebx := ebx – 1
- .IF ebx == 2
- lea esi,str2 ; загрузка адреса новой строки
- jmp m1 ; переход на новый цикл
- .ELSEIF ebx == 1
- lea esi,str3 ; загрузка адреса новой строки
- jmp m1 ; переход на новый цикл
- .ENDIF
- mov al,10
- mov [edi],al
- inc edi
- lea esi, st4
- mov ecx,kol4
- inc esi
- _z1:
- mov al[esi]
- mov [edi],al
- inc esi
- inc edi
- loop _z1
- invoke MessageBox \ ; API-ФУНКЦИЯ выведения окна консоли
- NULL \ ; hwnd – идентификатор окна
- addr st2 \ ; адрес строки, который содержит текст сообщения
- addr st1 \ ; адрес строки, который содержит заглавие сообщения
- MB_OK ; вид диалогового окна
- invoke ExitProcess, 0 ; возвращение управления ОС Windows
- end start ; директива окончания программы с именем start
Поделиться: