Реферат Курсовая Конспект
Зміст звіту - раздел Образование, Виконати дослідження переводу чисел з десяткової в двійкову систему числення 1. Постановка Задачі Для Конкретного Варіанта. 2. Лістинг Програми З...
|
1. Постановка задачі для конкретного варіанта.
2. Лістинг програми з детальним коментарем та описом роботи.
3. Рrint screen екрана 32-розрядного налагоджувача з виконаною програмою.
4. Короткий опис виконання програми.
5. Висновки за результатами роботи.
Приклад 5.2. Написати на асемблері програму обчислення виразу
(а + b)с – d/c,
де a – № в списку;
b – № навчальної групи;
c – рр – дві останні цифри року народження;
е – рррр – чотири цифри року народження;
d – ддмм:
дд – день народження;
мм – місяць народження.
Результат обчислення виразу зберегти в пам’яті. Навести значення та порядок розміщення даних у пам’яті.
Приклад обчислення виразу (5 + 16)81 – 2209/81 наведено в лістингу 5.13.
Лістинг 5.13.Програма обчислення прикладу 5.2 з використанням змінних розміром у байт:
title CopyRight by Rysovaniy A. N. rysov@rambler.ru
.686 ; директива визначення типу мікропроцесора
.model flat ; завдання лінійної моделі пам’яті
.data ; директива визначення даних
_a db 5 ; запис у 8-розрядну комірку пам’яті з ім’ям _а числа 5
_b db 16 ; _b = 10h
_c db 81 ; _c = 51h
_d dw 2209 ; запис у 16-розрядну комірку пам’яті числа _d = 8A1
rez1 dw 0 ; резервування пам’яті для збереження змінної rez1
rez2 dw 0 ; резервування пам’яті для збереження змінної rez2
.code ; директива початку сегмента команд
_start: ; мітка початку програми з ім’ям _start
mov al,_a ; al = 05h
add al,_b ; al = 5h + 10h = 15h – (a + b)
mul _c ; ax = 15h ´ 51h = 06A5h – (a + b)c
push ax ; стек = ХХХХ06A5h
mov ax,_d ; ax = 08A1h
div _c ; ah,al = ax/_c = 16 1Bh – d/c
movzx bx,ah ; bx = 0016h – залишок
xor cx,cx ; cx = 0
sub cx,bx ; cx = cx – bx = FFEAh – залишок
mov rez1,cx ; збереження залишку
pop cx ; cx = 06A5h – відновлення (a + b)c
movzx ax,al ; al = 001Bh – вирівнювання формату
sbb cx,ax ; cx = 06A5h – 001Bh – 1 = 0689h – ціла частина
mov rez2,cx ; збереження цілої частини результату
ret ; повернення керування ОС
end _start ; закінчення програми з ім’ям _start
Порядок розміщення даних у пам’яті та стан налагоджувача OllyDbg програми наведено на рис. 5.18.
Результатом виконання програми буде число 0689.FFEA, де 689h – ціла частина, а FFEAh – залишок (дрібна частина) результату.
Для копіювання активного вікна програми, наприклад програми OllyDbg, треба натиснути Alt + PrtScr.
Збереження тимчасових результатів частини виразу (а + b)с виконується в стеку, хоча для цього можна використовувати як один із вільних регістрів, так й комірку пам’яті.
Програму обчислення прикладу 5.2 з використанням даних розміром у слово наведено у лістингу 5.14.
Лістинг 5.14. Програма обчислення прикладу 5.1 з використанням змінних розміром у слово:
title CopyRight by Rysovaniy A. N.
.686 ; директива визначення типу мікропроцесора
.model flat ; завдання лінійної моделі пам’яті
.data ; директива визначення даних
_a dw 5 ; запис у 8-розрядну комірку пам’яті з ім’ям _а числа 5
_b dw 16 ; _b = 10h
_c dw 81 ; _c = 51h
_d dw 2209 ; запис у 16-розрядну комірку пам’яті з ім’ям _ d числа 8A1
res dw 3 dup (0) ;
.code ; директива початку сегмента команд
_start: ; мітка початку програми з ім’ям _start
mov ax,_a ; ax = 0005h
add ax,_b ; ax = 0015h
mul _c ; dx = 0000h, ax = 06A5h
push dx ; стек = xxxx0000h
push ax ; стек = 0000 06A5h
mov ax,_d ; ax = 08A1h
div _c ; dx = 0016h, ax = 001Bh
xor si,si ; si = 0 – заповнювання нулями регістра si
sub si,dx ; 0000 – 0016h = FFEAh – дріб
mov res,si ; запис дробової частини
pop si ; si = 06A5h – старша частина результату (а-b)c
sbb si,ax ; віднімання з урахуванням позики
mov res+2,si ; запис молодшої цілої частини
pop si
sbb si,0 ; віднімання з урахуванням позики
mov res+4,si ; запис цілої старшої частини
ret ; повернення керування ОС
end _start ; закінчення програми з ім’ям _start
Порядок розміщення даних у пам’яті та стан налагоджувача OllyDbg з програмою наведено на рис. 5.19.
Результат виконання прикладу не змінився та дорівнює 0000 0689,FFEAh.
Приклад використання формату даних, збільшеного учетверо, наведено у лістингу 5.15. В цій програмі операція віднімання виконана у додаткових кодах. Тому й результат обчислення виразу теж наведено у додаткових кодах.
Лістинг 5.15.Приклад використання формату даних, збільшеного учетверо:
title CopyRight by Rysovaniy A. N.
; (e + d – ed)/a
.686 ; директива визначення типу мікропроцесора
.model flat ; завдання лінійної моделі пам’яті
.data ; директива визначення даних
a dd 6 ; a = 00000006h
d dd 2112 ; d = 00000840h
e dd 1989 ; e = 000007C5h
rez1 dd 0 ; rez1 = 00000000h
rez2 dd 0 ; rez2 = 00000000h
.code ; (e + d – ed)/a – початок сегмента команд
_start: ; мітка початку програми з ім’ям _start
; e*d
mov eax,d ; eax = 00000840h
imul e ; edx = 00000000h, eax = 00401940h
; – e*d (перетворення у додатковий код)
not eax ; інверсія eax = FFBFE6BFh
not edx ; інверсія edx = FFFFFFFFh
inc eax ; eax = FFBFE6C0h
adc edx,0 ; edx = FFFFFFFFh (CF=0)
; + d – e*d
add eax,d ; eax = FFBFEF00h
adc edx,0 ; edx = FFFFFFFFh (CF=0)
;e + d – e*d
add eax,e ; eax = FFBFF6C5h
adc edx,0 ; edx = FFFFFFFFh (CF=0)
; (e+d-e*d)/a
idiv a ; edx = FFFFFFFDh, eax = FFF553CCh
mov rez1,eax ; rez1 = FFF553CCh – частка
mov rez2,edx ; rez2 = FFFFFFFDh – залишок
ret ; повернення керування ОС
end _start ; закінчення програми з ім’ям _start
У зв’язку з тим, що значення виразу (e+d-e*d) при таких початкових даних повністю розміщується у регістрі eax та не “переходить” у регістр edx, програма стає достатньо простою. У противному разі потрібно виконувати спочатку ділення регістра edx, потім залишок пристиковувати до регістра eax та знову виконувати ділення (ділення у стовпчик)
Для одержання результату в прямому коді необхідно провести зворотне перетворення вмісту комірок пам’яті з додаткового коду.
Порядок розміщення даних у пам’яті та стан налагоджувача OllyDbg з програмою лістингу 5.15 наведено на рис. 5.20.
– Конец работы –
Эта тема принадлежит разделу:
Лабораторна робота Подання даних... Мета заняття... Виконати дослідження переводу чисел з десяткової в двійкову систему числення Дати їх внутрішнє машинне подання...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Зміст звіту
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов