은 내 여기
org 0x7c00
bits 16
section .text
mov ax,0x1000
mov ss,ax
mov sp,0x000
mov esp,0xfffe
xor ax,ax
mov es,ax
mov ds,ax
mov [bootdrive],dl
mov bh,0
mov bp,zeichen
mov ah,13h
mov bl,06h
mov al,1
mov cx,6
mov dh,010h
mov dl,01h
int 10h
load:
mov dl,[bootdrive]
xor ah,ah
int 13h
jc load
load2:
mov ax,0x1000
mov es,ax
xor bx,bx
mov ah,2
mov al,1
mov cx,2
xor dh,dh
mov dl,[bootdrive]
int 13h
jc load2
mov ax,0
mov es,ax
mov bh,0
mov bp,zeichen3
mov ah,13h
mov bl,06h
mov al,1
mov cx,13
mov dh,010h
mov dl,01h
int 10h
mov ax,0x1000
mov es,ax
mov ds,ax
jmp 0x1000:0x000
zeichen db 'hello2'
zeichen3 db 'soweit so gut'
bootdrive db 0
times 510 - ($-$$) hlt
dw 0xaa55
내 kernel.c : bootloader.asm 내가 사용
asm("jmp main");
void print()
{
for(int i=0;i<5;i++)
{
asm("mov $0x0e,%ah");
asm("mov $0x00,%bh");
asm("mov %0,%%al":: "" ('g'));
asm("int $0x10");
}
}
void main()
{
asm("mov $0x1000,%eax;"
"mov %eax,%es;"
"mov %eax,%ds");
const char string[]="hall0";
print();
for(int i=0;i<5;i++)
{
asm("mov $0x0e,%ah");
asm("mov $0x00,%bh");
asm("mov %0,%%al":: "" (string[i]));
asm("int $0x10");
}
asm(".rept 512;"
" hlt ;"
".endr");
}
명령은 다음과 같습니다 nasm -f bin -o bootloader.bin bootloader.asm
및 012,351,gcc kernel.c -c -o kernel.o -m16 -nostdlib -ffreestanding&&ld -melf_i386 kernel.o -o kernel.elf&&objcopy -O binary kernel.elf kernel.o&&cat bootloader.bin kernel.elf>myOS.bin&&qemu-system-i386 myOS.bin
내 Linux Mint Cinnamon 버전 18에. 10g의 "soweit so gut"다음에 인쇄해야하는 5g와 "hall0"의 문자 수를 인쇄하지만 "hall0"은 인쇄하지 않습니다. 그래서 내가 gcc gnu 어셈블러의 사용을 위해 bootloader.asm에서 뭔가 잘못했을 것입니다. 아마도 스택을 잘못 설정했을 수도 있습니다. 어쩌면 누군가 나를 도와 줄 수 있습니까?
댓글이 확장 된 논의하지 않은 cat 명령을 수행하십시오; 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/131026/discussion-on-question-by-albert-gcc-gnu-assembly-kernel-in-real-mode). –