IBM PC

т.е. из неравенства код('0')<=код(c)<=код('9') следует, что c - цифра;

IBM PC

Информация

Компьютеры, программирование

Другие материалы по предмету

Компьютеры, программирование

Сдать работу со 100% гаранией
ается умножения и деления знаковых и беззнаковых чисел, то

они выполняются по разным алгоритмам, разными машинными командами. Од-

нако и у этих операций есть ряд особенностей. При умножении байтов

(слов) первый сомножитель обязан находиться в регистре AL (AX), ре-

зультатом же умножения является слово (двойное слово), которое зано-

сится в регистр AX (регистры DX и AX). Тем самым при умножении сохра-

няются все цифры произведения. При делении байтов (слов) первый опе-

ранд (делимое) должен быть словом (двойным словом) и обязан находиться

в регистре AX (регистрах DX и AX). Результатом деления являются две

величины размером в байт (слово) - неполное частное (div) и остаток от

деления (mod); неполное частное записывается в регистр AL (AX), а ос-

таток - в регистр AH (DX).

1.2.3 Представление символов и строк

На символ отводится один байт памяти, в который записывается код

символа - целое от 0 до 255. В ПК используется система кодировки ASCII

(American Standard Code for Information Interchange). Она, естествен-

но, не содержит кодов русских букв, поэтому в нашей стране применяется

некоторый вариант этой системы с русскими буквами (обычно это альтер-

нативная кодировка ГОСТа).

Некоторые особенности этих систем кодировки:

- код пробела меньше кода любой буквы, цифры и вообще любого графи-

чески представимого символа;

- коды цифр упорядочены по величине цифр и не содержат пропусков,

т.е. из неравенства код('0')<=код(c)<=код('9') следует, что c - цифра;

- коды больших латинских букв упорядочены согласно алфавиту и не со-

держат пропусков; аналогично с малыми латинскими буквами;

- (в альтернативной кодировке ГОСТа) коды русских букв (как больших,

так и малых) упорядочены согласно алфавиту, но между ними есть коды

других символов.

Строка (последовательность символов) размещается в соседних байтах

памяти (в неперевернутом виде): код первого символа строки записывает-

ся в первом байте, код второго символа - во втором байте и т.п. Адре-

сом строки считается адрес ее первого байта.

В ПК строкой считается также и последовательность слов (обычно это

последовательность целых чисел). Элементы таких строк располагаются в

последовательных ячейках памяти, но каждый элемент представлен в "пе-

ревернутом" виде.

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

Адрес - это порядковый номер ячейки памяти, т.е. неотрицательное

целое число, поэтому в общем случае адреса представляются так же, как

и беззнаковые числа. Однако в ПК есть ряд особенностей в представлении

адресов.

Дело в том, что в ПК термином "адрес" обозначают разные вещи. Час-

то под адресом понимается 16-битовое смещение (offset) - адрес ячейки,

отсчитанный от начала сегмента (области) памяти, которому принадлежит

эта ячейка. В этом случае под адрес отводится слово памяти, причем ад-

рес записывается в "перевернутом" виде (как и числа-слова вообще).

В другом случае под "адресом" понимается 20-битовый абсолютный ад-

рес некоторой ячейки памяти. В силу ряда причин в ПК такой адрес зада-

ется не как 20-битовое число, а как пара "сегмент:смещение", где "сег-

мент" (segment) - это первые 16 битов начального адреса сегмента памя-

ти, которому принадлежит ячейка, а "смещение" - 16-битовый адрес этой

ячейки, отсчитанный от начала данного сегмента памяти (величина

16*сегмент+смещение даетабсолютный адрес ячейки). Такая пара записы-

вается в виде двойного слова, причем (как и для чисел) в "переверну-

том" виде: в первом слове размещается смещение, а во втором - сегмент,

причем каждое из этих слов в свою очередь представлено в "переверну-

том" виде. Например, пара 1234h:5678h будет записана так:

---------------------

| 78 | 56 | 34 | 12 |

---------------------

смещение сегмент

1.2.5 Директивы определения данных

Для того чтобы в программе на MASM зарезервировать ячейки памяти

под константы и переменные, необходимо воспользоваться директивами оп-

ределения данных - с названиями DB (описывает данные размером в байт),

DW (размером в слово) и DD (размером в двойное слово). (Директивы, или

команды ассемблеру, - это предложения программы, которыми ее автор со-

общает какую-то информацию ассемблеру или просит что-то сделать допол-

нительно, помимо перевода символьных команд на машинный язык.)

В простейшем случае в директиве DB, DW или DD описывается одна

константа, которой дается имя для последующих ссылок на нее. По этой

директиве ассемблер формирует машинное представление константы (в час-

тности, если надо, "переворачивает" ее) и записывает в очередную ячей-

ку памяти. Адрес этой ячейки становится значением имени: все вхождения

имени в программу ассемблер будет заменять на этот адрес. Имена, ука-

занные в директивах DB, DW и DD, называются именами переменных (в от-

личие от меток - имен команд).

В MASM числа записываются в нормальном (неперевернутом) виде в cи-

стемах счисления с основанием 10, 16, 8 или 2. Десятичные числа запи-

сываются как обычно, за шестнадцатиричным числом ставится буква h (ес-

ли число начинается с "цифры" A, B, ..., F, то вначале обязателен 0),

за восьмиричным числом - буква q или o, за двоичным числом - буква b.

Примеры:

A DB 162 ;описать константу-байт 162 и дать ей имя A

B DB 0A2h ;такая же константа, но с именем B

С DW -1 ;константа-слово -1 с именем С

D DW 0FFFFh ;такая же константа-слово, но с именем D

E DD -1 ;-1 как двойное слово

Константы-символы описываются в директиве DB двояко: указывается

либо код символа (целое от 0 до 255), либо сам символ в кавычках (оди-

нарных или двойных); в последнем случае ассемблер сам заменит символ

на его код. Например, следующие директивы эквивалентны (2A - код звез-

дочки в ASCII):

CH DB 02Ah

CH DB '*'

CH DB "*"

Константы-адреса, как правило, задаются именами. Так, по директиве

ADR DW CH

будет отведено слово памяти, которому дается имя ADR и в которое запи-

шется адрес (смещение), соответствующий имени CH. Если такое же имя

описать в директиве DD, то ассемблер автоматически добавит к смещению

имени его сегмент и запишет смещение в первую половину двойного слова,

а сегмент - во вторую половину.

По любой из директив DB, DW и DD можно описать переменную, т.е.

отвести ячейку, не дав ей начального значения. В этом случае в правой

части директивы указывается вопросительный знак:

F DW ? ;отвести слово и дать ему имя F, ничего в этот байт не

;записывать

В одной директиве можно описать сразу несколько констант и/или пе-

ременных одного и того же размера, для чего их надо перечислить через

запятую. Они размещаются в соседних ячейках памяти. Пример:

G DB 200, -5, 10h, ?, 'F'

Имя, указанное в директиве, считается именующим первую из констант.

Для ссылок на остальные в MASM используются выражения вида <имя>+<це-

лое>; например, для доступа к байту с числом -5 надо указать выражение

G+1, для доступа к байту с 10h - выражение G+2 и т.д.

Если в директиве DB перечислены только символы, например:

S DB 'a','+','b'

тогда эту директиву можно записать короче, заключив все эти символы в

одни кавычки:

S DB 'a+b'

И, наконец, если в директиве описывается несколько одинаковых кон-

стант (переменных), то можно воспользоваться конструкцией повторения

k DUP(a,b,...,c)

которая эквивалентна повторенной k раз последовательности a,b,...,c.

Например, директивы

V1 DB 0,0,0,0,0

V2 DW ?,?,?,?,?,?,?,?,?,'a',1,2,1,2,1,2,1,2

можно записать более коротко таким образом:

V1 DB 5 DUP(0)

V2 DW 9 DUP(?), 'a', 4 DUP(1,2)

1.3. ПРЕДСТАВЛЕНИЕ КОМАНД. МОДИФИКАЦИЯ АДРЕСОВ.

1.3.1 Структура команд. Исполнительные адреса

Машинные команды ПК занимают от 1 до 6 байтов.

Код операции (КОП) занимает один или два первых байта команды. В

ПК столь много различных операций, что для них не хватает 256 различ-

ных КОПов, которые можно представить в одном байте. Поэтому некоторые

операции объединяются в группу и им дается один и тот же КОП, во вто-

ром же байте этот КОП уточняется. Кроме того, во втором байте указыва-

ются типы и способ адресации операндов. Остальные байты команды указы-

вают на операнды.

Команды могут иметь от 0 до 3 операндов, у большинства команд -

один или два операнда. Размер операндов - байт или слово (редко -

двойное слово). Операнд может быть указан в самой команде (это т.н.

непосредственный операнд), либо может на

Лучшие

Похожие работы

<< < 1 2 3 4 5 6 7 > >>