我使用 MSVC 内联汇编编写代码,其中我使用偏移量通过 printf 打印字符数组。它工作正常。
#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 assembler (MASM) 用于 offset 加载变量的地址,而不是值本身,您可以使用 offset 来调用函数但不加载值。
请使用此链接作为引用: http://www.asmcommunity.net/forums/topic/?id=15124
关于assembly - 用于在 masm 中打印数字的 OFFSET 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61078637/