Читайте также:
|
|
1. Постановка задачі для конкретного варіанта.
2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи.
3. Лістинг програми з виведенням даних на екран монітора з використанням API-функцій та з детальним коментарем і описом роботи.
4. Рrint screen екрана 32-розрядного налагоджувача з виконаною програмою.
5. Короткий опис виконання програми.
6. Висновки за результатами роботи.
Приклад 11.13. Задані рядки А та В. Знайти перші неспівпадаючі числа та переписати наступні числа рядка А в рядок С.
Лістинг 11.14:
title Рысованый А.Н. rysov@rambler.ru
.386; директива визначення команд мікропроцесора
.model flat,stdcall; завдання лінійної моделі пам’яті
option casemap:none; відмінність рядкових та прописних літер
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data; директива визначення даних
mas1 dd 0Ah,0Bh,1,2,3,4; визначення масиву з ім’ям mas1
mas2 dd 0Ah,0Ch,5,6,7,8; визначення масиву з ім’ям mas2
len equ ($-mas2)/4; обчислення кількості подвійних слів в mas2
mas3 dd len DUP(?),0; резервування 32-розрядних комірок для mas3
_title db "Результаты решения программы",0
info db "Заданы строки А и В. Найти первые несовпадающие числа", 0Ah, 0Dh,
"и переписать последующие числа строки А в строку С",0Ah, 0Dh,0Dh
buf dd?,0; буфер виведення повідомлення
ifmt db "Ответ: mas3 = %d %d %d %d %d %d",0
.code; початок сегмента-даних
_st:; мітка початку програми
mov ecx,len; кількість слів у масиві
lea esi, mas1; завантаження адреси масиву mas2
lea edi, mas2; завантаження адреси масиву mas2
cld; напрям – вгору
repne cmpsd; [esi] - [edi] поки не дорівнює
jz ravno; перехід, якщо source = destination
jmp exit
ravno:
lea edi,mas3; завантаження адреси масиву mas3
dec ecx;
add esi,4; підготовка вибірки наступного числа
rep movsd; edi<- esi
invoke wsprintf, \; АРІ-функція перетворення чисел
ADDR buf, \; адреса буф., куди буде записана послідовність символів
ADDR ifmt, \; адреса рядка перетворення формату
mas3,mas3[4],mas3[8],mas3[12],mas3[16],mas3[20];
invoke MessageBox, NULL, addr info, addr _title, MB_ICONINFORMATION
exit:
invoke ExitProcess,0
end _st; директива закінчення програми з ім’ям _st
В програмі порівнюються два масиви: А та В. При порівнянні чисел mas1: 0Bh та mas2: 0Ch виявляється, що числа не дорівнюють один одному. Тому, слід наступні числа рядка А (1, 2, 3, 4) переписати в рядок С (mas3). Для цього використовується команда add esi,4 збільшення адреси числа mas1.
Для того, щоб числа при виведенні функцією MessageBox не розташовувались один біля одного, в рядку форматування даних
ifmt db "Ответ: mas3 = %d %d %d %d %d %d",0
сроблено по два пропуску (рис. 11.18).
Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.
Лабораторна робота №7
“ Дослідження програм з використанням логічних конструкцій високого рівня”
”
Мета заняття:
– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;
– придбати практичні навички складання, налагодження і виконання програм з використанням директив умовного асемблювання, написаних мовою асемблеру для МП платформи х86.
Дата добавления: 2014-12-18; просмотров: 23 | Поможем написать вашу работу | Нарушение авторских прав |