用于在 masm 中打印数字的 OFFSET 关键字

OFFSET keyword for printing numbers in masm

我使用 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) where offset加载变量的地址,而不是值本身,可以使用offset 调用函数但不加载值。

请参考此link: http://www.asmcommunity.net/forums/topic/?id=15124