#include <iostream>
#include <cstdint>
int main() {
uint32_t value = 0x12345678; // Пример 32-битного числа (разделим его на DX:AX)
// Разделяем число на старшую (DX) и младшую (AX) части
uint16_t dx = (value >> 16) & 0xFFFF; // Старшие 16 бит (DX)
uint16_t ax = value & 0xFFFF; // Младшие 16 бит (AX)
uint32_t result; // Сюда запишем результат
// Ассемблерная вставка (переносим DX:AX → ECX)
asm volatile (
"movw %[ax], %%ax\n" // Загружаем AX
"movw %[dx], %%dx\n" // Загружаем DX
"shl $16, %%edx\n" // Сдвигаем DX в старшие 16 бит EDX
"movw %%ax, %%cx\n" // Загружаем AX в CX
"orl %%edx, %%ecx\n" // Объединяем DX и AX в ECX
"movl %%ecx, %[res]\n" // Сохраняем результат
: [res] "=r" (result) // Выходной операнд
: [ax] "r" (ax), // Входные операнды
[dx] "r" (dx)
: "eax", "edx", "ecx" // Список изменяемых регистров
);
std::cout << "Исходное число: 0x" << std::hex << value << std::endl;
std::cout << "Результат в ECX: 0x" << std::hex << result << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KCmludCBtYWluKCkgewogICAgdWludDMyX3QgdmFsdWUgPSAweDEyMzQ1Njc4OyAgLy8g0J/RgNC40LzQtdGAIDMyLdCx0LjRgtC90L7Qs9C+INGH0LjRgdC70LAgKNGA0LDQt9C00LXQu9C40Lwg0LXQs9C+INC90LAgRFg6QVgpCgogICAgLy8g0KDQsNC30LTQtdC70Y/QtdC8INGH0LjRgdC70L4g0L3QsCDRgdGC0LDRgNGI0YPRjiAoRFgpINC4INC80LvQsNC00YjRg9GOIChBWCkg0YfQsNGB0YLQuAogICAgdWludDE2X3QgZHggPSAodmFsdWUgPj4gMTYpICYgMHhGRkZGOyAgLy8g0KHRgtCw0YDRiNC40LUgMTYg0LHQuNGCIChEWCkKICAgIHVpbnQxNl90IGF4ID0gdmFsdWUgJiAweEZGRkY7ICAgICAgICAgIC8vINCc0LvQsNC00YjQuNC1IDE2INCx0LjRgiAoQVgpCgogICAgdWludDMyX3QgcmVzdWx0OyAgLy8g0KHRjtC00LAg0LfQsNC/0LjRiNC10Lwg0YDQtdC30YPQu9GM0YLQsNGCCgogICAgLy8g0JDRgdGB0LXQvNCx0LvQtdGA0L3QsNGPINCy0YHRgtCw0LLQutCwICjQv9C10YDQtdC90L7RgdC40LwgRFg6QVgg4oaSIEVDWCkKICAgIGFzbSB2b2xhdGlsZSAoCiAgICAgICAgIm1vdncgJVtheF0sICUlYXhcbiIgICAgIC8vINCX0LDQs9GA0YPQttCw0LXQvCBBWAogICAgICAgICJtb3Z3ICVbZHhdLCAlJWR4XG4iICAgICAvLyDQl9Cw0LPRgNGD0LbQsNC10LwgRFgKICAgICAgICAic2hsICQxNiwgJSVlZHhcbiIgICAgICAgLy8g0KHQtNCy0LjQs9Cw0LXQvCBEWCDQsiDRgdGC0LDRgNGI0LjQtSAxNiDQsdC40YIgRURYCiAgICAgICAgIm1vdncgJSVheCwgJSVjeFxuIiAgICAgLy8g0JfQsNCz0YDRg9C20LDQtdC8IEFYINCyIENYCiAgICAgICAgIm9ybCAlJWVkeCwgJSVlY3hcbiIgICAgLy8g0J7QsdGK0LXQtNC40L3Rj9C10LwgRFgg0LggQVgg0LIgRUNYCiAgICAgICAgIm1vdmwgJSVlY3gsICVbcmVzXVxuIiAgLy8g0KHQvtGF0YDQsNC90Y/QtdC8INGA0LXQt9GD0LvRjNGC0LDRggogICAgICAgIDogW3Jlc10gIj1yIiAocmVzdWx0KSAgICAvLyDQktGL0YXQvtC00L3QvtC5INC+0L/QtdGA0LDQvdC0CiAgICAgICAgOiBbYXhdICJyIiAoYXgpLCAgICAgICAgIC8vINCS0YXQvtC00L3Ri9C1INC+0L/QtdGA0LDQvdC00YsKICAgICAgICAgIFtkeF0gInIiIChkeCkKICAgICAgICA6ICJlYXgiLCAiZWR4IiwgImVjeCIgICAvLyDQodC/0LjRgdC+0Log0LjQt9C80LXQvdGP0LXQvNGL0YUg0YDQtdCz0LjRgdGC0YDQvtCyCiAgICApOwoKICAgIHN0ZDo6Y291dCA8PCAi0JjRgdGF0L7QtNC90L7QtSDRh9C40YHQu9C+OiAweCIgPDwgc3RkOjpoZXggPDwgdmFsdWUgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICLQoNC10LfRg9C70YzRgtCw0YIg0LIgRUNYOiAweCIgPDwgc3RkOjpoZXggPDwgcmVzdWx0IDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==