用于在 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
我使用 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