Спосибо 
RXL, что пытаешся так же разобраться в этой проблеме.
Теперь по существу: первая и вторая проблемы в принцепе на данном этапе меня не волнуют. А вот проблема три стоит на моем пути.
Для сборки исполняемого файла использую вот такой исходник:
#include <config.h>
#define ABS(x)          (x-_start)
#define SELECTOR_CODE           8
#define SELECTOR_VIDEO         16
/* код для реального режима работы (i8086) */
.code16
.text
.globl _start
/*
 * Код загружается в память по адресу 7с00h,
 * в DL номер накопителя. Управления передается по
 * адресу 0:7с00h.
 * Это значит, что
 * CS = 0
 * IP = 7c00h
 * DL = номеру накопителя (в соответствии с правилами
 *      BIOS int 13h).
 *
 * Итого:
 * регистры:
 *  cs:ip - 0:7c00h
 *  dl    - номер накопителя
 * память:
 *  00000-003FF      таблица векторов прерываний
 *  00400-005FF      используется BIOS ( 1536 )
 *  00600-07BFF      свободно ( 30208 )
 *  07C00-07DFF      программа начальной загрузки ( 512 )
 *  07E00-9FFFF      свободно ( 623104 )
 *  A0000-FFFFF      используется BIOS ( 393216 )
 */
/* настроим рабочее пространство данный и стека */
_start:
	jmp main
msg:	.asciz "Kernel code starting...\n"
/* основной код программы */
main:
	cli
	movw $SEG_BOOT_KERNEL, %ax
	movw %ax, %ds           /* определяем сегмент данных         */
	sti
	/* Сообщение о начале работы kernel */
	movw $ABS(msg), %ax
	pushw %ax
	call puts
	addw $2, %sp
	cli
	lgdtw _gdtr
	/* Переключаемся в PM */
	movl %cr0, %eax
	orb $1, %al
	movl %eax, %cr0
	ljmp $SELECTOR_CODE, $entry_PM
.code32
entry_PM:
	movw $SELECTOR_VIDEO, %ax
	movw %ax, %ds
	xorl %eax, %eax
	movw $0x1f41, (%eax)
	movl $3998, %eax
	movw $0x1f41,(%eax)
stop:	jmp stop
_gdtr:
	.word 23
	.long _gdt+0x8000
_gdt:
	.quad 0x0000000000000000
	.quad 0x00c09a0080000000
	.quad 0x0040920b80000f9f
На счет разных режимов работы (
".code16" и 
".code32") не обращайте внимания, это инструкции только для ассемблера, а линкеру по барабанну какой код в секции 
".text" 32 или 16 разрядный.
Скрипт для линкера имеет следующий вид:
OUTPUT_FORMAT ("binary")
OUTPUT_ARCH (i386)
ENTRY (_start)
SECTIONS
{
    .text :
    {
	*(.text)
    }
    .bss :
    {
	*(.bss)
    }
    .data :
    {
	*(.data)
    }
}Так вот, я хочу заменить выходной формат файла с 
"binary" на 
"a.out-i386-linux" но в объектных файлах выдоваемых 
"gcc" (точнее будет 
"as") пресутствует секция 
".comment" и как мне от нее избавиться я не знаю. У кого есть подобный опыт работы, поделитесь своими познаниями, я буду очень признателен.
Причина по которой я хочу использовать именно формат 
"a.out" заключается в то, что он намного проще 
"elf32" и его проще разместить в памяти. Кроме этого, исполняемый файл собранный в формате 
"a.out" является, если так можно сказать, самодостаточным если он не использует системные вызовы.