Разместите нашу кнопку!

Новые статьи:

Programming articles

Создание сайтов на шаблонах

Множество вариантов работы с графикой на канве

Шифруем файл с помощью другого файла

Перехват API функций - Основы

Как сделать действительно хороший сайт

Создание почтового клиента в Delphi 7

Применение паскаля для решения геометрических задач

Управление windows с помощью Delphi

Создание wap сайта

Операционная система unix, термины и понятия

SQL враг или друг

Возникновение и первая редакция ОС UNIX

Оптимизация проекта в Delphi

Ресурсы, зачем нужны ресурсы

Термины программистов 20 века

Советы по созданию собственного сайта с нуля

Шифруем файл с помощью пароля

Фракталы - геометрия природы

Crypt - Delphi программа для шифрования

Рассылка, зачем она нужна и как ее организовать?

Учебник по C++ для начинающих программистов

Уроки для изучения ассемблера

Загадочный тип PCHAR

Средства по созданию сайтов

Операторы преобразования классов is и as

Borland Developer studio 2006. Всё в одном

Создание базы данных в Delphi, без сторонних БД


Software engineering articles



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 уроке мы будем говорить о метках и их использовании.