Задана матрица 3 X 4. Определить максимальный элемент каждой строки. Результат выполнения программы вывести в окно консоли

code: #assembler
  1. .386                ; директива определения типа микропроцессора
  2.  .model  flat, stdcall         ; задание линейной модели памяти
  3.  option casemap:none            ; отличие малых и больших букв
  4.  include    \masm32\include\windows.inc
  5.  include    \masm32\include\user32.inc
  6.  include    \masm32\include\kernel32.inc
  7.  includelib \masm32\lib\user32.lib
  8.  includelib \masm32\lib\kernel32.lib
  9.  ExitProcess   proto: dword     ; прототип API-функции
  10.  
  11. DATE1 STRUCT           ; тип данных СТРУКТУРА с именем DATE1
  12.  elem1 db ?      ; имя первого поля структуры
  13.  elem2 db ?      ; имя второго поля структуры
  14.  elem3 db ?      ; имя третьего поля структуры
  15.  elem4 db ?      ; имя четвертого поля структуры
  16.  DATE1 ENDS
  17.  .data              ; директива определения данные
  18.  max db 0
  19.  nomer db 1
  20.  str1 DATE1 <20,9,2,15>               ; структура с именем str1
  21.  str2 DATE1 <6,31,1,3>                 ; структура с именем str2
  22.  str3 DATE1 <4,6,155,2>               ; структура с именем str2
  23.  st1 db " Вывод максимальных чисел ",0
  24.  st2 db 180 dup(?),0
  25.  stemp db 0
  26.  stemp2 db 3 dup(?),0
  27.  st4 db "                        Нажмите Ок",0
  28.  st3 db "-й ряд имеет максимальное число = "
  29.  kol3 = $ - st3
  30.  kol4 = $ - st4
  31.  ifmt db "%d ",0
  32.  .code   ; директива начала сегмента-данных
  33.  start:               ; метка начала программы с именем start
  34.  xor edx,edx              ; заполнение нулями
  35.  mov ebx,3                ; загрузка количества строк
  36.  lea esi, str1      ; загрузка адреса первой строки структуры
  37.  lea edi,st2
  38.  m1: mov ecx,4                          ; количество элементов в строке
  39.  mov max,0
  40.  m2: mov al[esi]          ; загрузка элемента из строки структуры
  41.  .IF (al > max)
  42.  mov max,al
  43.  .ENDIF
  44.  jmp m4                        ; безусловный переход, если наоборот
  45.  m3: add edx,eax  ; добавление негативных элементов строки структуры
  46.  m4: inc esi                  ; подготовка адреса нового элемента
  47.  loop m2                   ; есх := ecx – 1 и переход на m3, если не нуль
  48.  
  49. mov eax,0
  50.  mov al,nomer
  51.  invoke  wsprintf \         ; API-ФУНКЦИЯ превращения числа
  52.  ADDR stemp \  ; адрес буфф., куда будет записан помет. символов
  53.  ADDR ifmt \          ; адрес строки превращения формата
  54.  eax               ; регистр, содержание которого превращается
  55.  mov al,stemp
  56.  mov [edi],al
  57.  inc edi
  58.  
  59. lea esi, st3
  60.  mov ecx,kol3
  61.  
  62. _m1:
  63.  mov al[esi]
  64.  mov [edi],al
  65.  inc esi
  66.  inc edi
  67.  loop _m1
  68.  mov eax,0
  69.  mov al,max
  70.  
  71.  invoke  wsprintf \            ; API-ФУНКЦИЯ превращения числа
  72.  ADDR stemp2 \  ; адрес буфф., куда будет записан помет. символов
  73.  ADDR ifmt \               ; адрес строки превращения формата
  74.  eax                 ; регистр, содержание которого превращается
  75.  lea esi, stemp2
  76.  mov ecx,3
  77.  z1:
  78.  mov al[esi]
  79.  mov [edi],al
  80.  inc edi
  81.  inc esi
  82.  loop z1
  83.  
  84.  mov al,10
  85.  mov [edi],al
  86.  inc edi
  87.  inc nomer
  88.  
  89. dec ebx           ; ebx := ebx – 1
  90.  .IF ebx == 2
  91.  lea esi,str2                         ; загрузка адреса новой строки
  92.  jmp m1           ; переход на новый цикл
  93.  .ELSEIF ebx == 1
  94.  lea esi,str3                         ; загрузка адреса новой строки
  95.  jmp m1           ; переход на новый цикл
  96.  .ENDIF
  97.  
  98. mov al,10
  99.  mov [edi],al
  100.  inc edi
  101.  lea esi, st4
  102.  mov ecx,kol4
  103.  inc esi
  104.  _z1:
  105.  mov al[esi]
  106.  mov [edi],al
  107.  inc esi
  108.  inc edi
  109.  loop _z1
  110.  
  111. invoke MessageBox \        ; API-ФУНКЦИЯ выведения окна консоли
  112.  NULL \                        ; hwnd – идентификатор окна
  113.  addr st2 \          ; адрес строки, который содержит  текст сообщения
  114.  addr st1 \ ; адрес строки, который содержит  заглавие сообщения
  115.  MB_OK                ; вид диалогового окна
  116.  
  117. invoke ExitProcess, 0        ; возвращение управления ОС Windows
  118.  end start                 ; директива окончания программы с именем start
Поделиться:

Похожие статьи: