MS-DOS и TASM 2.0. Часть 9. Указатель.

Понятие указателя изучим с помощью HEIW.

Понятие указателя.

Понятие указателя (pointer) — одно из самых важных в программировании. Для начинающего программиста просто необходимо его понять и усвоить. Попробуем разобраться, что это такое и зачем он нужен.

Процессор работает с памятью. Минимально возможное значение памяти — 1 бит (bit). Память воспринимается машиной блочно. Один минимальный блок равен одному байту (byte), 1 байт = 8 бит (bit — минимальная адресуемая единица памяти).

Чтобы произвести манипуляции даже с битом, мы должны поместить его значение в байтный блок. Так как всего в байте восемь бит, в байтном блоке может содержаться до 256 (2 в степени 8) разных значений(DEC: от 0 до 255, HEX: от 0 до FFh). Побайтные блоки идут друг за другом. Каждый байт условно пронумерован (от нуля и далее…). Порядковый номер блока называется смещением (offset) или указателем (pointer).

Hiew в помощь.

Запускаем Hiew. Открываем текстовый файл D:\WORK\PTR\ptr-1.txt.

Понятие указателя изучим с помощью HEIW.
Открываем текстовый файл с помощью HEIW.

 

Просмотр текста HEIW.
Текстовый файл содержит только символы ASCII.

Переходим в 16-тиричный (HEX) режим просмотра (Enter или F4->HEX). Перед нами удобное отображение документа в 16-тиричном виде. Каждая строка содержит по 16 (10h) байт. В левой стороне для удобство ориентации строки пронумерованы (нумерация, естественно также в 16 битном режиме). В средней колонке мы видим код в виде цифр — так, как его видит компьютер (для удобства просмотра через каждые четыре байта проставлен дефис — это только для нас).

HEX отображение документа.
Текстовый документ в HEX виде.

В крайней правой колонке отображается те же значения, но в виде ASCII символов. Таблица символов ASCII — это перечень соответствия цифр определённым буквам и символам (смотри таблицу символов ASCII) с помощью которых информация транслируется машиной в более понятный для человека вид. Таблица символов ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией) принята согласно достигнутым на международном уровне соглашениям. Наша любимая среда разработки DOS Tasm Editor (TASMED ) имеет ряд удобных подсказок, облегчающих написание и изучение программ, в частности встроенную таблицу ASCII.

ASCII.
American Standard Code for Information Interchange (ASCII).

Например, по смещению 0000005Dh располагается число 66h, которому согласно таблице символов ASCII, соответствует латинская буква «f».

Кодировка ASCII.
Значению 66h соответствует буква f в соответствии с кодировкой ASCII.

При передвижении указателя посредством клавиш влево-вправо, вверх-вниз в верхней части окна мы заметим изменения показателя смещения (offset), на которое указывает курсор. Так вот, значение этого смещения и есть указатель (pointer) на байтные блоки.

Tasm Editor ASCII table.
Подсказки, вшитые в среду разработки Tasm Editor (TASMED ).

Указатель и смещение — pointer, offset, address.

Разница между смещением (offset) и указателем (pointer) практически нет. Подразумевается, что смещение (offset) всегда относительно чего-то. В нашем случае — от начала файла. Слово «указатель» (pointer) не несёт в себе обременения относительности чего-то, но фактически является синонимом понятия offset.

 

Понятие указателя (pointer, offset, address)
Указатель, офсет, смещение — pointer, offset, address.

При запуске программа отображается в память. Отображается определённым способом, согласно данным заголовка исполняемого файла или типа файла (*.com). Указатель (pointer) в данном случае будет отсчитываться от начала выделенной для программы памяти. Иногда его называют «эффективный адрес» (Effective Address). Таким образом, указатель на один и тот же блок кода в памяти и на жёстком диске исполняемого файла не будут совпадать.

А теперь внимательно проанализируйте следующие высказывания (все они истинны):

  • По адресу 0000005Dh в текстовом файле ptr-1.txt находится число 66h.
  • Адрес 0000005Dh в текстовом файле ptr-1.txt указывает на число 102.
  • По адресу 0000005Dh в текстовом файле ptr-1.txt мы видим букву «f».
  • По смещению 0000005Dh от начала текстового файла ptr-1.txt находится строка «fourth string.»
  • Эффективный адрес (смещение) строки «fourth string.» в файле ptr-1.txt — 0000005Dh.

Синонимы слову «указатель», с которыми вы столкнётесь:

  • Указатель (Си, С++, Ассемблер).
  • Pointer (Си, С++, Ассемблер).
  • Ptr (Ассемблер).
  • Смещение (Ассемблер).
  • Offset Address (Ассемблер).
  • Offset (Ассемблер).
  • Оффсет (Ассемблер).
  • Оффсетный адрес (Ассемблер).
  • Адрес (Ассемблер).
  • Эффективный адрес (Ассемблер).
  • Address (Ассемблер).
  • Effective Address (Ассемблер).

Необходимо помнить.

  • Указатель всегда относителен. Например, он может отсчитываться от начала файла, а может от начала места загрузки файла в память.
  • Указатель указывает на начало блока памяти. Размер блока не определён. Блоком памяти может являться байт, несколько байт.
  • Информация, содержащаяся в памяти, на которую указывает указатель может быть как кодом, так и данными.

Необходимо отметить, что в языке программирования Си и С++ понятие указателя несколько конкретизировано и более узко определено, чем в ассемблере: указатель – переменная, значением которой является адрес ячейки памяти. То есть, указатель — это тип переменной, которая хранит значение, а значение — адрес ячейки памяти. В дальнейшем мы будем говорить об указателе в широком смысле — более понятном и типичном для ассемблера, как в данной статье.

Общее понятие указателя вами освоено. В последствии мы разберёмся более детально, но всему своё время…

Необходимые файлы и программы по прежнему найдёте в архиве DOS-1.rar .

Добавить комментарий