Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Постановка задачі. 1. Постановка задачі для конкретного варіанта.

Читайте также:
  1. I этап. Постановка задачи
  2. III. Постановка темы урока.
  3. IV. Задачі
  4. IV. Задачі
  5. Алгоритм вирішення задачі
  6. Аналіз задачі.
  7. Визначення початкового рішення транспортної задачі.
  8. Вирішити задачі
  9. Вирішити задачі
  10. Вирішити задачі

1. Постановка задачі для конкретного варіанта.

2. Блок-схема алгоритму виконання прикладу.

3. Лістинг програми з детальним коментарем та описом роботи.

4. Рrint screen екрана 32-розрядного налагоджувача з виконанням програми та результатами виконання.

5. Короткий опис виконання програми.

6. Висновки за результатами роботи.

Приклад 10.15. Обчислити 3 значення функції Yn = 5 х 2/1,1 (x змінюється від 1 з кроком 1). Результат розмістити в пам’яті та вивести на екран.

Алгоритм вирішення прикладу 10.15 наведено на рис. 10.23.

 
 

 

 


У зв’язку з тим, що необхідно вивести три числа, для розділу комірок використовується додатковий елемент (регістр EDX). Спочатку цей регістр дорівнює нулю. Співпроцесор записую в пам’ять 80-розрядні числа (десять байтів). Тому в циклі виконується команда

add edx,0Ah

для виконання зміщення відносно попередньої комірки, яка потім буде адресуватися як res[edx].

У прикладі при отриманні х 2 використовуються цілі числа. Тому необхідно виконати команду

f i ld dword ptr resEAX.

Якщо виконати команду fld …, то в даному випадку результат буде з похибкою.

А оскільки АРІ-функції при своєму виконанні змінюють регістри, то значення тих регістрів, які потрібні при виконанні програми, необхідно зберігати (найкраще – в стеку).

Лістинг 10.18. Програма виконання прикладу 10.15:

title CopyRight by Rysovaniy A. N. Обчислення Yn = 5 х 2 / 1,1

.686; директива визначення типу мікропроцесора

.model flat,stdcall; завдання лінійної моделі пам’яті

; та угоди ОС Windows

option casemap:none; відмінність малих та великих літер

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\fpu.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\fpu.lib

BSIZE equ 30; розмір буфера

.data; директива визначення даних

const1 DWORD 1.1; визначення в 32-розрядній комірці числа 1.1

const2 DWORD 5.0; визначення в 32-розрядній комірці числа 5.0

resEAX DWORD 0; 32-розрядна комірка для тимчасового результату

res TBYTE 3 dup (0); три 80-розрядні комірки для результатів

stdout DWORD?; резервування в пам’яті 32-розрядної комірки

; з ім’ям stdout для збереження дескриптора виведення

cWritten DWORD?; резервування 32-розрядної комірки пам’яті

; з ім’ям cWritten для адреси символів виведення

buf BYTE BSIZE dup (?); кількість байтів для запису послідовності символів

.code; директива початку коду програми

_st:; мітка початку програми

xor edx,edx; початкове значення (для зміщення)

mov ecx,3; лічильник циклів

mov ebx,1; початкове значення х

m1: mov eax,ebx; підготування до піднесення в степінь

mul ebx; піднесення в степінь

mov resEAX,eax; збереження х2 в пам’яті

finit; ініціювання співпроцесора

fld dword ptr const1; st(0):= 1.1

fld dword ptr const2; st(0):= 5.0, st(1):= 1.1

fild dword ptr resEAX; st(0):= resEAX, st(1):= 5.0, st(2):= 1.1

fmul st,st(1); st(0):= resEAX x 5.0

fdiv st,st(2); st(0):= st(0)/st(2)

fstp res[edx]; збереження результату в комірці res[edx]

push ecx; підготовка до виклику АРІ-функції

push edx; підготовка до виклику АРІ-функції

invoke GetStdHandle, STD_OUTPUT_HANDLE; отримання дескриптора

mov stdout, eax; збереження одержаного дескриптора у пам’яті

invoke FpuFLtoA, \; функція перетворення 80-розрядного числа

ADDR res[edx], \; адреса числа, що відображається

10, \; кількість десяткових знаків після коми (10)

ADDR buf, \; адреса буфера для символів, які перетворяться

SRC1_ REAL or SRC2_DIMM; операанд SRC1в пам’яті

; операнд SRC2 з параметром DIMM

invoke WriteConsoleA, \; АРІ-функція виведення на екран

stdout, \; дескриптор стандартного пристрою виведення

ADDR buf, \; адреса початку повідомлення

BSIZE, \; розмір повідомлення

ADDR cWritten, \; адреса, де зберігається число символів

pop edx; встановлення edx

add edx,0Ah; підготовка до вибору наступної комірки

inc ebx; збільшення х

pop ecx; встановлення есх

loop m1; перейти, якщо не нуль

invoke ExitProcess, 0; повернення керування ОС Windows

; та визволення ресурсів

end _st; директива закінчення програми

На рис. 10.24 наведено результат виконання лістингу 10.18.

 
 

 


Приклад 10.16. Обчислити 6 значень функції: Y = cos x, де x змінюється в градусах від 10 з кроком 8.

Лістинг 10.20. Програма виконання прикладу 10.16:

title Rysovaniy A.N. rysov@rambler.ru

; Y = cosx, x змінюється в градусах від 10 з кроком 8.

.686; директива визначення типу мікропроцесора

.model flat,stdcall; завдання лінійної моделі пам’яті

; та угоди ОС Windows

option casemap:none; відмінність малих та великих літер

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\fpu.inc

include \masm32\include\user32.inc; для MessageBox

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\fpu.lib

BSIZE equ 30; розмір буфера

.data; директива визначення даних

const DWORD 0.01745; (π = 3,14)/180 – градуси в радіанах

i1 DWORD 10; початкове значення градусів

st1 db " y=cosx",0

st2 db "Автор: Рысованый А.Н.",0

st3 db " Прощание",0

st4 db "До свидания",0

st6 db "До следующей лабораторной работы!!!",0

 

res TBYTE 6 dup (0); шість 80-розрозрядних комірок для результатів

stdout DWORD?; резервування в пам’яті 32-розрядної комірки

; з ім’ям stdout для збереження дескриптора виведення

cWritten DWORD?; резервування 32-розрядної комірки пам’яті

; з ім’ям cWritten для адреси символів виведення

buf BYTE BSIZE dup (?); кількість байтів для запису послідовності символів

.code; директива початку коду програми

start:; директива початку коду програми

xor edx,edx; початкове значення (для зміщення)

mov ecx,6; лічильник циклів

finit; ініціювання співпроцесора

@@: fild dword ptr i1; завантаження в st(0) змінної і1 (градусів)

fmul dword ptr const; st(0):= st(0) ´ const

fcos; st(0):= cos(i1) в радіанах

fstp res[edx]; збереження результату в комірці res[edx]

push ecx; підготовка до виклику АРІ-функції

push edx; підготовка до виклику АРІ-функції

invoke GetStdHandle, STD_OUTPUT_HANDLE; отримання дескриптора

mov stdout, eax; збереження одержаного дескриптора у пам’яті

invoke FpuFLtoA, \; функція перетворення 80-розрядного числа

ADDR res[edx], \; адреса числа, що відображається

10, \; кількість десяткових знаків після коми (10)

ADDR buf, \; адреса буфера для символів, які перетворяться

SRC1_ REAL or SRC2_DIMM;адреса 80-розрядного числа в пам’яті

; та саме число

invoke WriteConsoleA, \; АРІ-функція виведення на екран

stdout, \; дескриптор стандартного пристрою виведення

ADDR buf, \; адреса початку повідомлення

BSIZE, \; розмір повідомлення

ADDR cWritten, \; адреса, де зберігається число символів

pop edx; встановлення edx

add edx,0Ah; підготовка до вибору наступної комірки

add i1,8; збільшення градусів на крок дискретизації

pop ecx; встановлення есх

loop @b; перейти, якщо не нуль

invoke MessageBox, \; АРІ-функція виведення спрощеного вікна консолі

NULL, \; hwnd ідентифікатор вікна

addr st2, \; адреса рядка, яка містить текст повідомлення

addr st1, \; адреса рядка, яка містить заголовок повідомлення

MB_YESNO or MB_ICONINFORMATION; вигляд діалогового вікна

xor eax,6; виділення розрядів коду повернення кнопки YES

jz m1

invoke MessageBox, NULL, addr st6, addr st3, MB_ICONWARNING

jmp m2

m1: invoke MessageBox, NULL, addr st4, addr st3, MB_ICONERROR

m2: invoke ExitProcess, 0; повернення керування ОС Windows

; та вивільнення ресурсів

end start; директива закінчення програми з іменем start

 

У цій програмі команда з унікальною міткою @@: fild означає, що до неї звертається у циклі команда, яка розташовується після неї в тексті та має символ з літерою @b. Такі мітки можна змінити на звичайні.

Результат виконання програми з лістингу 10.20 у вигляді вікна наведено на рис. 10.26.

Константи NULL та MB_OK, використані у функції Messagebox, покращують читабельність коду. До них можна безпосередньо звертатися в програмі.

 
 

 

 


Оператор addr використовується для передачі адреси мітки функції. Він дійсний тільки в контексті директиви invoke.

Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.

 

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

Згідно з цифрою номера студента в групі вибрати свій варіант та написати програму з використанням команд обробки рядків,з обов’язковим виведення в файл та й у спрощене віконце. Дані, які виводяться, необхідно підписати, вивести умову завдання та довідку про автора програми.

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

2. Задано послідовність латинських букв завдовжки 18 символів. Розставити їх за абеткою.

3. Задано текст із 30 символів. Стиснути текст, залишивши між словами по одному пропуску.

4. Задано текст із 20 символів. Визначити кількість повторень поєднань " ОР " в тексті і замінити такі повторення символом "!"

5. Задано текст із 40 символів. Визначити кількість слів, які містять більше 4-х символів. Слова розділяються одним пропуском.

6. Задано текст із 8 слів з різною кількістю символів. У словах з парним номером змінити порядок букв на зворотний.

7. Побудувати послідовність з n (n ≤ 30) символів наступного вигляду: АББВВВГГГГДДДДДЕЕЕЕЕЕ...

8. Задано текст із 32 символів, що складається із слів, розділених одним пропуском. Визначити кількість слів і кількість букв в кожному слові.

9. Задано текст із 34 символів, що складається із слів, розділених одним пропуском. Визначити кількість слів, в яких буква “ Е” зустрічається більш ніж 2 рази.

10. Задано послідовність із 37 символів. Визначити частоту повторення кожного символу.

11. Задано 8 слів по 6 символів. На початку кожного слова записано номер з двох символів. Розставити слова за збільшенням номерів.

12. Задано текст із 15 слів, розділених пропуском. Визначити кількість слів, в яких буква “ А ” зустрічається більше 3-х разів.

13. Задано текст із 10 слів, розділених пропусками (одним і більше). Визначити кількість слів, що містять більше 4 символів.

14. Задано текст із 8 слів, розділених пропуском. Визначити кількість повторень букви “ Е ” в кожному слові.

15. Задано текст із 12 слів, розділених пропуском. Розставити слова відповідно до латинського алфавіту.

16. Задано текст із 26 символів. Визначити кількість різних символів і частоту їх повторень.

17. Задано текст, що складається з 5 слів по 7 символів. Розставити слова відповідно до російського алфавіту.

18. Задано текст, що складається з 10 слів, розділених деякою кількістю пропусків. Визначити кількість букв “ А ” в кожному слові.

19. Задано текст, що складається з 8 слів по 5 символів. Визначити кількість голосних букв в кожному слові.

20. Задано текст, що складається з 4 слів по 8 символів. Визначити кількість різних букв в кожному слові.

21. Задано текст, що складається з 7 слів по 5 символів. Видалити слова, що містять більше 3-х букв “ О ”.

22. Задано текст, розділений на слова пропусками. Змінити порядок букв в словах на протилежний.

23. Задано текст із 25 символів. Знайти слова, порядок букв в яких зворотний по відношенню до першого слова. (Слова розділені пропусками).

24. Задано текст із 18 символів: 3 слова по 6 символів. Здійснити кільцевий зсув кожного слова вліво: 1-го – на 1 символ; 2-го – на 2 символи; 3-го – на 3 символи.

25. Побудувати послідовність вигляду АББССС із 30 символів відповідно до заданої таблиці, що містить символ і кількість його повторень. Наприклад: А – 1 раз; Б – 2 рази; C – 3 рази і т.д.

26. Задано текст з 30 символів, які можуть бути поділені пропусками та знаками перепинання. У кожному слові рядка замінити 1-у букву на останню, 2-у на передостанню і так далі.

27. Ввести довільний символьний рядок. Розділити його на два рядки: рядок голосних і рядок приголосних. Перший рядок вивести на екран, а другу - у файл.

 




Дата добавления: 2014-12-18; просмотров: 22 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.023 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав