МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
ЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
/
Лабораторна робота №3
з курсу
”Засоби системного програмування”
Дослідження способів представлення даних в пам’яті комп’ютера з архітектурою х86.
Львів – 2012
Визначення даних в мові Assembler.
Асемблер допускає два основні методи визначення даних: через вказування довжини даних та за їх значенням. В першому випадку використовуються директиви визначення даних, а у другому безпосереднє значення або директива 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 (вираз) ...
Символьні рядки
Символьний рядок використаються для опису даних, таких як, наприклад, імена людей або заголовки сторінок. Вміст рядка виділяється одинарними лапками, наприклад, ‘PC’ або подвійними лапками - "PC". Асемблер переводить символьні рядки в об’єктний код у звичайному форматі ASCII.
Символьний рядок визначається тільки директивою DB, в якій вказується більше двох символів у нормальній послідовності зліва направо. Отже, директива DB є єдиним можливим форматом для визначення символьних даних.
Числові константи
Числові константи використаються для арифметичних величин і для aдрес пам’яті. Для опису константи лапки не ставляться. Асемблер перетворить всі числові константи в шістнадцятковий формат і записує байти в об’єктному коді в зворотної послідовності - справа наліво.
Десятковий формат. Десятковий формат допускає десяткові цифри від 0 до 9 і позначається останньою буквою D, що можна не вказувати, наприклад, 125 або 125D. Незважаючи на те, що асемблер дозволяє кодування в десятковому форматі, він перетворить ці значення в шістнадцятковий об’єктний код. Наприклад, десяткове число 125 перетвориться в. 7Dh.
Шістнадцятковий формат. Шістнадцятковий формат допускає шістнадцяткові цифри від 0 до F і позначається останньою буквою H. Оскільки асемблер думає, що з букви починаються ідентифікатори, те першою цифрою шістнадцяткової константи повинна бути цифра від 0 до 9. Наприклад, 2EH або 0FFFH, які асемблер перетворить відповідно в 2E і FF0F (байти в другому прикладі записуються в об’єктний код у зворотній послідовності).
Двійковий формат. Двійковий формат допускає двійкові цифри 0 і 1 і позначається останньою буквою B. Двійковий формат звичайно використається для більше чіткого подання бітових значень у логічних командах AND, OR, XOR і TEST. Десяткове 12, шістнадцяткове C і двійкове 1100B усі генерують один і той же код:
Вісімковий формат. Вісімковий формат допускає вісімкові цифри від 0 до 7 і позначається останньою буквою Q або O, наприклад, 253Q.
Формат з рухомою комою. Числові константи з рухомою комою задаються у форматі ціла_частина.дробова_частина Е степінь. Де Е – основа системи лічби (10). Стандарт IEEE 754-2008 визначає кілька форматів представлень чисел з рухомою комою.
Дослідження способів представлення даних в пам’яті комп’ютера з архітектурою х86.
Мета: вивчити способи задання констант та змінних в Асемблері, набути навики інтерпретування даних в пам’яті комп’ютера з архітектурою х86.
Лістинг програми
DATA SEGMENT WORD 'DATA'
HelloMessage db 'Matsyuk',13,10,'$'
A dd 0457Q,054fch, 710
B dq 0fa1h,054bbh
C dd 761h
DATA ENDS
DATA1 SEGMENT PARA 'DATA'
LBL LABEL BYTE
D dt 3.14e8
E dt 101b
F dq 76453BBCCAADh
K dd 4569600Fh
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 ax,k
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
Дамп пам’яті відображено на рис.1, де Оранжевим кольором відображена перша змінна (операнд), червоним – друга, жовтим – третя, розовим – четверта для кожного з сегментів. Константа К не заноситься в пам’ять а заміняється числом, що їй відповідає.
/
В даній лабораторній роботі я засвоїв та навчився представляти дані в комп’ютері з архітектурою х86.Також я вивчив основні директиви для представлення данних.