Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 3
на тему:
" Дослідження способів представлення даних в пам’яті комп’ютера з архітектурою х86"
з дисципліни:
" Засоби системного програмування"
Львів – 2013
Мета: вивчити способи задання констант та змінних в Асемблері, набути навики інтерпретування даних в пам’яті комп’ютера з архітектурою х86
ЗАВДАННЯ:
Створити *.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, дослідити представлення даних в пам’яті комп’ютера для кожного з варіантів вирівнювання (продемонструвати розміщення даних та здійснити інтерпретацію).
Скласти звіт про виконану роботу з приведенням тексту програми з коментарями, дампу пам’яті для кожного з варіантів вирівнювання стеку, та аналітично інтерпретувати дані для кожної зі змінних.
Дати відповідь на контрольні запитання.
Хід роботи:
Варіант №1
Задані операнди:
A2,B1u,C4,Dfd,E10,F3, K = 1254021
Отже, сегмент даних може буде описаний таким чином:
DATA SEGMENT WORD 'DATA'
HelloMessage db 'Bagrij',13,10,'$'
A dw 0101Q,016Ch, 9874
B dw 07CAh
C dd 256h
DATA ENDS
DATA1 SEGMENT DWORD 'DATA1'
LBL LABEL BYTE
D dd 7.56e5
E dw 259879
F dd C17h
K equ 1254021
DATA1 ENDS
.
2. Розміщення даних в пам’яті:
Сегмент DATA
/
HelloMessage db 'Bagrij',13,10,'$'
/
A dw 0101Q,016Ch, 9874
Dw – слово 2 байти
0101Q – вісімковий формат числа 1018 = 4116
/
016Ch – число 16С 16 01 6С в пам’яті зберігається як 6С 01
/
987410= 26 9216 В пам’яті 92 26
/
B dw 07CAh
07CA16 В пам’яті CA 07
/
C dd 256h
DD (подвійне слово – 4 байти),
02 56
/
Вирівнювання сегменту, до розміру рівного 8
Адреса 001016=1610
/
Сегмент DATA1
D dd 7.56e5
dd - подвійне слово 4 байт
/
E dw 2598
259810= А2616
ВПК 26 0А
/
F dd 0C17h
/
Лістинг програми
STACK SEGMENT PARA STACK 'STACK'
db 100h DUP (?)
STACK ENDS
DATA SEGMENT WORD 'DATA'
HelloMessage db 'Bagrij',13,10,'$'
A dw 0101Q,016Ch, 9874
B dw 07CAh
C dd 256h
DATA ENDS
;=====================================================================
DATA1 SEGMENT DWORD 'DATA1'
LBL LABEL BYTE
D dd 7.56e5
E dw 2598
F dd 0C17h
K equ 1254021
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 HelloMessage
int 21h
mov ah,4Ch ;DOS terminate program function
int 21h ;end of the program
CODE ENDS
END ProgramStart
Висновок: на даній лабораторній роботі я навчився задавати константи та змінні в Асемблері, набув навики інтерпритування даних в пам’яті комп’ютера.