Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 3
з дисципліни: “Засоби системного програмування”
на тему: “Дослідження способів представлення даних в пам’яті комп’ютера з архітектурою х86”
Мета лабораторної роботи
Вивчити способи задання констант та змінних в Асемблері, набути навички інтерпретування даних в пам’яті комп’ютера з архітектурою х86.
Теоретичні відомості
Асемблер допускає два основні методи визначення даних: через вказування довжини даних та за їх значенням. В першому випадку використовуються директиви визначення даних, а у другому безпосереднє значення або директива EQU.
Розглянемо основний формат визначення даних:
[ім’я] Dn вираз
- Ім’я елемента даних не є обов’язковим але якщо в програмі є посилання на деякий елемент, те це робиться за допомогою імені.
- Для визначення елементів даних є наступні директиви:
DB (байт)
DW (слово – 2 байти)
DD (подвійне слово – 4 байти),
DQ (8 байт)
DT (10 байт).
Вираз може містити константу, наприклад: FLD1 DB 25,
або знак питання для невизначеного значення, наприклад: FLDB DB ?
Вираз може містити кілька констант, розділених комами й обмеженими тільки довжиною рядка:
FLD3 DB 11, 12, 13, 14, 15, 16, ...
Асемблер визначає ці константи у вигляді послідовності сусідніх байт. Звертання за FLD3 вказує на першу константу 11, за FLD3+1 - на другу 12. (FLD3 можна представити як FLD3+0).
Наприклад команда MOV AL,FLD3+3 завантажує в регістр AL значення 14 (0Eh).
Вираз допускає також повторення константи в наступному форматі:
[ім’я] Dn кількість повторень DUP (вираз) ...
Індивідуальне завдання
Створити *.exe програму, яка розміщує в пам’яті даних комп’ютера, операнди, що задані варіантом.Вхідні операнди А, В, С, D, E, F з індексом u вважати без знаковими і довжиною в байтах, згідно з індексу, з індексом fs вважати з рухомою комою одинарної точності (32 біти), з індексом fd вважати з рухомою комою подвійної точності (64 біти), з індексом fe вважати з рухомою комою розширеної точності (80 біт); операнди А, В, С розмістити в сегменті DATA з довільним вирівнюванням сегменту, D, E, F розмістити в сегменті DATA1 з вирівнюванням сегменту BYTE, WORD, DWORD, PARA, PAGE (див. [5]). Крім цього операнд А є масивом з 3-ох елементів. При оголошені призначити операндам початкові значення використовуючи всі можливі системи лічби. К – константа, довжина якої визначається значенням(згідно варіанту), а значення задане в шістнадцятковому форматі. Для її опису слід використати директиву EQU. Задати одну мітку в довільному місці сегменту даних. В одному з сегментів на вибір розташувати змінну Message db 'Прізвище',13,10,'$', де 'Прізвище' – прізвище виконавця роботи, яке вивести на екран.
За допомогою Debug, дослідити представлення даних в пам’яті комп’ютера для кожного з варіантів вирівнювання (продемонструвати розміщення даних та здійснити інтерпретацію).
Скласти звіт про виконану роботу з приведенням тексту програми з коментарями, дампу пам’яті для кожного з варіантів вирівнювання стеку, та аналітично інтерпретувати дані для кожної зі змінних.
Дати відповідь на контрольні запитання.
12
A2,B4u,Cfd,D10u,E1,F8, K
7055E0AC
Код програми
STACK SEGMENT PARA STACK 'STACK'
db 100h DUP (?)
STACK ENDS
DATA SEGMENT WORD 'DATA'
Message db 'Mazurenko',13,10,'$'
A dw 0123Q, 0ABCh, 9874
B dd 100000A5h, 4150AB3Ch
C dq 512h
DATA ENDS
DATA1 SEGMENT PARA 'DATA'
LBL LABEL BYTE
D dt 3.14e8
E db 11111010b
F dq 12356789ABCDEFh
K equ 7055E0ACh
DATA1 ENDS
CODE SEGMENT PARA 'CODE'
ASSUME cs:CODE, ds:DATA
ProgramStart:
push ds ;initialize stack segment
sub ax,ax ;initialize stack segment
push ax ;initialize stack segment
mov ax,Data ;initialize data segment
mov ds,ax ;initialize data segment
mov ah,09 ;display message
mov dx,OFFSET Message
int 21h
mov ah,4Ch ;DOS terminate program function
int 21h ;end of the program
CODE ENDS
END ProgramStart
Результат виконання програми
/
/
Висновок
Я вивчив способи задання констант та змінних в Асемблері та набув навичок інтерпретування даних в пам’яті комп’ютера з архітектурою х86.