Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування

11.2. Лабораторна робота “ Дослідження програм з використанням рядкових команд

 

Мета заняття:

– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;

– придбати практичні навички складання, налагодження і виконання програм, написаних мовою асемблеру з використанням команд обробки рядків та АРІ-функцій під Win32 для програмування МП платформи х86.

Постановка задачі

1. Задано текст, що складається з 6 слів по 8 символів, розділених пропуском. Переставити слова в тексті так, щоб кожне наступне слово починалося з… 2. Задано послідовність латинських букв завдовжки 18 символів. Розставити їх… 3. Задано текст із 30 символів. Стиснути текст, залишивши між словами по одному пропуску.

Зміст звіту

2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи. 3. Лістинг програми з виведенням даних на екран монітора з використанням… 4. Рrint screen екрана 32-розрядного налагоджувача з виконаною програмою.

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 с.