Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
43
Добавлен:
15.04.2015
Размер:
1.15 Mб
Скачать

Примеры работы с битовыми полями

Вставка битовой строки

Вставить в поле определенное число бит, начиная с некоторой позиции.

В примере выполняется вставка 16 бит, начиная с 8 разряда.

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

.data

pole1 dd 22000022h ; вместо нулей, начиная с 8 разряда

pole2 dd 55550000h ; вставить 5555 из pole2

.code

…….

mov eax,pole2

ror pole1,8 ; pole1=22220000

shr pole1,16 ; pole1=00002222

shld pole1,eax,16 ; pole1=22225555

rol pole1,8 pole1=22555522

…………

Извлечение битовой строки

Задача: извлечь из битовой строки 16 бит, начиная с позиции 8.

Пример фрагмента программы

.data

str dd 22555522h

.code

……….

rol str,8 ;str=55552222

mov ebx,str ;ebx=55552222

shld eax,ebx,16 ;eax=00005555

ror str,8 ;str=22555522

  1. Команды преобразования данных

Применяются для ввода с клавиатуры цифровых данных.

xlat <адрес таблицы>

или

xlatb

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

Адрес байта в таблице, который будет производить замещение содержимого AL, определяется операндом [BX+AL].

Перед выполнением команды замещения адрес строки (таблицы) должен быть загружен в регистр BX, а регистр AL – относительный адрес байта в строке. Операнд Адрес таблицы не является обязательным.

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

Фрагмент таблицы кодов ASCII

Символ

0

1

2

3

4

5

6

7

8

9

10

Дес. код

символа

48

49

50

51

52

53

54

55

56

57

58

mes db “Введите число с клавиатуры”,$

tab db 48 dup (0), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

lea bx, tab ; в bx загружается адрес таблицы

mov dx, offset mes

mov ah, 9h ; вывод на экран сообщения

int 21h

Xor ax, ax ; очистка регистра ax

mov ah, 1h

Int 21h ;ожидание вода с клавиатуры

xlatb

  1. Команды обработки строк

    1. Команды пересылки строк

movs <адрес приемника>, <адрес источника>

movsb – пересылка байт

movsw – пересылка слов

movsd – пересылка двойных слов

Первая команда осуществляет копирование байт, слов, двойных слов в зависимости от атрибутов идентификаторов.

Число пересылаемых элементов должно быть загружено в регистр cx или ecx. Адрес источника должен быть загружен в пару DS:SI , а приемника – в регистры ES:DI.

Пример:

.data

source db “строка”

dest db 6 dup (“ “)

.code

assume ds:@data, es :@data

main:

mov ax, @data

mov ds, ax

mov es, ax

cld ; индексация адресов в сторону увеличения

lea si, source ; в si – адрес источника информации

lea di, dest ; в di – адрес приемника

mov cx, 6 ; переслать из источника в приемник 6 байт

rep movs dest, source

lea dx, dest

mov ah, 09h ;вывод на экран

int 21h

mov ax, 4с00h ; возврат в среду DOS

int 21h

end main