Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ЛЕКЦИЯ 8. Различают следующие команды работы с битами




ОСНОВНЫЕ КОМАНДЫ РАБОТЫ С БИТАМИ

Различают следующие команды работы с битами

1. Логические операции

2. Сдвиги

Эти команды выполняются над битами байта или слова. По-этому они называются побитовые.

ЛОГИЧЕСКИЕ КОМАНДЫ

В ассемблере принято следующее правило - если содержимое бита=0 это означает false.

ТАБЛИЦА: Основные операции булевой алгебры

В ассемблере побитовые команды применяются к каждому биту байта или слова отдельно.

ТАБЛИЦА: Логика работы побитовых команд

 

Синтаксис Логика Флаги        
    OF SF ZF PF CF
AND пр,ист Пр=пр and ист   + + +  
Test -||- Пр and ист   + + +  
OR -||- Пр=пр or ист   + + +  
XOR -||- -||- XOR -||-   + + +  
NOT приемн Пр= не пр - - - - -

 

Маскирование разрядов

<источник> в логических командах с 2мя операндами называется маска. Значения маски обычно задаются обычно в 2 или 16 коде. Оно означает, что в соответствующем разряде установлена 1.

ТАБЛ: Значение маски

 

Номер бита Значение маски hex Номер бита Значение маски hex
       
       
       
       
       
       
       
       

ЛАБА 3

Создание.com файла

В ОС Windows основными характеристиками исполняемого файла типа.com является:

1. Длина файла ограничивается длиной 1 сегмента и не может превышать 64 кб

2. Отсутвуют сегмент стека и сегмент данных. Все данные программы находятся в сегменте кода

3. Все процедуры должны иметь атрибут NEAR т.е. модель памяти TINY

4. В программе необходимо установить значение начального смещения равного 100h -> 256 байт это выполняется директивой ORG 100h

5. Нет необходимости специально готовить стек, это делает ОС

6. Все данные и зарезервированную память необходимо размещать в виде блока в начале программы кода или после него, лучше перед; используется команда jmp для перехода к командам

7. Этапы компиляции

a. Создание.obj и листинга

b. Создание исполнительного файла.com tlink -t laba.obj -> laba2.com

 

;laba2.asm

.model TINY

.code

ORG 100h

Start jmp SHORT main

;==============DATA================

var1 dw 3

var2 dw 4

;==============CODE================

main proc near

mov ax,var1

mov bx,var2

add ax,bx

ret

main endp

end Start

При помощи системного отладчика DEBUG загружаем файл в ОЗУ (DEBUG laba2.com). Выполняем команду d 100 (Выводит дамп памяти который начинается с <CS>:0100h). При помощи листинга найти в дампе памяти коды созданной вами программы. Командой отладчика r вывести содержимое регистра. Затем использовать команду t - трассировка и проследить за регистрами ax и bx. q - quit. Создать ехе.

Использование команд логического умножения AND и TEST

Результат поразрядного логического умножения дает значение истина только в одном случае: если соответствующие разряды приемника и маски тоже установлены в 1. По этому операция эта операция используется для проверки установленных разрядов в 1.

Команда TEST используется для логического сравнения операндов с последующим условием перехода.

Пример:

Пусть в результате каких-то вычислений сформировалась целочисленная переменная х, требуется проверить содержимое 1, 2, 10, 15 битов. Проверить биты можно все сразу или по разряду. Проверку всех сразу выполним в программе на СРР побитовую проверку на ассемблере.

Бит1 0002

Бит2 0004

Бит10 0400

Бит15 8000

Результат 8406

#include <iostream.h>

int k, x=0xFA01;

void main()

{

cout<<"\n==Incoming value==\n"<<"x="<<hex<<x<<"(hex);"<<dec<<x<<"(dec)\n";

k=x&8406;

cout<<"\n Logic Multiplication Result \n"<<"k="<<hex<<k<<"(hex);"<<dec<<k<<"(dec)\n";

}

OUT:

x=FFFFFA01(hex); -1535(dec);

Logic Multiplication Result

FFFF8000(hex); -32768(dec);

FA01->1111 1010 0000 0001

8406->1000 0100 0000 0110

1000 0000 0000 0000 -> 8000 hex

Пусть начальное значение

х=FFFF CFC7 (hex) -> -12345(dec)

Результат FFFF8406(hex); -31738(hex)

Число -12345 в двоичном виде имеет единицы в битах 1,2,10,15

Код на ассеблере

Public ex AND

ex AND proc far

;test bit 1

mov ax,x

AND ax,Ox0002

mov k,ax

;test bit 2

mov ax,x

AND ax,Ox0004

mov k,ax

;test bit 10

 

ret

ex AND endp

Использование команд логического сложения OR

Результат поразрядного логического сложения дает 0 только в случае если соответствующие разряды приемника или маски = 0

Использование команды логического сложения по модулю XOR

Эта команда дает значение 0 если соответствующие приемника и маски ОДИНАКОВЫЕ. Истина (1) получается если соответствующие разряды приемника и маски разные.

Команда логического отрицания NOT

Используется для инверсии.

k=~x; поразрядное НЕ

k=!x; НЕ

КОМАНДЫ СДВИГА

Это другая разновидность побитовых команд. Они перемещают биты в поле операнда "приемник" либо влево либо вправо.

Имя_команды приемник, источник

Сдвиг:

1. Линейный

a. Арифметический

b. Логический

2. Цикличный

Допустимые сочетания операндов для команд сдвигов

 

Приемник Источник(счетчик) Пояснение
R8   Сдвиг на 1 разряд
R16   Сдвиг на 1 разряд
Mem8   Сдвиг на 1 разряд
Mem16   Сдвиг на 1 разряд
R8 CL Сдвиг указан в CL
R16 CL Сдвиг указан в CL
Mem8 CL Сдвиг указан в CL
Mem16 CL Сдвиг указан в CL

 

R8 Im8 Сдвиг на 1 разряд
R16 Im8 Сдвиг на 1 разряд
Mem8 Im8 Сдвиг на 1 разряд
Mem16 Im8 Сдвиг на 1 разряд

 

.................

Линейные команды сдвига добавляют ноль в младший разряд при сдвиге влево либо в старший разряд при сдвиге вправо. При сдвиге вправо старший разряд различается для знаковых или без знаковых чисел.

Удаляемые из операнда разряды последовательно перемещаются в регистр флагов CF

Эти команды позволяют очень быстро выполнять деление операндов сдвиг вправо и умножение - сдвиг влево на степени числа 2

 

SAL - Shift Arithmetical operand Left

SAR - Shift Arithmetical operand Right

Применяются для знаковых целочисленых данных

Логика работы команды SAL

 

CF Знаковый бит Инф. Разряд Мл.разряд  
  <---- <------------- --------------  

 

 

Логика работы команды SAR

Таблица

Пример

mov al,58

sal al,1;сдвиг влево на 1 разряд

sal al,3

Таблица

Выводы:

· Изначально в регистре al хранилось число 58

· Сдвиг al=116

· Следующий сдвиг НЕКОРЕКТЕН АХАХАХА т.к. результат не помещается в байт

· При использовании сдвига следует четко представлять диапазон допустимых значений в поле операнда

· На знаковый бит у команды sal нет никакой реакции

КОМАНДЫ ЛОГИЧЕСКОГО СДВИГА SHL,SHR

Предназначен для работы с без знаковыми целыми числами. Абсолютно одинаковы с командами SAL и SAR

КОМАНДЫ ЦИКЛИЧЕСКОГО СДВИГА

В отличии от арифметического и логического сдвига эти команды сохраняют значение сдвигаемых бит. Команды делятся на 2 группы:

· Команды простого циклического сдвига

o ROL

o ROR

· Команды циклического сдвига через флаг переноса CF

o RCL

o RCR

 

Логика работы команды ROL

Таблица

Логика работы команды RCR

Таблица

Команды передачи управления

Команды безусловной передачи управления

Адрес следующей выполняемой команды находится в регистре IP (Instruction Pointer) команды передачи управления позволяют нарушить естественную последовательность команд посредством изменения содержимого регистра IP.

В ассемблере есть 3 группы базовых команд передачи управления

· Команды безусловного перехода на определенный адрес в памяти

· Команды перехода в зависимости от проверки результатов условия

· Команды организации циклических вычислений

Команды передачи управления не изменяют значения флагов

КОМАНДЫ БЕЗУСЛОВНОГО ПЕРЕХОДА

· JMP. Аналог высокоуровнего goto метка. JMP метка. Метка помечает команду на которую нужно передать управление. Метка может иметь 2 атрибута

o NEAR(deafult). <IP>=<IP>+смещение к команде. Смещение не более 2х байт. Команда на которую указывает метка может распологаться в сторону больших адресов. JMP FORWARD/JMP BACK. Можно с экономить 1 байт если задать короткий переход (1 байтовое смещение) JMP SHORT метка.

o FAR. Безусловный переход осуществляется в другой сегмент. В этом меняется не только содержимое регистра IP, но и изменяется содержимое регистра CS. <CS>=<CS>+Code

· CALL.

o Идейно команда call аналогична команде JMP, но команда call вызывает процедуру и возвращает к точке прыжка. Адрес начальной точки сохраняется в стеке. CALL имя_процедуры. Если у процедуры есть параметны то они передаются в стек до вызова процедуры. Разные языки по разному работают с параметрами процедуры. Для учета этого команду CALL следует использовать в расширеном синтаксисе.

CALL имя_процедуры, язык, параметр1...параметр N

 

§ NEAR.

PUSH IP

<IP>=<IP>+смещение

§ FAR.

PUSH IP

PUSH CS

<IP>=<IP>+смещение

<CS>=<CS>+Code

· RET. Команда возврата в точку вызова из процедуры. Эта команда команда обратная команде CALL она обеспечивает возврат управления вызывающей команде и если нужно очистку стека на величину 16-ти разрядной константы. RET [Im16]




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 427; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.051 сек.