Реферат Курсовая Конспект
Зміст звіту - раздел Образование, Виконати дослідження переводу чисел з десяткової в двійкову систему числення 1. Постановка Задачі Для Конкретного Варіанта. 2. Блок-Схема Алгорит...
|
1. Постановка задачі для конкретного варіанта.
2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи.
3. Лістинг програми та коментарі до всіх команд.
4. Рrint screen екрана 32-розрядного налагоджувача з виконанням програми та результатами виконання.
5. Короткий опис виконання програми.
6. Висновки за результатами роботи.
Приклад 12.7:
Проаналізувати масив даних з 10 елементів розміром у подвійне слово. Додавати елементи масиву доти, поки значення суми не перевищить 15. Зберегти номер елемента, на якому відбулося переповнення. Видати повідомлення на екран монітора (текстове або/чи числове).
Блок-схему алгоритму виконання прикладу наведено на рис. 12.9.
Розв’язання прикладу 12.3 з використанням директив високого рівня, але поки без виведення даних, наведено у лістингу 12.9.
Лістинг 12.9:
title CopyRight by Rysovaniy A. N. rysov@rambler.ru
.386 ; директива визначення типу мікропроцесора
.model flat, stdcall ; завдання лінійної моделі пам’яті
; та угоди ОС Windows
option casemap:none ; відмінність малих та великих літер
.data ; директива визначення даних
mas1 dd 1,4,5,4,6,7,3,8,2,10 ; масив чисел
len equ $-mas1 ; визначення кількості байтів в масиві
.code ; директива початку сегмента даних
_start: ; мітка початку програми з ім’ям _start
mov ecx,len ; завантаження лічильника
shr ecx,2 ; визначення кількості подвійних слів
lea esi, mas1 ; завантаження адреси початку масиву
mov eax, [esi] ; завантаження числа
m1:
.IF(eax<15) ; умова
mov ebx,[esi+4] ; завантаження нового числа з масиву
add eax,ebx ; додавання елементів
add esi,4 ; розрахунок адреси нового числа
add ebx,4 ; розрахунок адреси наступного числа
loop m1 ; перейти на m1, якщо ecx = 0
.ENDIF ; закінчення директиви високого рівня
ret ; повернення керування ОС
end _start ; директива закінчення програми з ім’ям _start
У наведеній програмі при виникненні необхідності додавання двох чисел одного масиву слід використати додатковий регістр (для зберігання адреси другого числа). Таким регістром вибрано регістр ebx. Завантаження в цей регістр значення адреси другого числа виконується командою mov ebx,[esi+4].
У зв’язку з тим, що за завданням вибрано формат регістрів в 32 розряди (4 байти), для підготовки зчитування нових слів виконуються команди
add esi,4
add ebx,4.
Вікна налагоджувача після налагодження програми з лістингу 12.9 наведено на рис. 12.10.
Для виконання другої частини роботи необхідно організувати виведення даних на екран. Для цього доцільно використати АРІ-функцію WriteConsoleA, фрагмент застосування якої може бути таким:
.386
.model flat, stdcall
option casemap:none
include masm32includewindows.inc
include masm32includeuser32.inc
include masm32includekernel32.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
BSIZE equ 15
.data ; директива визначення даних
stdout dd ? ; дані для дескриптора виведення, що не визначені
buf db BSIZE dup(?) ; резервування пам’яті для буфера
frmt db "%d",0 ; завдання перетворення одного символу
cWritten dd ? ; комірки пам’яті для адрес
; символів виведення
. . .
.code ; директива початку сегмента даних
_start: ; мітка початку програми з ім’ям _start
. . .
invoke GetStdHandle, STD_OUTPUT_HANDLE ; отриманого дескриптора
mov stdout, eax ; запам’ятовування отриманого дескриптора
. . .
invoke wsprintf, ; АРІ-функція перетворення числа
ADDR buf, ; адреса буфера, куди буде записана посліднісьт символів
ADDR frmt, ; адреса рядка перетворення формату
edx ; регістр, вміст якого перетворюється
invoke WriteConsoleA, ; АРІ-функція виведення на екран
stdout, ; дескриптор стандартного пристрою виведення
ADDR buf, ; адреса початку повідомлення
BSIZE, ; розмір повідомлення
ADDR cWritten, ; адреса, де зберігається число символів
NULL
invoke ExitProcess, 0 ; повернення керування ОС Windows
; та визволення ресурсів
end _start ; директива закінчення програми з іменем _start
У цій програмі використовуються файли user32.inc і user32.lib, що зберігають інформацію про функцію wsprintf. Число параметрів цієї функції поки дорівнює трьом:
1. Параметр ADDR buf – це адреса буфера, куди буде записана послідовність символів. Пам’ять для буфера виділяється рядком buf db BSIZE dup(?), який резервує кількість байтів, заданих змінною BSIZE. Про резервування байтів пам’яті говорить слово dup – скорочене від англійського слова duplication (повторення). Знак питання, в дужках після dup, свідчить про те, що значення байтів наперед не визначене.
Розмір буфера, позначений ім’ям BSIZE, є реальним числом, яким асемблер замінить змінну BSIZE та яке задається рядком BSIZE equ 15.
2. Параметр ADDR ifmt – це адреса рядка формату, яка задає тип перетворення. Цей рядок складається з символів і завжди завершується нульовим байтом. Рядок “%d”,0 задає перетворення одного цілого числа в послідовність символів, а рядок “%d%d”,0 – перетворення двох чисел.
3. Параметр edx вказує функції wsprintf на те що число, яке потребує перетворення в послідовність символів, знаходиться, наприклад, у регістрі edx.
Процедура WriteConsoleA виводить ці символи на екран. За першим параметром цієї функції (stdout) перетворене у символ число виводиться через консоль, за другим (параметр ADDR buf) вказується адреса початку повідомлення, за третім (BSIZE) – розмір повідомлення, за четвертим (ADDR cWritten) – адреса ділянки пам’яті, де процедура WriteConsoleA зберігає число виведених на екран символів.
13.3. Лабораторна робота “Структури та макроси”
Мета заняття:
– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;
– придбати практичні навички складання, налагодження і виконання програм з використанням структур та АРІ-функцій під Win32, написаних мовою асемблеру МП платформи х86.
– Конец работы –
Эта тема принадлежит разделу:
Лабораторна робота Подання даних... Мета заняття... Виконати дослідження переводу чисел з десяткової в двійкову систему числення Дати їх внутрішнє машинне подання...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Зміст звіту
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов