Тема 7. Определение данных в ассемблерной программе
Данные для ассемблерной программы определяются в сегменте данных для EXE-формата и в сегменте команд, после первой команды JMP для COM-формата.
Формат команды для определения данных имеет вид:
[Имя] Команда Операнд
FLD DB 25
В этом примере задается десятичная константа размерностью 1 Байт с именем FLD.
FCS DB 10H
В этом примере задается шестнадцатеричная константа размерностью 1 Байт с именем FCS.
DRT DB 01100001B
В этом примере задается двоичная константа размерностью 1 Байт с именем DRT.
TOL DB ?
В этом примере задается неопределенная константа размерностью 1 Байт с именем TOL.
SSC DB 11,12,13
В этом примере задается поле с именем SSC, содержащее 3 однобайтовые десятичные константы.
Для определения данных используются следующие команды Ассемблера:
1) DB – эта команда используется для задания констант размерностью 1 Байт.
2) DW – эта команда используется для задания констант размерностью 1 Слово (2 Байта).
3) DD – эта команда используется для задания констант размерностью Двойное слово (4 Байта).
4) DQ – эта команда используется для задания константы размерностью Два двойных слова (8 Байт).
Для повторного задания одной и той же константы используется оператор DUP.
DW 10 DUP(?)
Эта команда задает 10 неопределенных констант, размерностью 2 Байта каждая. Общий размер поля 20 Байт.
DB 5 DUP(14)
Эта команда задает 5 десятичных констант, имеющих значение 14 и размерностью 1 Байт каждая. Общий размер поля 5 Байт.
DB 3 DUP(4 DUP (8))
Эта команда задает 3 группы констант. В каждой группе по 4 десятичные константы со значением 8. Каждая константа имеет размерность 1 Байт. Общий размер поля 12 Байт.
FLK DB ‘NAME’
Эта команда задает символьную константу с именем FLK. Константа содержит 4 символа: N, A, M и E. Каждый символ кодируется 1 Байтом. Общий размер поля 4 Байта.
Команды DW, DD, DQ константы записываются в ячейки памяти побайтово в обратной последовательности.
Пример:
DW 3039H
В этом примере определяется двухбайтовая шестнадцатеричная константа, где 39Н – это младший байт константы, а 30Н – это старший байт константы.
|
Константа |
|
|
Старший Байт |
Младший Байт |
|
№1 |
№0 |
|
30 |
39 |
Младший байт константы записывается в младшую нулевую ячейку, а старший байт константы записывается в старшую первую ячейку памяти.
|
Память |
|
|
Младшая ячейка |
Старшая ячейка |
|
№0 |
№1 |
|
39 |
30 |
При просмотре дампа памяти на экране монитора константа будет выглядеть – 39 30.
Примеры использования регистров и данных в командах.
MOV AX,BX
Эта команда выполняет пересылку содержимого регистра BX в регистр AX.
MOV AX,WORDA
Эта команда выполняет пересылку содержимого поля с именем WORDA, определенном в сегменте данных, в регистр AX.
LEA AX,WORDA
Эта команда выполняет загрузку адреса поля с именем WORDA, определенном в сегменте данных, в регистр AX.
MOV AX,[BX]
Эта команда выполняет пересылку содержимого ячейки памяти, адрес которой указан в регистре BX, в регистр AX.
MOV AX,25
Эта команда записывает число 25 в регистр AX.
MOV AX,[25]
Эта команда выполняет пересылку содержимого 25й ячейки памяти в регистр AX, где 25 – это относительный адрес ячейки в сегменте данных.