리얼 모드에서 C 프로그램을 작성하고 있습니다. 프로그램은 0x2000:0x0000
주소로로드되어 실행됩니다. DS
레지스터는 CS
이고, 이는 0x2000
입니다. 또한 나는 bochs로 디버깅을하고있다.BCC (Bruce 's C Compiler)의 인라인 어셈블리 - C 변수 사용 방법
제 목표는 화면에 텍스트를 인쇄하는 것입니다. 인라인 어셈블리 (BIOS INT 10h
)가 필요합니다.
asm("jmp _main");
void putchar(c) char c;
{
asm("mov ah, 0x0e");
asm("mov al, c");
asm("xor bx, bx");
asm("int 0x10");
}
void main()
{
asm("push cs");
asm("pop ds");
putchar('A');
for(;;);
}
...
bcc -W -0 -c test.c -o test.obj
... 그것은 일하고 :
여기 내 테스트 파일입니다.
undefined symbol: c
왜 이런 일이 : 내가 함께 ... 그것을 연결하기 위해 노력하고있어하지만
ld86 -d isimsiz.obj -o kernel.bin
... 그것은 나에게 오류를 준? BCC 인라인 어셈블리에서 C 변수를 사용하려면 어떻게해야합니까?
BCC에 관한 유용한 자습서를 알고 있다면 링크를 남겨 두십시오. 나는 인터넷 :(사전에
덕분에 그것을 찾을 수 없습니다
PS를 :. 여기에 각각의 compiler BCC 및 linker LD86의 맨 페이지는
나는 또한 언급을 잊었다. 숨은 참조에 대한 훌륭한 자습서를 알고 있다면 링크를 남겨주세요. 나는 인터넷에서 찾을 수 없었다 :(미리 감사드립니다. –
'putchar'와 같은 줄에 그리고 typeless 변수'c'로 선언 된'char c; '는 무엇인가요? 실수로 비표준 문법을 사용합니다.) void putchar (char c) – enhzflep
@enhzlep BCC는 K & R 문법을 사용하므로 매개 변수는 정확합니다 –