Дан код на ASM, дублирующий код на С упаковывающий битовые группы. Не смотря на то, что код являлся примером лабораторной, он не компилируется из-за непонятных команд на ассемблере. Не смог найти их описание в интернете, но есть подозрение, что это команды ассемблера для Linux. Объясните, если можете, что не так с кодом, или объясните как нормально реализовать код на си в ассемблерной вставке.
Код на С++ http://pastebin.com/1DBFk6C4
Код на ASM http://pastebin.com/qa8GJeqH
Другие языки программирования и технологии
Ассемблерная вставка в С .Странный код. Можете расшифровать?
Это не синтаксис AT&T. Это какой-то гибридный, смесь Intel и AT&T. Возможно, разработан для учебных целей.
"Не так" в нём то, что к мнемоникам инструкций добавлены суффиксы размеров операндов (как в AT&T):
b - byte (8 разрядов) ;
w - word (16);
l - long (32).
#include
using namespace std;
int main()
{
unsigned char xxx, www, xxx_a, www_a;
unsigned short yyy, zzz, yyy_a, zzz_a;
unsigned long value, value_a;
unsigned short tmp;
cout << "\n\t\tУпаковка битовых групп"
<< "\n\tУпаковать битовые группы, содержащиеся в целых числах, "
<< "\n\t\tв 32-битовое целое число Value";
for (;;)
{
cout << "\nПожалуйста, введите 2 16-ые цифры для XXX (например, 5a):";
cin >> hex >> tmp; xxx = tmp;
cout << "Пожалуйста, введите 3 16-х цифры для YYY (например, 9db):";
cin >> yyy;
cout << "Пожалуйста, введите 4 16-х цифры для ZZZ (например, 8e7f):";
cin >> zzz;
cout << "Пожалуйста, введите 2 16-х цифры для WWW (например, 14):";
cin >> tmp; www = tmp;
xxx_a = xxx; yyy_a = yyy; zzz_a = zzz; www_a = www;
//===================== C ========================
www &= 0x1f;
zzz &= 0xfff;
yyy &= 0x1ff;
xxx &= 0x3f;
value = xxx;
value = (value << 9) | yyy;
value = (value << 12) | zzz;
value = (value << 5) | www;
//==================== Asm =======================
_asm
{
and xxx_a,0x3f
and yyy_a,0x1ff
and zzz_a,0xfff
and www_a,0x1f
xor eax,eax
or al,xxx_a
shl eax,9
or ax,yyy_a
shl eax,12
or ax,zzz_a
shl eax,5
or al,www_a
mov value_a,eax
}
cout << hex << value << "\t" << value_a;
}
return 0;
}
"Не так" в нём то, что к мнемоникам инструкций добавлены суффиксы размеров операндов (как в AT&T):
b - byte (8 разрядов) ;
w - word (16);
l - long (32).
#include
using namespace std;
int main()
{
unsigned char xxx, www, xxx_a, www_a;
unsigned short yyy, zzz, yyy_a, zzz_a;
unsigned long value, value_a;
unsigned short tmp;
cout << "\n\t\tУпаковка битовых групп"
<< "\n\tУпаковать битовые группы, содержащиеся в целых числах, "
<< "\n\t\tв 32-битовое целое число Value";
for (;;)
{
cout << "\nПожалуйста, введите 2 16-ые цифры для XXX (например, 5a):";
cin >> hex >> tmp; xxx = tmp;
cout << "Пожалуйста, введите 3 16-х цифры для YYY (например, 9db):";
cin >> yyy;
cout << "Пожалуйста, введите 4 16-х цифры для ZZZ (например, 8e7f):";
cin >> zzz;
cout << "Пожалуйста, введите 2 16-х цифры для WWW (например, 14):";
cin >> tmp; www = tmp;
xxx_a = xxx; yyy_a = yyy; zzz_a = zzz; www_a = www;
//===================== C ========================
www &= 0x1f;
zzz &= 0xfff;
yyy &= 0x1ff;
xxx &= 0x3f;
value = xxx;
value = (value << 9) | yyy;
value = (value << 12) | zzz;
value = (value << 5) | www;
//==================== Asm =======================
_asm
{
and xxx_a,0x3f
and yyy_a,0x1ff
and zzz_a,0xfff
and www_a,0x1f
xor eax,eax
or al,xxx_a
shl eax,9
or ax,yyy_a
shl eax,12
or ax,zzz_a
shl eax,5
or al,www_a
mov value_a,eax
}
cout << hex << value << "\t" << value_a;
}
return 0;
}
Похожие вопросы
- Помогите, пожалуйста, написать программу на делфи с ассемблерными вставками.
- Что сложного в работе программиста? Почему написать код могут не все, если код весь на английском языке??
- Объясните, пожалуйста, ассемблерный код
- Вызов API-функции из ассемблерного кода.
- Расшифровка Нужно расшифровать текст Скорее всего это двоичный код
- Запуск ассемблерных программ на "чистом" компьютере.
- Как расшифровать бинарный код? Может ли таким образом быть зашифровано буквенное "послание"? Как его расшифровать?
- Расшифруйте пожалуйста бинарный код (вроде как бинарный)
- Ускоряют ли работу кода вставки на ассэмблере (С++)
- мне заблакировали виндус, просит код активации, не могу не открыть, не установить не одной прграммы, что делать?
А в include было
#include < iostream>