Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

extrn

Hej Rowlere.

Jeg er ved at samle mig et simpelt styresystem i Assemblerkode, og vil gerne gå længere end hvad jeg har lavet indtil videre.

Jeg ved at når du har en bootloader i Assembler (kan ikke undgås), så kan du også bruge C og C++ til at kode selve styresystemet (dog med inline assembler til diverse funktioner).

Jeg ved også at man skal bruge assembler keywordet extrn til at kalde C kode fra Assembler, men jeg ved ikke hvordan den fungerer.

Er der nogen der kan finde en tutorial eller forklare hvad extrn gør, og hvordan man kan bruge den?

- Oliver

Pointfordeling

Forfatteren har lukket tråden og har valgt at fordele de 10 point således:
TheOliver 10 point
Oprettet af:

Programmering

Point afsat: 10

Lukket
10:32 26/06/2010
http://winavr.scienceprog.com/avr-gcc-tutorial/how-to-combine-c-program-with-external-asm.html

Er det eneste jeg lige kan finde omkring emnet?
Oprettet af:

Kommentar
12:10 26/06/2010
Det er det der er problemet. Der er ikke særlig god dokumentation på Assembly da det er virkelig "old skool", men hvis man skal lave operativ systemer, så er det behøvet :-/.
Oprettet af:

Kommentar
12:18 26/06/2010
http://www.very-clever.com/download/nongnu/pgubook/

Fandt nogen tutorials der.. Ved ikke hvor avancererede de er, men det er i ASM-sproget..
Oprettet af:

Kommentar
12:22 26/06/2010
Det er ikke det jeg har brug for.

Har følgende bootloader (virkelig simpel):

  1. [BITS 16]
  2. [ORG 0x7C00]

  3. start:
  4.     mov ax, 0x0000
  5.     mov ds, ax
  6.     mov bh, 0Fh
  7.     
  8.     mov si, welcome
  9.     call writeString
  10.     
  11.     .infiniteLoop:
  12.         jmp .infiniteLoop
  13.         
  14. writeString:
  15.     mov ah, 0x0E
  16.     
  17.     .nextLetter:
  18.         lodsb
  19.         
  20.         cmp al,0x00
  21.         je .endProc
  22.         
  23.         int 0x10
  24.         
  25.         jmp .nextLetter
  26.         
  27.     .endProc:
  28.         ret
  29.         
  30.     welcome db '3DOSX Booted', 0x0D, 0x0A, 0x00
  31.     
  32.     times 510-($-$$) db 0x00
  33.     dw 0xAA55

Men istedet for at kode det udelukkende i Assembler, så ville jeg bruge extrn til at køre C++ kode. ex.

Ny Bootloader:
  1. [BITS 16]
  2. [ORG 0x7C00]

  3. extrn _main ; ??????????????????????

  4. program:
  5.     mov ax, 0x0000
  6.     mov ds, ax
  7.     mov bh, 0Fh
  8.     
  9.     mov si, welcome
  10.     call writeString
  11.         call _main
  12.     
  13.     .infiniteLoop:
  14.         jmp .infiniteLoop
  15.         
  16. writeString:
  17.     mov ah, 0x0E
  18.     
  19.     .nextLetter:
  20.         lodsb
  21.         
  22.         cmp al,0x00
  23.         je .endProc
  24.         
  25.         int 0x10
  26.         
  27.         jmp .nextLetter
  28.         
  29.     .endProc:
  30.         ret
  31.         
  32.     welcome db '3DOSX Booted', 0x0D, 0x0A, 0x00
  33.     
  34.     times 510-($-$$) db 0x00
  35.     dw 0xAA55

test.cpp
  1. extern "C" void ClearScreen(void)
  2. {
  3.    __asm
  4.    {
  5.       mov ah,00
  6.       mov al,03
  7.       int 10h
  8.    }
  9.    // ænder video moden til 03, text 80*25 16 color
  10.    // hvilket også rydder skærmen
  11. }

  12. extern "C" void main( void )
  13. {
  14.    ClearScreen();
  15. }
Oprettet af:

Kommentar
12:26 26/06/2010
Den bygger op på Linux, jeg bygger op på ingenting :)
Oprettet af:

Kommentar
12:44 26/06/2010
Really, just.. Never mind :)
Sidst redigeret 14:05 24/11/2010
Oprettet af:

Accepteret svar

Point modtaget: 10
14:04 24/11/2010
Du skal være oprettet og logget ind for at svare på en tråd
Copyright © Rowl.dk v/ Michael Raagaard | 2005-12 | Alle rettigheder forbeholdes