【发布时间】:2020-05-11 03:28:08
【问题描述】:
参加汇编课程,所有编程都是在 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++ 中声明的变量?我认为汇编中没有“变量”之类的东西,那么我应该如何访问这些变量?
【问题讨论】:
-
你只是access it by name。您不是在编写纯程序集,而是在编写 MSVC 嵌入式程序集。
-
您的 asm 能否利用它们是常量这一事实,并使用在编译时计算立即数的一条指令执行
mov eax, (c1<<24) | (c2<<16) | ...?还是您必须让 MSVC 将它们放入内存中,然后mov al, c1并转移? (或者任何其他不涉及写入部分寄存器的方法?)
标签: c++ visual-studio assembly inline-assembly