русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Асемблер структури. Приклади завдань

Приклад: Задана матриця 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
start end ; директива закінчення програми з ім'ям start


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


Переглядів: 1498

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн