Главная страница
Навигация по странице:

  • Хранения инициализированных данных

  • Директива Цель Пространство для хранения DB

  • Директива Цель RESB Резервирует Byte RESW

  • переменные и константы. Переменные и константы Для студентов группы ис 2


    Скачать 1.57 Mb.
    НазваниеПеременные и константы Для студентов группы ис 2
    Анкорпеременные и константы
    Дата19.12.2022
    Размер1.57 Mb.
    Формат файлаpptx
    Имя файлаperemennye_i_konstanty.pptx
    ТипДокументы
    #853660

    Переменные и константы

    Для студентов группы ИС – 2

    Предмет: МДК 01.04 Системное программирование

    Хранения инициализированных данных

    Синтаксис стейтмента* выделения памяти для инициализированных данных следующий:

    [имя_переменной] директива_определения начальное_значение [,начальное_значение]...

    Где имя_переменной является идентификатором для каждого пространства хранения данных. Ассемблер связывает значение смещения с именем каждой переменной, определенной в сегменте данных.

    *Cтейтмент (англ. "statement") – это наиболее распространённый тип инструкций в программах. Это всё, что заканчивается точкой с запятой (;) или является управляющей конструкцией (но не само ключевое слово).
    Есть 5 основных форм директивы определения:

    Директива

    Цель

    Пространство для хранения

    DB

    Определяет Byte

    Выделяет 1 байт

    DW

    Определяет Word

    Выделяет 2 байта

    DD

    Определяет Doubleword

    Выделяет 4 байта

    DQ

    Определяет Quadword

    Выделяет 8 байт

    DT

    Определяет 10 Byte

    Выделяет 10 байт

    Примеры использования директив определения:

    • каждый байт символа хранится как его ASCII-значение в шестнадцатеричном формате;
    • каждое десятичное значение автоматически конвертируется в 16-битный двоичный эквивалент и сохраняется в виде шестнадцатеричного числа;
    • процессор использует прямой порядок байтов;
    • отрицательные числа конвертируются в форму «two’s complement»;
    • короткие и длинные числа типа с плавающей точкой представлены с использованием 32 или 64 бит, соответственно.

    Программа показывающая использование директивы определения:

    Что является результатом данной программы?

    • Кто правильно ответил: у, тому 5.

    Хранение неинициализированных данных

    Директивы резервирования используются для резервирования пространства неинициализированных данных. Директивы резервирования принимают один операнд, который определяет количество единиц пространства, которое будет зарезервировано. Каждая директива определения имеет связанную директиву резервирования.
    Есть 5 основных форм директив резервирования:

    Директива

    Цель

    RESB

    Резервирует Byte

    RESW

    Резервирует Word

    RESD

    Резервирует Doubleword

    RESQ

    Резервирует Quadword

    REST

    Резервирует 10 Byte

    Можно иметь несколько стейтментов определения данных в программе.

    Например:

    1

    2

    3

    choice    DB 'Y'    ; ASCII-значение для y = 79H

    number1    DW 12345    ; 12345D = 3039H

    number2    DD   123456789   ; 123456789D = 75BCD15H

    Ассемблер выделяет смежную память для нескольких определений переменных.

    Несколько инициализаций

    Директива TIMES позволяет выполнить несколько инициализаций одного значения. Например, массив с именем marks длиной 9 может быть определен и инициализирован нулем следующим образом:


    1

    marks  TIMES  9  DW  0

    Директива TIMES полезна при определении массивов и таблиц.

    Что выводит следующая программа?

    Определение констант

    NASM предоставляет несколько директив, определяющих константы:

    • директива EQU;
    • директива %assign;
    • директива %define.

    Директива EQU

    Директива EQU используется для определения констант. Её синтаксис следующий:

    ИМЯ_КОНСТАНТЫ EQU-выражение

    Например:


    TOTAL_STUDENTS equ 50

    Затем можно использовать эту константу в программе:

    mov  ecx,  TOTAL_STUDENTS

    cmp  eax,  TOTAL_STUDENTS

    Операндом стейтмента EQU может быть выражение:

    1

    2

    3

    LENGTH equ 20

    WIDTH  equ 10

    AREA   equ length * width

    Вышеприведенный фрагмент кода определит AREA как 200.

    Директива %assign

    Директива %assign может быть использована для определения числовых констант. Эта директива допускает переопределение. Например, можно определить константу TOTAL следующим образом:


    1

    %assign TOTAL 10

    Затем в коде она переопределяется:

    1

    %assign  TOTAL  20

    Эта директива является чувствительной к регистру.

    Директива %define

    Директива %define позволяет определять как числовые, так и строковые константы. Эта директива похожа на директиву #define в языке С. Например, можно определить константу PTR следующим образом:


    1

    %define PTR [EBP+4]

    Вышеприведенный код заменяет PTR на [EBP+4].

    Эта директива также допускает переопределение и является чувствительной к регистру.


    написать администратору сайта