Как использовать GDB в 16-битном режиме?

У меня есть следующий код, где я пытаюсь реализовать функцию, которая печатает строку с использованием функций BIOS:

int printString(char* string)
{
 int i = 0;
 while (*(string + i) != '\0')
   {
    char al = *(string + i);
    char ah = 0xe;
    int ax = ah * 256 + al;
    interrupt(0x10,ax,0,0,0);
    i++;
   }
 return i;
}

Функция прерывания реализована в сборке. Он вызывает соответствующее прерывание BIOS, заданное первым аргументом, с остальными аргументами, содержащими содержимое для регистров ax, bx, cx и dx соответственно:

.global _interrupt
_interrupt:
push bp
mov bp, sp
push si
push ds
mov ax, #0x100
mov ds, ax
mov ax, [bp + 0x4]
mov si, #intr
mov [si + 1], al
pop ds
mov ax, [bp + 0x6]
mov bx, [bp + 0x8]
mov cx, [bp + 0xa]
mov dx, [bp + 0xc]
intr: int #0x0
pop si
pop bp
ret

Поскольку я использую прерывания BIOS, я использую 16-битный режим для компиляции этого кода. Я использовал следующую команду:

bcc -ansi -c -o printString.o printString.c

Я хочу проверить этот код в GDB, но когда я пытаюсь загрузить этот файл printString.o в GDB, используя:

gdb printString.o

Я получаю следующую ошибку:

"/home/kern/printString.o": не в исполняемом формате: формат файла не распознан

Я также попытался изменить GDB на 16-битный формат, используя:

set architecture i8086

Но все же эта ошибка идет. Как я могу загрузить 16-битный код в GDB?

Ответы на вопрос(2)

Ваш ответ на вопрос