Разное
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Сохранение странички в файл из TWebBrowser
Категория: Интернет и Сети
Категория: Интернет и Сети
Как нарисовать календарь
Категория: Текст и строки
Категория: Текст и строки
Создать таблицу ABS (AbsoluteDB)
Категория: Базы данных
Категория: Базы данных
Как получить дату создания файла
Категория: Файловая система
Категория: Файловая система
Удаление файла в корзину
Категория: Файловая система
Категория: Файловая система
Число строкой с предстоящими нулями
Категория: Текст и строки
Категория: Текст и строки
Процедуры и функции для рабты с файлами
Категория: Файловая система
Категория: Файловая система
Перекодировка текста DOS-Windows-Koi8
Категория: Текст и строки
Категория: Текст и строки
Получить первую и последнюю видимую строку в TRichEdit
Категория: Текст и строки
Категория: Текст и строки
Компонент SpeedButton
Категория: Компоненты
Категория: Компоненты
Assembler and Win32
Assembler&Win32. Курс молодого бойца. Урок 5.
Данные в ассемблере
Секции .data, .data? и
.const нужны для определения данных программы. Место под данные
резервируется с помощью директив db, dw, dd, dq, dt.
db - 1 байт
dw - 2 байта - 1 слово
dd - 4 байта - 2 слова
dq - 8 байт - 4 слова
dt - 10 байт
Секция .data наиболее универсальная мы резервируем память под данные и сразу же инициализируем их, т.е. задаём им начальные значения. Все данные из этой секции включаются в исполнимый файл. Секция .data? менее гибкая, так как данные нельзя инициализировать. Все данные в этой секции не включаются в исполнимый файл, поэтому место только резервируется, но начальные значения не задаются. Данные в обеих секциях имеют полный режим доступа. Секция .const предназначена только чтения. Но ошибок не возникает при попытке изменить эти данные (????). Эта секция самая бесполезная.
.data
Perem dd 0000FF11h
X1 dw 01235h
Binary db 00111010b
dd 11225599h
decimal dw 28d
large dq 01123456789ABCDEFh
dw 1011100101010111b
.data?
Perem1 dd ?
Perem2 dq ?
Perem5 dw ?
Dd ?
Dw ?
Perem4 db ?
..const
Const1 dd 012345678h
dw 768d
Строки.
В ассемблере можно задавать только ANSI строки, Unicode строки сложнее задавать и для их обработки существует целый ряд API функций. В ассемблере также можно вместо присваивания однобайтовой переменной некоторого числа можно присвоить переменно букву. Но, в конечном счете, эта переменная будет равна коду буквы в кодировке ANSI. При инициализации символа можно использовать и кавычки и апострофы - без разницы.
.data
Char1 db 'W'
Char2 db 'Й'
db "r"
Всё выше написанное тоже самое что и:
.data
Char1 db 57h
Char2 db 0C9h
db 72h
При объявлении строк можно просто написать стоку после директивы db. Это воспринимается как последовательность символов
String db "ASM"
Тоже самое:
String db 'A'
Db "S"
Db "M"
Тоже самое:
String db 41h
Db 53h
Db 4Dh
Тоже самое:
String db 41h, 53h, 4Dh
При передаче строк функциям в качестве параметров надо чтобы в конце строки был 0, для того чтобы функция смогла найти конец строки.
String db "ASM",0
Msg db "First ASSEMBLER program",0
Ttl db 'Hello, World!!!!',0
Заполнение данными.
Иногда нужно описать много одинаковых переменных примерно штук 30. Вы будете делать так
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 30 раз
Это неудобно и некрасиво, тем более можно обсчитаться. Для сделана директива DUP.
db 30 DUP (0) ; тот же результат
в скобках указываем, чем надо заполнять, можно использовать символы в кавычках, обязательно чтобы размер в скобках совпадал с директивой.
Примеры:
Dd 10 DUP ("в")
Dw 45h DUP (0DF23h)
Dd 100b DUP (12345678h)
С данными всё понятно. Читаем следующий урок. На 6 уроке мы будем говорить о метках и их использовании.
db - 1 байт
dw - 2 байта - 1 слово
dd - 4 байта - 2 слова
dq - 8 байт - 4 слова
dt - 10 байт
Секция .data наиболее универсальная мы резервируем память под данные и сразу же инициализируем их, т.е. задаём им начальные значения. Все данные из этой секции включаются в исполнимый файл. Секция .data? менее гибкая, так как данные нельзя инициализировать. Все данные в этой секции не включаются в исполнимый файл, поэтому место только резервируется, но начальные значения не задаются. Данные в обеих секциях имеют полный режим доступа. Секция .const предназначена только чтения. Но ошибок не возникает при попытке изменить эти данные (????). Эта секция самая бесполезная.
.data
Perem dd 0000FF11h
X1 dw 01235h
Binary db 00111010b
dd 11225599h
decimal dw 28d
large dq 01123456789ABCDEFh
dw 1011100101010111b
.data?
Perem1 dd ?
Perem2 dq ?
Perem5 dw ?
Dd ?
Dw ?
Perem4 db ?
..const
Const1 dd 012345678h
dw 768d
Строки.
В ассемблере можно задавать только ANSI строки, Unicode строки сложнее задавать и для их обработки существует целый ряд API функций. В ассемблере также можно вместо присваивания однобайтовой переменной некоторого числа можно присвоить переменно букву. Но, в конечном счете, эта переменная будет равна коду буквы в кодировке ANSI. При инициализации символа можно использовать и кавычки и апострофы - без разницы.
.data
Char1 db 'W'
Char2 db 'Й'
db "r"
Всё выше написанное тоже самое что и:
.data
Char1 db 57h
Char2 db 0C9h
db 72h
При объявлении строк можно просто написать стоку после директивы db. Это воспринимается как последовательность символов
String db "ASM"
Тоже самое:
String db 'A'
Db "S"
Db "M"
Тоже самое:
String db 41h
Db 53h
Db 4Dh
Тоже самое:
String db 41h, 53h, 4Dh
При передаче строк функциям в качестве параметров надо чтобы в конце строки был 0, для того чтобы функция смогла найти конец строки.
String db "ASM",0
Msg db "First ASSEMBLER program",0
Ttl db 'Hello, World!!!!',0
Заполнение данными.
Иногда нужно описать много одинаковых переменных примерно штук 30. Вы будете делать так
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 30 раз
Это неудобно и некрасиво, тем более можно обсчитаться. Для сделана директива DUP.
db 30 DUP (0) ; тот же результат
в скобках указываем, чем надо заполнять, можно использовать символы в кавычках, обязательно чтобы размер в скобках совпадал с директивой.
Примеры:
Dd 10 DUP ("в")
Dw 45h DUP (0DF23h)
Dd 100b DUP (12345678h)
С данными всё понятно. Читаем следующий урок. На 6 уроке мы будем говорить о метках и их использовании.