Меню сайта

Урок 10. Биты, байты и слова

Мы назвали «битом» двоичнуюцифру, еденичное значение 0 или 1. — Для
— — — удобства введем специальные названия длянекоторых последо-
— — — вательностей битов. — Группу из 8 бит принято называтьбайтом. — Во
— — — всей документации IBM и в этой книге олюбых 8 битах информации
— — — говорится как о байте. — Байт заслужил свое собственное имя по
— — — нескольким причинам. — Элементарная ячейка памяти имеет длину 8бит.
— — — При каждом обращении к паамяти IBM PC дляпроцессора запрашивыается
— — — ровно 8 бит информации. — Как мы увидим позднее, отдельные команды
— — — 8088 могут производить арифметические илогические опреации над
— — — группами в 8 бит. — Байт — наименьшая еденица информации, скоторой
— — — 8088 может манипулировать непосредственно. — 8088 может одной
— — — операцией сложить два 8-битовых числа, ноне может этого проделать
— — — с 4-битовыми. — Кроме того IBM PC использует байт для представления
— — — одного символа. — Используя один байт можно представить 256 (2**8)
— — — отдельных элементов, таких, например, какграфические символы. — В
— — — следующем пункте мы рассмотрим наборсимволов IBM PC.

— — — — — Поскольку байт является элементом памяти,мы должны иметь сред-
— — — ство определения в ней отдельныхбайтов. — Задача ассемблера
— — — фактически и будет состоять в определениисодержимого памяти для
— — — выполнения программы. — В основном исходный текст ассемблера состоит
— — — из выполняемых инструкций. — — — — — Но для помещения определенного значения
— — — в байт памяти ассемблер располагаетспециальным механизмом —
— — — определением байта (dtfine byte) илипсевдокомандой DB. — DB не
— — — является командой 8088. — Это команда ассемблеру поместить в память
— — — определенные значения. — Псевдокоманда

— — — — — DB — -23

— — — дает ассемблеру задание сохранитьдесятичное значение 23 в текущий
— — — байт памяти. — А оператор

— — — — — DB — -1,2,3,4

— — — сохраняет значения от 1 до 4 по четыремпоследовательным адресам в
— — — памяти.

— — — — — В программах на языке ассемблера операторDB применяют для
— — — определения областей памяти. — В предыдущих примерах мы размещали в
— — — памяти определенные значения. — Это может быть поисковая таблица или
— — — информация для перекодировки чисел. — Мы составим несколько
— — — примеров, в которых используетсяопределенная подобным образом
— — — информация. — Кроме того встречаются ситуации, когда программе
— — — требуется место в памяти для сохраненияданных в процессе
— — — исполнения. — Во время ассемблирования программы содержимое этого
— — — участка памяти неизвестно: — — — — — собственно, это содержимое будет
— — — переменным во время исполненияпрограммы. — Инструкция

— — — — — DB — -?

— — — сообщает ассемблеру о необходимостивыделить один байт памяти, не
— — — изменяя его содержимое. — В Этом байте может оказаться любое
— — — случайное число, которое будет тамоставаться пока какая-либо
— — — команда не поместит в него определенноезначение.

— — — — — Нам может потребоваться выделить и большоеколичество байтов,
— — — например, чтобы оставить область памятидля массива. — Мы можем это
— — — сделать так:

— — — — — DB — -25 DUP(?)

— — — Этой инструкцией выделяется 25 байтпамяти. — Ключевое слово DUP в
— — — этой псевдокоманде означает повторить(duplicate). — — — — — Число 25
— — — указывает, сколько раз ассемблер повторитопределение байта в
— — — памяти. -Значение или значения в скобках ассемблер использует для
— — — инициализации этой области памяти. — — — В данном случае это значение
— — — неизвестно. — Для инициализации области с одним и тем же значением
— — — выражение, например,

— — — — — DB 17 DUP(31)

— — — создает 17 байт со значением 31каждый. — Наконец,

— — — — — DB 30 DUP(1,2,3,4,5)

— — — выделяет 30 байт со значениями от 1 до 5 впервых пяти байтах. Сле-
— — — дующие пять байт тоже имеют значения от 1до 5 и т.д. — Ассемблер
— — — повторяет значения в скобках пока не будутзаполнены все 30 байт.

— — — — — И
ногда нам хочется обратиться к набору битменьшему чем байт.
— — — Принят размер 4 бит. — В 4 битах мы можем представить все 10
— — — десятичных цифр. — Для значений такого размера мы будем
— — — пользоваться термином»полубайт». — Этот термин (воригинале
— — — «nybble» — прим. — перев.), который достиг широкого применения,
— — — позволяет нам говорить о данных, меньших,чем «байт».

— — — — — Термин «Слово» имеет дляпрограммиста значение отличное от
— — — принятого в языке. — В применении к ЭВМ слово — это наибольшее
— — — количество бит, с которым машина можетобращаться как с единым
— — — элементом. — — — Длясистемы IBM/370 слово составляет 32 бит, а для
— — — семейства Intel 8088 — 16. — — — — — Поэтому термин «слово» имеет
— — — неопределенный смысл, пока не известнаконкретная машина.

— — — — — Размер слова в 8088 составляет 16 бит. — — — Этот размер
— — — определяется каналами передачи данных впроцессоре. — Над числами до
— — — 16 бит 8088 может призводить операцииодной командой. — Любое более
— — — крупное число потребует более однойкоманды. — Существуют команды,
— — — которые манипулируют и с меньшими объемамипамяти, как, например,
— — — команда сложения двух 8-битовыхчисел. — Несколько инструкций
— — — позволяют манипулировать и с отдельнымибитами. — Но для сложения
— — — двух 32-битовых чисел потребуется уже двекоманды, складывающие по
— — — 16 бит каждая. — Наибольшее число над которым мы можем производить
— — — элементарные операции типа сложения имеетразмер машинного слова.

— — — — — Аналогично команде определения байтапамяти, существует и
— — — инструкция для определения словапамяти. — Оператор ассемблера DW
— — — означает определение слова (defieword). — Первое утверждение DW на
— — — Фиг. -2.10 определяет 16 бит памяти со значением 1234H. — Как и в
— — — случае с байтами, мы можем использоватьоператор DUP для
— — — определения больших областей памяти,разбитых на слова. — И точно
— — — также, для обозначения неинициируемыхобластей можно использовать
— — — операнд «?».

— — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — 10/29/88
— — — — — — — — — — — -16:10:44
— — — — — — — — — -Фиг. 2.10 Примеры определенияслов — — — — — — — — — — — — — — Page — — — — — — — 1-1

— — — — — — — — — — — — — — -1 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — -2 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 2.10 Примеры определения слов
— — — — — — — — — — — — — — -3
— — — — — — — — — — — — — — -4 0000 — 1234 — — — — — — — — — — — — — — — — — DW — — — — — 1234H
— — — — — — — — — — — — — — -5 0002 — 0003[ — — — — — — — — — — — — — — — — — — — — — — DW — — — — — 3 DUP(5678H)
— — — — — — — — — — — — — — -6 — — — — — — — — — — — 5678
— — — — — — — — — — — — — — -7 — — — — — — — — — — — — — — — — — — — — — — — ]
— — — — — — — — — — — — — — -8
— — — — — — — — — — — — — — -9 0008 — ???? — — — — — — — — — — — — — — — — — DW — — — — — ?
— — — — — — — — — — — — — -10
— — — — — — — — — — — — — -11 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Фиг. 2.10 Примеры определения слов

— — — — — Одна из обескураживающих черт 8088 — этоего манера хранения
— — — слов в памяти. — На Фиг. — 2.10, хоть мы иопределяли значение слова
— — — как 1234Н, ассемблер сохранит в памятизначение 3412Н, по крайней
— — — мере так это выглядит. — Посмотрим, как это получается.

— — — — — Допустим, слово 1234Н сохранено в ячейках100 и 101. — 8088 тре-
— — — бует, чтобы ассемблер поместил значение34Н в ячейку 100, а 12Н — в
— — — 101. -Легче всего запомнить это так, что ассемблер сохраняет
— — — младший байт слова в ячейку памяти сменьшим адресом, а старший
— — — байт — с большим. — На Фиг. — — — — — 2.11показано, содержимое памяти после
— — — того, как ассемблер поместит в нее данные. — Пока вы не привыкнете к
— — — такому методу, вам

— — — — — — — — — — — — — — — — — Адрес — — Значение
— — — — — — — — — — — — — — —————————
— — — — — — — — — — — — — — — — — — . — — — — — — — — .
— — — — — — — — — — — — — — — — — — . — — — — — — — — .
— — — — — — — — — — — — — — — — — -100 — — — — — — 34Н
— — — — — — — — — — — — — — — — — -101 — — — — — — 12Н
— — — — — — — — — — — — — — — — — — . — — — — — — — — .
— — — — — — — — — — — — — — — — — — . — — — — — — — — . — — — — — -Фиг. 2.11 Представление
— — — — — — — — — — — — — — ————————— — — — — — — — — в памяти -DW 1234H

— — — будет казаться, что все в памяти наоборот. — К счастью, если вы не
— — — будете смешивать операции над байтами инад словами одной и той же
— — -области в памяти, вам незачем беспокоиться об этом неожиданном
— — — «переключении» байтов. — Программа может спокойно работать со
— — — словами, а 8088 всегда разберется что кчему. — Только в том случае,
— — — если вы захотите обратиться к конкретномубайту какого-либо слова,
— — — вам придется иметь дело с фактическимспособом хранения слов в
— — — памяти семейства 8088. — Ассемблер обращает внимание на структуру
— — — слов в распечатке программы, то есть изображаетслова в объектном
— — — коде как слова, а не как байты, которыевыглядели бы перевернутыми
— — — наоборот. -Вы сможете различать слова благодаря тому, что ассемблер
— — — записывает их шестнадцатеричными цифрамибез пробелов.

— — — — — Однако остался еще один тип данных,который постоянно использу-
— — — ется программах на языке ассемблера длямикропроцессора 8088. — Это
— — — — двойное слово, значение в 32 битадлиной. — Программы пользуются
— — — двойными словами для хранения адресов иочень больших чисел. — Чтобы
— — — определить область, содержащую значениедвойного слова, оператор
— — — ассемблера

— — — — — DD — -значение

— — — генерирует поле размером в 4 байта. — DD означает операцию выделения
— — — двойнго слова (define doubleword). — — — Так же как в случае с DW —
— — — опратором, ассемблер размещает в памятимладший байт ниже, а
— — — старший — выше. — В таком же порядке сохраняются средние два байта.
— — — Аналогично операторам DB и DW вы можетепользоваться функцией DUP и
— — — применять операнд «?» для тогочтобы оставить область
— — — неопределенной.

— — — — — Ассемблер может генерировать и другиеструктуры данных. — Их об-
— — — суждение мы отложим, пока не дойдем донекоторых свойств макроас-
— — — семблера и сопроцессора 8087. — Остальные структуры данных
— — — используются в программах прежде всего дляочень больших чисел в
— — — Числовом сопроцессоре или для определениясобственных структур
— — — данных.

Категория: Программирование на Ассемблере | Дата: 19.03.13

Меню раздела
Блок