Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Сохранение странички в файл из TWebBrowser
   Категория: Интернет и Сети
  Как нарисовать календарь
   Категория: Текст и строки
  Создать таблицу ABS (AbsoluteDB)
   Категория: Базы данных
  Как получить дату создания файла
   Категория: Файловая система
  Удаление файла в корзину
   Категория: Файловая система
  Число строкой с предстоящими нулями
   Категория: Текст и строки
  Процедуры и функции для рабты с файлами
   Категория: Файловая система
  Перекодировка текста DOS-Windows-Koi8
   Категория: Текст и строки
  Компонент 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 уроке мы будем говорить о метках и их использовании.

Источник: http://www.programmersclub.ru

  << Назад к Содержанию