Хранение байтов Little Endian для символьных констант в качестве непосредственных операндов? - PullRequest
0 голосов
/ 29 августа 2018

Процессор использует порядок байтов для хранения байтов в памяти

mov rax, "bloopers"
mov [s_out], rax

В этом случае, что хранится по адресу [s_out] и [s_out+7] и что происходит, когда я печатаю s_out

Я в замешательстве, поскольку rax будет хранить "bloopers" как "srepoolb".

Но я не знаю, что произойдет, если вы переместитесь rax в s_out. Работает ли он так же, как регистр?

1 Ответ

0 голосов
/ 29 августа 2018

Что я выучил:

mov rax, "bloopers" сохраняет строку "bloopers" в rax, но при просмотре памяти в формате с прямым порядком байтов она выглядит как 0x737265706f6f6c62.

mov [s_out], rax просто хранит строку "bloopers" в порядке. Таким образом, по адресу памяти s_out он содержит символ b, а по адресу s_out+7 - s.

Это задокументировано для NASM в https://www.nasm.us/doc/nasmdoc3.html#section-3.4.3. Другие ассемблеры ведут себя аналогично для символьных констант с более чем одним символом.

Спасибо @fuz и @ Ped7g за помощь.

...