Смущен, как получить доступ к переменной C ++ в коде сборки - PullRequest
0 голосов
/ 24 января 2020

Занятие по сборке, и все программирование выполняется в visual studio с помощью команды _asm. Это шаблон для задания, над которым я работаю:

void main ()
    {
    const unsigned char c1 (0x11);
    const unsigned char c2 (0x22);
    const unsigned char c3 (0x33);
    const unsigned char c4 (0x44);
    unsigned long i1 (0);
    _asm
        {
        **CODE HERE**
        }
     cout << "result is " << hex << i1 << endl;
    }

Инструкции: Внутри блока, обозначенного ключевым словом _asm, добавьте код, чтобы поместить значения c1, c2, c3 и c4 (каждый 8 бит) в регистр eax с c1, загруженным на верхнем (наиболее значимом конце) и c4 на нижнем конце. Поместите 32-битный результат в i1.

Как получить доступ к переменным, объявленным в C ++? Я думал, что в сборке нет такого понятия, как переменная, так как мне получить к ним доступ?

1 Ответ

0 голосов
/ 25 января 2020

Пример добавления этих чисел в Visual Studio.

#include <iostream>

int main( )
{
    const unsigned char c1 (0x11);
    const unsigned char c2 (0x22);
    const unsigned char c3 (0x33);
    const unsigned char c4 (0x44);
    unsigned long i1 (0);
    _asm
    {
            xor     eax,eax
            xor     ecx,ecx         ;xor and mov could be replaced with movzx ecx,c1
            mov     cl,c1
            add     eax,ecx
            mov     cl,c2
            add     eax,ecx
            mov     cl,c3
            add     eax,ecx
            mov     cl,c4
            add     eax,ecx
            mov     i1,eax
    }
    std::cout << "result is " << std::hex << i1 << std::endl;
    return 0;
}

Обратите внимание, что встроенная сборка недопустима в 64-разрядных программах, которым требуется отдельный исходный файл для смешивания кода сборки с C или код C ++.

...