Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМСиС.docx
Скачиваний:
23
Добавлен:
22.04.2019
Размер:
278.98 Кб
Скачать

22.Процессор х86: инструкция деления.

Однооперандное деление симметрично по отношению к однооперандному умножению и имеет мнемокод div для целочисленного беззнакового деления и мнемокод idiv для целочисленного знакового деления. Необходимо следить за тем, чтобы числитель всегда имел вдвое большую разрядность, чем знаменатель.

Например:

unsigned int с,d;

short s,t;

asm{

mov ax, s

cwd

idiv t // ax содержит частное, а dx – остаток целочисленного

// деления s/t

mov eax, c

mov edx, 0

idiv d // eax содержит частное, а edx – остаток целочисленного

// деления c/d

}

Если в результате деления частное выходит за пределы разрядной сетки приемника, процессор генерирует исключение «деление на 0».

23.Процессор х86: операции расширения знакового бита.

Команды преобразования типов данных (расширения знакового бита)

CBW - преобразование байта в слово

Если (AL) < 80H, то (AH) <----- 0

Если (AL) >=80H, то (AH) <----- FFH

CWD - преобразование слова в двойное слово

Если (AX) < 8000H, то (DX) <----- 0

Если (AX) >=8000H, то (DX) <----- FFFFH

CWDE - преобразование слова в двойное слово

Если (AX) < 8000H, то (старшее слово EAX) <----- 0

Если (AX) >=8000H, то (старшее слово EAX) <----- FFFFH

CDQ - преобразование двойного слова в учетверенное слово

Если (EAX) < 8000H, то (EDX) <----- 0

Если (EAX) >=8000H, то (EDX) <----- FFFFH

NEG - отрицание

(Операнд) <----- - (Операнд)

24.Процессор х86: поразрядные логические инструкции, использование масок.

Логические операции осуществляют поразрядное логическое сложение, умножение, сложение по модулю 2, а также поразрядную инверсию для одно-, двух- и четырехбайтовых операндов. И имеют мнемокоды or, and, xor и not соответственно. Операции логическое сложение, умножение, сложение по модулю 2 - двухоперандные, а операция инверсии – однооперандная. Данные операции необходимы в первую очередь не для выполнения операций булевой алгебры, а для работы с регистрами состояния и управления периферийных устройств. В процессе обмена данными с периферией приходится постоянно опрашивать регистры состояния и проверять состояние отдельных битов, указывающих на готовность к приему или подтверждение приема, а также устанавливать или сбрасывать отдельные биты в регистре управления, например для запроса на передачу и сопровождения данных. При этом важно проверить состояние строго определенного бита, независимо от состояния других, а также установить или сбросить строго определенный бит, не изменяя состояние других битов. Для этих целей совместно с логическими операциями используются маски. Маска – это константа, позволяющая работать только с заданными битами. Остальные биты при этом невидимы, т.е. «замаскированы».

Например:

asm{

or al, 00001000b // в регистре al установлен бит № 3

and dl, 11011111b // в регистре dl сброшен бит № 5

and al, 00010000b // проверка состояния бита № 4 в регистре al

// если бит установлен, то результат ненулевой

// если сброшен, то результат - нулевой

// т.е. результатом проверки является состояние

// флага z (нуля)

}