我使用MSVC内联汇编编写了代码,其中我通过使用offset的printf打印char数组。它工作正常。
#include <iostream>
using namespace std;
char FORMAT[] = "%s %s %s %s, %s\n";
char SURNAME[] = "Ponomarenko";
char NAME[] = "Maria";
char DESIGN[] = "Design";
char BY[] = "by";
char YEAR[] = "2020";
int YEAR1 = 2020;
void main() {
__asm {
mov eax, offset YEAR
push eax
mov eax, offset SURNAME
push eax
mov eax, offset NAME
push eax
mov eax, offset BY
push eax
mov eax, offset DESIGN
push eax
mov eax, offset FORMAT
push eax
mov edi, printf
call edi
pop ebx
pop ebx
pop ebx
pop ebx
pop ebx
}
system("pause");
}
比起尝试打印数字YEAR1,我尝试了此操作
mov eax, offset YEAR1
push eax
结果很奇怪,然后我写上没有偏移的字样,就可以了! (当然,在两种情况下,我都更改了FORMAT数组)
mov eax, YEAR1
push eax
您能解释一下胶印为什么会这样影响打印数字吗?
在Visual Studio中,使用Microsoft汇编程序(MASM),其中offset加载变量的地址,而不是值本身,您可以使用offset来调用函数,但不能加载值。] >
请使用此链接作为参考:http://www.asmcommunity.net/forums/topic/?id=15124