Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л.р.1-12.СПРГ-1(40, укр).doc
Скачиваний:
5
Добавлен:
27.08.2019
Размер:
2.33 Mб
Скачать

3.2. Операції із прапорами процесора:

clc установка CF=0

cld установка DF=0

cli установка IF=0

lahf завантаження регістра AH з регістра прапорів: установлюють біти 7, 6, 4, 2 і 0 за значеннями прапорів SF ZF AF PF CF.

sahf запис регістра AH у регістр прапорів: установлює прапори SF ZF AF PF CF по битках 7, 6, 4, 2 і 0 регістри AH.

stc установка CF=1

std установка DF=1

sti установка IF=1

3.3 Команди розповсюдження знаку

Для знакових даних існують команди розповсюдження знака застосовуються при вирівнюванні операндів по довжині. Інструкції перетворення типів конвертують байти в слова, слова в подвійні слова і подвійні слова в четверні слова. Ці перетворення можна зробити, використовуючи знакове або нульове розширення. Знакове розширення заповнюють додаткові біти більшого операнда значенням біта знака меншого операнда, нульове розширення просто забиває їх нулями.

cwd і cdq подвоюють розмір регістра АХ або ЕАХ відповідно і зберігає додаткові біти в регістр DX або EDX. Перетворення робиться, використовуючи знакове розширення. Ці інструкції не мають операндів.

cbw розтягує знак байта AL по регістрі АХ.

cwde розтягує знак слова АХ на ЕАХ. Ці інструкції також не мають операндів.

movsx destination, source

перетворить байт у слово або в подвійне слово і слово в подвійне слово, використовуючи знакове розширення.

movzx destination, source

робить те ж саме, але використовуючи нульове розширення. Операндом-джерелом може бути регістр загального призначення або пам'ять, тоді як операндом-адресатом повинний бути регістр загального призначення. Наприклад:

movsx ax, al ; байт у слово

movsx edx, dl ; байт у подвійне слово

movsx eax, ax ; слово в подвійне слово

movsx ax, byte [bx]; байт пам'яті в слово

movsx edx, byte [bx]; байт пам'яті в подвійне слово

movsx eax, word [bx]; слово пам'яті в подвійне слово

Примітка. При введенні – виведенні даних у програмах на С++ обов'язково указується формат числа, див. л. р.№2. Нижче приведені модифікатори формату і відповідні їм директиви визначення даних в асемблері.

Таблиця 1 - Типи даних С++ та відповідні їм директиви визначення данихна асемблері

Тип даних С++

Розмір (байт)

Директива

bool

1

db

char, unsigned char, signed char

1

db

short, unsigned short

2

dw

int, unsigned int

4

dd

__intn

1, 2, 4, 8 у залежності від n. __intn це специфікація Microsoft.

db, dw, dd, dq

long, unsigned long

4

dd

float

4

dd

double

8 s

dq

long double

8

dq

long long

Еквівалентно __int64.

Microsoft Visual C++ розпізнає наступні типи даних, що наведені у таблиці 2, включно із діапазоном значень.

Таблиця 2 – Типи даних Microsoft Visual С++

Тип

Кількість

байт

Псевдоніми

Діапазон значень

int

*

signed, signed int

Залежить від платформи (системи)

unsigned int

*

unsigned

Залежить від платформи (системи)

bool

1

-

false або true

char

1

signed char

–128.. 127

unsigned char

1

-

0.. 255

short

2

short int, signed short int

–32 768.. 32 767

unsigned short

2

unsigned short int

0.. 65 535

long

4

long int, signed long int

–2 147 483 648.. 2 147 483 647

long long

8

- (еквіалентно __int64)

–9 223 372 036 854 775 808..

9 223 372 036 854 775 807

unsigned long

4

unsigned long int

0.. 4 294 967 295

enum

*

-

теж саме, що int

float

4

-

3.4E +/- 38 (7 digits)

double

8

-

1.7E +/- 308 (15 digits)

long double

теж саме, що double

-

теж саме, що double

wchar_t

2

__wchar_t

0.. 65 535

__int8

1

char, signed char

–128.. 127

__int16

2

short, short int, signed short int

–32 768.. 32 767

__int32

4

signed, signed int

–2 147 483 648.. 2 147 483 647

__int64

8

-

–9 223 372 036 854 775 808.. 9 223 372 036 854 775 807

При використанні scanf (printf) використовують наступні типи даних та їх специфікатори.

Таблиця 3 – Типи даних С++ та специфікатори

Формат

Префікс

Специфікатор із яким використовується

double

l

e, E, f, g, or G

long double (як double)

L

e, E, f, g, or G

long int

l

d, i, o, x, or X

long unsigned int

l

u

short int

h

d, i, o, x, or X

short unsigned int

h

u

__int64

I64

d, i, o, u, x, or X

Простий байт scanf

h

c or C

Розширений байт scanf

l

c or C

Рядок символів scanf

h

s or S

Рядок розширених символів scanf

l

s or S

Примітка: h, l, I64, and L are Microsoft extensions and are not ANSI compatible

Розшифровка специфікаторів відносно до логічних типів даних наведено у таблиці 4

Таблиця 4 – Специфікатори із зазначенням типів даних

Символ

Типи даних

d

Десяткове ціле.

i

Десяткове, шістнадцятирічне, вісімкове ціле.

o

Вісімкове ціле.

u

Беззнакове десяткове ціле.

x

Шістнадцятирічне ціле.

e, E, f, g, G

Дійсне (floating-point) включаючи знак (+, –), послідовність десяткових розрядів із десятковою крапкою, символ експоненти (“e” or “E”) та покажчик ступеню.

n

No input read from stream or buffer.

s (S)

Строка до першого символу space, tab, newline. Для читання символів, що необмежені означеними символами слід використовувати квадратні дужки ([]).

c (С)

При використанні scanf визначає простий байт; при використанні wscanf визначає розширений байт. (розширені символи читаються за допомогою C) Для читання наступного простого байту використовується %1s; розширеного - %1ws.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]