Ключевое слово OFFSET для печати чисел в маске - PullRequest
3 голосов
/ 07 апреля 2020

Я написал код со встроенной сборкой 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

Можете ли вы объяснить, почему смещение влияет на печать чисел таким образом?

1 Ответ

1 голос
/ 07 апреля 2020

в Visual Studio используется ассемблер Microsoft (MASM), где смещение загружает адрес переменной, а не само значение, вы можете использовать смещение для вызова функции, но не загрузить значение.

пожалуйста, используйте эту ссылку для справки: http://www.asmcommunity.net/forums/topic/?id=15124

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...