Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




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

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   db
char, unsigned char, signed char   db
short, unsigned short   dw
int, unsigned int   dd
__int n 1, 2, 4, 8 у залежності від n. __int n це специфікація Microsoft. db, dw, dd, dq
long, unsigned long   dd
float   dd
double 8 s dq
long double   dq
long long Еквівалентно __int64.  

 

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

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

Тип Кількість байт Псевдоніми Діапазон значень
int * signed, signed int Залежить від платформи (системи)
unsigned int * unsigned Залежить від платформи (системи)
bool   - false або true
char   signed char –128.. 127
unsigned char   - 0.. 255
short   short int, signed short int –32 768.. 32 767
unsigned short   unsigned short int 0.. 65 535
long   long int, signed long int –2 147 483 648.. 2 147 483 647
long long   - (еквіалентно __int64) –9 223 372 036 854 775 808.. 9 223 372 036 854 775 807
unsigned long   unsigned long int 0.. 4 294 967 295
enum * - теж саме, що int
float   - 3.4E +/- 38 (7 digits)
double   - 1.7E +/- 308 (15 digits)
long double теж саме, що double - теж саме, що double
wchar_t   __wchar_t 0.. 65 535
__int8   char, signed char –128.. 127
__int16   short, short int, signed short int –32 768.. 32 767
__int32   signed, signed int –2 147 483 648.. 2 147 483 647
__int64   - –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.

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...