Суббота, 23.11.2024, 02:29
Приветствую Вас Гость | RSS
Главная | | Регистрация | Вход
Меню сайта
Форма входа
Поиск
Календарь
«  Март 2012  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Наш опрос
Оцените мой сайт
Всего ответов: 20
Мини-чат
Друзья сайта
  • Заказ Художник
  • Рыбалка
  • Новости
  • Наш университет io-96
  • Железо и другие
  • Наш Counter-Strike
  • Google ot Turbokherson
  • Google ot Turbokherson87
  • Android
  • Программы и Софт
  • Программирование
  • Лечение здоровья
  • О Ремонт компьютер
  • Наш сайт Turbokherson
  • Программирование ICQ 378204653 от Turbokherson
    Главная » 2012 » Март » 30 » Ассемблер структуры. Примеры задач (Задана матрица 3 X 4).
    01:42
    Ассемблер структуры. Примеры задач (Задана матрица 3 X 4).
    http://life-prog.ru/view_zam.php?id=42&cat=3&page=1

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

    Текст программы:

    .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


    Результат работы программы:



    Просмотров: 7717 | Добавил: Turbokherson | Рейтинг: 0.0/0
    Всего комментариев: 1
    1 Sowntgr  
    0
    Поддерживать хорошо работу и генерировать толпу! Посетите также мою страничку

    посмотрите и эту страничку и дайте ей оценку

    https://newhampshire.budtrader.com/author/dewittbennettsu/ летището в пукет призраци
    https://anotepad.com/note/read/acerffm7 пукет съвети
    https://lisabaskett513558005.bloggersdelight.dk/2024/02/09/%d0%bf%d0%be-%d0%b4%d0%be%d0%b1%d1%80%d0%b0-%d0%b2%d0%b0%d0%ba%d0%b0%d0%bd%d1%86%d0%b8%d1%8f-%d0%b2-%d0%bf%d1%83%d0%ba%d0%b5%d1%82-%d1%87%d1%80%d0%b5%d0%b7-%d0%bf%d1%8a%d1%82%d1%83%d0%b2%d0%b0%d0%bd/ къде да спим пукет
    http://www.bktschool.ac.th/bkt/index.php?name=webboard&file=read&id=2095 пукет тайланд големина

    =pat=

    Имя *:
    Email *:
    Код *:
    Создать бесплатный сайт с uCozCopyright MyCorp © 2024