2010-09-05 3 views
1

Я пытаюсь напечатать строку так, как она нейтральна для ОС. Например, программа должна работать на Windows так же, как и на * nix.Как печатать строку в OS-нейтральном режиме?

Возможно ли это? Я предполагаю, что, поскольку базовая архитектура такая же (x86), что метод будет таким же. Это так же просто, как вызов прерывания?

Причина в том, что я пытаюсь написать компилятор, который генерирует код сборки - на этом раннем этапе его разработки присутствует только несколько функций - я хотел бы иметь возможность протестировать сгенерированную сборку кода в Windows или * nix. В будущем невозможно поддерживать нейтральность платформы при создании того же кода, но в основном все, что я хочу сделать в этот момент, - это напечатать строку.

ответ

2

Чистая сборка не должна считаться переносной между операционными системами. Нет универсального способа взаимодействия с системными службами из сборки. Вы даже не должны допускать переносимость между Unix-подобными ОС (POSIX не указывает соглашение о вызове, хотя некоторые x86 Unices используют общее соглашение).

Даже на языках более высокого уровня условные соглашения могут технически варьироваться от одного компилятора к другому на той же самой ЦП + ОС, хотя обычно компиляторы используют любое соглашение, указанное для среды хоста.

См. Также страницу Википедии по адресу x86 calling conventions.

3

У вас есть ссылка на libc? Если вы можете это сделать, вы должны просто позвонить printf() и сделать это. Пример программы можно найти по адресу this link.

+1

Но как связывается с 'libc' платформой-нейтраль? –

+1

+1 - Я должен согласиться - вы не сможете использовать независимое от платформы прерывание, чтобы выполнить это - если по совпадению или, может быть, по конструкции прерывание INT 10h поддерживается на обоих. В качестве альтернативы создайте себе небольшую библиотеку функций для вывода строк и вызовите соответствующие прерывания (если вывод строки Linux основан на прерываниях) в зависимости от платформы. –

+0

@George, я бы рискнул предположить, что на большинстве платформ есть 'libc'. Скорее всего, оболочка, из которой вы запускаете свою программу, была построена, например. –

1

Извините,, никто не воспитывал Java?

+0

Как Java ответ на вопрос? Это вопрос об ассемблере. –

+1

Shove bytecode через in-process JVM, решает нейтральную платформу libc в другом сообщении. – Xailor

+0

Я не пишу JVM в процессе - я пишу компилятор. Я понимаю, о чем вы говорите. Но использование JVM не является вариантом. –

Смежные вопросы