Міністерство освіти і науки України
Національний університет «Львівська Політехніка»
Кафедра ЕОМ
/
ЗВІТ
з лабораторної роботи №2
з дисципліни: “Системне програмування частина 1”
на тему: Дослідження способів представлення даних в пам’яті комп’ютера з архітектурою х86.
Варіант – 19
Львів 2024
Мета: вивчити способи задання констант та змінних в Асемблері, набути навики інтерпретування даних в пам’яті комп’ютера з архітектурою х86.
Завдання:
1. Створити *.exe програму, яка розміщує в пам’яті даних комп’ютера, операнди, що задані варіантом. Вхідні операнди А, В, С, D, E, F з індексом u вважати без знаковими і довжиною в байтах, згідно з індексу, з індексом fs вважати з рухомою комою одинарної точності (32 біти), з індексом fd вважати з рухомою комою подвійної точності (64 біти), з індексом fe вважати з рухомою комою розширеної точності (80 біт); крім цього операнд А є масивом з 3-ох елементів. При оголошені призначити операндам початкові значення використовуючи всі можливі системи лічби. К – константа, довжина якої визначається значенням(згідно варіанту), а значення задане в шістнадцятковому форматі. Для її опису слід використати директиву EQU. Задати одну мітку в довільному місці сегменту даних. Задати в сегменті даних змінну Message db 'Прізвище',13,10, , де 'Прізвище' – прізвище виконавця роботи, яке вивести на екран.
2. За допомогою меню Debug середовища Visual Studio 2019, дослідити представлення даних в пам’яті комп’ютера (продемонструвати розміщення даних та здійснити інтерпретацію).
3. Скласти звіт про виконану роботу з приведенням тексту програми з коментарями, дампу пам’яті та аналітично інтерпретувати дані для кожної з змінних.
4. Дати відповідь на контрольні запитання.
Варіант 19:
/
Виконання роботи:
Код програми:
.686
.model flat, stdcall
option casemap:none
GetStdHandle proto STDCALL, nStdHandle : DWORD
WriteConsoleA proto STDCALL, hConsoleOutput : DWORD, lpBuffert : DWORD, nNumberOfCharsToWrite : DWORD, lpNumberOfCharsWritten : DWORD, lpReserved : DWORD
ExitProcess proto STDCALL, uExitCode : DWORD
.data
LBL1 LABEL DWORD
A dd 170F2h, -153h, 4615h
B dd 01001110B
Cc dd 0a14Fh
D dw 2.3478
E dt 0FA1h
F dq 00ACh, 0A123h, 0F098h
K equ 4019h
hConsoleOutput dd 0
NumberOfCharsWritten dd 0
HelloMessage db 'Patsak', 10, 13
NumberOfCharsToWrite dd $-HelloMessage
.code
start:
push -11
call GetStdHandle
mov hConsoleOutput, eax
push 0
push offset NumberOfCharsWritten
push NumberOfCharsToWrite
push offset HelloMessage
push hConsoleOutput
call WriteConsoleA
push 0
call ExitProcess
end start
Результат виконання:
/
/
A=01 70 f2
B= 4e
C= a1 4f
D= 46 15 ff ff fe ad 00
E=0fa1
F= 00 ac 00 a1 23 f0 98
Patsak=50 61 74 73 61 6b 0a 0d 08
Перевіримо число з плаваючою комою:
Мантиса:
2,3478= 10.101 1111 1111 1111 1111 1111 1110 1010 1101 0000 00002= 1.0101 1111 1111 1111 1111 1111 1110 1010 1101 0000 0000*2^1
Знак=0
Порядок=100 0101 111+1=100 0110 000
Внутрішнє представлення:
0100 0110 0101 0001 1111 1111 1111 1111 1110 1111 1010 1101 0000 0000
4 6 5 1 f f f f e f a d 0 0
Висновок: На цій лабораторній роботі я вивчив способи задання констант та змінних в Асемблері, набути навики інтерпретування даних в пам’яті комп’ютера з архітектурою х86. Написати програму, яка розміщує в пам’яті даних комп’ютера, операнди, що задані варіантом 19.