Как выразить '\ n' в сборке? - PullRequest
0 голосов
/ 08 октября 2019

Я хотел бы выразить '\ n' как код сборки !!

Например,

#include <stdio.h>

int main() {
    printf("Hi! My name is Joe.\n I'm 11 years old");

    return 0;
}

Как выразить часть '\ n' в сборке?

Ответы [ 2 ]

3 голосов
/ 08 октября 2019

Это зависит от того, какой конкретный ассемблер вы используете, но в некоторых (включая GAS: https://sourceware.org/binutils/docs/as/Characters.html), это все еще \n, точно так же как C. Вы можете увидеть, как выглядит сборка в нескольких различныхпути, но в наши дни GodBolt довольно хорош.

https://gcc.godbolt.org/z/ZLq3Kn

.LC0:
        .string "Hi! My name is Joe.\n I'm 11 years old"

Вы можете видеть, что строка выглядит одинаково. В GAS, .string создает строку с нулем в концеЕсли вы переключитесь на Clang (который использует тот же синтаксис, но по-разному выбирает, какие директивы выдавать), вы увидите, что он использует .asciz.

.L.str:
        .asciz  "Hi! My name is Joe.\n I'm 11 years old"

Но в обоих ассемблерах \nЭто то же самое.

Не все ассемблеры поддерживают этот синтаксис. Но многие делают. Проверьте руководство для вашего ассемблера.

.string такое же, как .ascizдля большинства целей добавляется ноль. В руководстве говорится , что в синтаксисе GAS для некоторых ISA .string может не добавлять ноль, в то время как .asciz всегда так и .ascii никогда не делает. z означает ноль.

2 голосов
/ 08 октября 2019

Для выражения \n в ассемблере, особенно в nasm ассемблере (с указанием комментария от dvhh ), вы можете использовать 0x0a.

Пример:

string1 db "Hi! My name is Joe.", 0x0a
string2 db "I'm 11 years old.", 0x0a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...