Mov es, ax


Mov ax, seg mas

Codeseg segment

Dataseg end

Mas dw 0

Dataseg segment

Jmp m1

Code

Mov si,2

Mas dw 48, 56, 67

……………………

mov ax, mas[SI] ;Пересылка слова 56 по адресу mas+(si) в регистр ax

 

v Оператор переопределения типа, ptr.

Тип может принимать значения:

байт (byte), word (слово), dword (двойное слово), qword (8 байт), tbyte (10 байт).

near и far – определяет близкий или дальний переход.

 

Форат оператора

<Тип> ptr <Выражение>

Пример.

var dd 0abcd1234h ; двойное слово в сегменте данных

mov al, byte ptr var+1 ;в регистр al загрузить байт (число cdh)

 

v Оператор переопределения сегмента (двоеточие).

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

 

Фрагмент программы:

…….

ind db 5 ; поле данных в сегменте команд

 

m1:

mov al, cs:ind ;адрес начала сегмента кода в регистре cs

;в регистр al загрузить число 5.

 

v Оператор получения сегментной составляющей адреса - seg.

Оператор возвращает сегментный адрес для выражения в качестве которого может выступать: метка, переменная, имя сегмента, имя группы сегментов, некоторое символическое имя.

Пример:

mov ds, ax ;в ds загружается адрес начала сегмента данных

 

v Оператор получения смещения в сегменте памяти некоторого выражения – offset.

Смещение – это адрес операнда относительно начала сегмента.

 

Пример

.data ; начало сегмента данных

mas dw 5 ; в сегменте данных число 5

 

.code ; начало сегмента кода

mov ax, seg mas ; запись в ax начало сегмента данных

mov dx, offset mas ; в dx загружаем смещение

mov bx, es:[dx] ; загрузили в bx число 5

 

Типы данных, которые поддерживает ассемблер:

1) Байт (byte) – 8 разрядов, младший разряд справа

2) Слово (word) – 2 байта, 16 разрядов. Делится на 2 части: справа младший байт, слева – старший байт. Адресом слова в памяти является адрес младшего байта.

3) Двойное слово (dword). Состоит из младшего и старшего слов. Адресом является адрес младшего слова.

МП кроме разрядности поддерживает логическую интерпретацию типов:

a) Целый тип без знака

Байт: 0….255

b) Целый тип со знаком

Байт: -128….+127

Слово: -32768…+32768

c) Цепочка – непрерывный набор байтов, слов или двойных слов (максимальная длина до 4 Гбайт).

d) Битовое поле – непрерывная последовательность бит, в которой каждый бит является независимым и может рассматриваться как независимая переменная (максимальная длина 32 бита).

 

Ввод информации с клавиатуры и вывод ее на экран осуществляется в символьном виде. Кодирование этой информации производят согласно таблице. Каждый символ кодируется байтом.

При вводе чисел в программу необходимо преобразование кода символа в двоичный формат. При выводе результатов необходимо выполнить обратное преобразование (чисел в символьные коды).

                   
         


Символ Код ASCII Двоичное представление Разность

0 30h 0000 30h

: : : :

9 39h 1001 30h


Для преобразования в двоичный код достаточно вычесть из кода ASCII 30h (для чисел от 0 до 9)

 

А(а) 41h(61h) 1010 37h(57h)

: : : :

F(f) 46h(66h) 1111 37h(57h)


Программа должна опознать, в каких границах находится код ASCII данного числа и в зависимости от принятого решения, вычесть из кода ASCII либо 37h, либо 57h.