Fortran
Aus Lowlevel
Allgemeines | |
---|---|
Name: | Fortran |
Inlineassembler: | Nein |
Compiler: | g77 |
Spracheneigenschaften | |
Plattformen: | Alle |
Beispielkernel in der Sprache: | Siehe Unten |
Homepage | |
Fortran ist eine prozedurale und objektorientierte Programmiersprache, die auf einem Vorschlag von John W. Backus aus dem Jahre 1953 zurückgeht und als erste tatsächlich umgesetzte Hochsprache im Jahre 1957 von eben diesem entwickelt wurde. Fortran wird vor allem für numerische Berechnungen genutzt.
Inhaltsverzeichnis
Testkernel in Fortran
Hinweis: Ich habe das mit gfortran getestet. Mit anderen Compilern funktioniert das vermutlich nicht so.
hello.f
c Einsprungspunkt subroutine hello () call clear() call print_str('Hello World aus fortran!', 24) end subroutine hello c Schreibt einen String auf den Bildschrim c str: Der String c l: Laenge des Strings in Zeichen subroutine print_str (str, l) character str(*) integer l integer i do 10 i = 1, l call print_char(str(i)) 10 continue end subroutine print_str c Schreibt ein Zeichen auf den Bildschirm c c: Das Zeichen subroutine print_char (c) character c integer,save :: vmempos = 1 call write_vmem(c, vmempos) vmempos = vmempos + 2 end subroutine print_char c Leert den Bildschirm subroutine clear () integer i do 10 i = 1, 2000, 2 call write_vmem(' ', i) 10 continue end subroutine clear c Schreibt ein Zeichen in den Videospeicher c c: Das Zeichen c pos: Die Position (Achtung beginnt bei 1!) subroutine write_vmem (c, pos) integer pos character c character vmem(2000) pointer (ipt, vmem) c Entspricht 0xB8000 in Hex ipt = 753664 vmem(pos) = c end subroutine write_vmem
header.S
.globl _start _start: movl $0x200000, %esp .extern hello call hello hlt .align 4 multiboot_header: .int 0x1BADB002 .int 0x0 .int (-0x1BADB002)
Hinweis: Unter Windows ist es vonnöten
.extern _hello call _hello
zu schreiben.
build.sh
gfortran -fcray-pointer -fno-underscoring -fno-second-underscore -c \ -m32 -g -o hello.o hello.f as -32 -o header.o header.S ld -melf_i386 -Ttext=0x100000 -o fortran.krn hello.o header.o