Выпуск новостей ReactOS №69

z98, “ReactOS Newsletter: Newsletter 69”, public translation into Russian from English More about this translation.

See also 88 similar translations

Translate into another language.

Participants

evilslon 400 points
dsp2003 298 points
unxed 99 points
And others...
Join Translated.by to translate! If you already have a Translated.by account, please sign in.
If you do not want to register an account, you can sign in with OpenID.
Pages: ← previous Ctrl next
1 2 3

ReactOS Newsletter: Newsletter 69

Выпуск новостей ReactOS №69

History of edits (Latest: zamabuvaraeu 7 years, 8 months ago) §

Trap Handling

Обработка прерываний

History of edits (Latest: mister-fog 7 years, 8 months ago) §

— Trap Handling - это разве не "обработчик программных прерываний" ? mister-fog

One of the ways low level communication with hardware is handled is with interrupts and exceptions. Code still has to be written to deal with these and that code is in the trap handler. The original trap handler code in ReactOS was pure assembly, which to an extent is inevitable due to the very needing to carry out operations that the C language does not specify a method for. Such operations include manipulating the stack and reading and writing specific registers, which are by definition platform specific and whose inclusion would lessen C's cross platform nature. As part of the effort to port ReactOS to the ARM platform, the ARM team began rewriting the code to provide at least a very thin abstraction layer in C, with all the architecture specific components being written in assembly intrinsics. Assembly intrinsics are generally compiler specific macros that indicate which assembly instruction one wants to use in C code. This helped increase maintainability and readability and resulted in several bugs being fixed in the process. This was not absolutely necessary for the ARM port, but the ARM team decided doing so would have long term benefits for the project as a whole. Unfortunately, the use of GCC assembly intrinsics rendered MSVC being unable to compile the code. Previously the assembly files could at least be compiled into binary objects that MSVC could then work with, but the transition to C code made this impossible. Here Timo Kreuzer stepped in and changed the intrinsics back to using raw assembly. This may seem as a slight step backward, but the C framework is still in place and the only things that was changed was the usage of GCC assembly intrinsics. In the process Timo also fixed a few segment and flag settings in the assembly code and converting how function parameters are passed through registers from a GCC specific method to a cross-compiler one. In theory, this will allow even Microsoft's assembler to be used to compile the assembly.

Одним из способов низкоуровнего взаимодействия с оборудованием являются исключения и прерывания. Чтобы использовать их в ReactOS, был написан обработчик прерываний (trap handling). Оригинальный вариант обработчика в ReactOS написан на чистом ассемблере, что само по себе в какой-то степени неизбежно, поскольку для некоторых операций в языке Си попросту не существует нужных методов. В их число входит работа со стеком, а также чтение и запись некоторых регистров (эти операции сами по себе являются специфическими для конкретной платформы, и включение их в стандарт Си не пошло бы на пользу переносимости кода). Поэтому в рамках портирования ReactOS на платформу ARM начался процесс переписывания кода, чтобы предоставить хотя бы тонкий слой абстракции на Си с архитектурно-зависимыми вставками на встроенном ассемблере. Встроенный ассемблер - это особый вид макросов для компилятора, указывающих, какую ассемблерную инструкцию требуется использовать в коде на Си. Благодаря этому удалось увеличить удобство редактирования и читабельность кода в целом, а так же попутно исправить несколько ошибок. Для портирования на ARM это было не критично, однако команда ARM-ветки решила, что это важный задел на будущее для всего проекта в целом. К сожалению, использование встроенного ассемблера GCC повлекло невозможность использовать MSVC для компиляции. Ранее, код на ассемблере мог быть скомпилирован в бинарные объекты, с которыми MSVC в дальнейшем работал, но перевод кода на Си сделал его бесполезным. Тут в дело вступил Тимо Крейцер (Timo Kreuzer) заменив вставки на встроенном ассемблере на "сырой" ассемблер. Это может показаться шагом назад, однако основной код, написанный на Си, по-прежнему на месте, а единственное, что было изменено - использование вставок на встроенном ассемблере GCC. Попутно Тимо исправил несколько параметров, относящихся к сегментам и флагам ассемблерного кода, а так же преобразовал передачу параметров функций через регистры, сделав ориентированный на GCC код независимым от компилятора. Теоретически, это делает возможным использование не только компилятора, но и ассемблера Microsoft.

History of edits (Latest: nsinreal 7 years, 8 months ago) §

— Вообще, насколько мне известно, компилирование ассемблерного исходного кода называется ассемблированием, так что последнее предложение на Ваше усмотрение... evilslon

Pages: ← previous Ctrl next
1 2 3