русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Ассемблер структуры. Примеры задач

Пример: Задана матрица 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


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


Просмотров: 19660

Вы можете --> Заказать программу или Задать вопрос на форуме

Вернуться воглавление


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.