Я написал код со встроенной сборкой MSV C, где я печатаю массивы символов с помощью 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
Можете ли вы объяснить, почему смещение влияет на печать чисел таким образом?