Funktion mit veränderbaren Parametern realisieren?
-
Hi,
ich habe mir eine kleine Funktion geschrieben, die den PCI Bus nach Geräten scannen soll. Zum Test habe ich einfach mal Bus 0, Dev 0 Func 0 scannen lassen. Funktioniert auch wunderbar:scan_pci_bus: mov r9, scan_pci_msg call print.line start_scan: mov eax, 0x80000000 or eax, 0x00 << 16 ;Bus or eax, 0x00 << 11 ;Dev or eax, 0x00 << 8 ;Func mov cl, 0x00 & 0xFC ;Offset (Vendor und Device ID lesen) mov dx, 0xCF8 out dx, eax mov dx, 0xCFC in eax, dx cmp eax, 0xFFFFFFFF je pci_next mov r9, found_pci_dev_msg call print.line pci_next: ;Parameter verändern jmp start_scanWie man erkennen kann, möchte ich die Parameter (Bus, Dev, Func) gerne ändern, um so innerhalb einer Schleife alle möglichen Bus, Dev und Func Kombinationen nach Geräten abscannen zu können. Leider weiß ich nicht genau wie ich dies realisieren kann und hoffe auf den ein oder anderen Hinweis von euch.
Achja: Als Assembler kommt nasm zum Einsatz.
Vielen Dank schonmal im Vorfeld für eure Mühen

-
scan_pci_bus: mov r9, scan_pci_msg call print.line xor eax, eax or eax, 0x00 << 16 ;Bus or eax, 0x00 << 11 ;Dev or eax, 0x00 << 8 ;Func start_scan: and eax, 0x00FFFFFF or eax, 0x80000000 mov cl, 0x00 & 0xFC ;Offset (Vendor und Device ID lesen) mov dx, 0xCF8 out dx, eax mov dx, 0xCFC in eax, dx cmp eax, 0xFFFFFFFF je pci_next mov r9, found_pci_dev_msg call print.line pci_next: ;Parameter verändern xor eax, eax or eax, 0x00 << 16 ;Bus or eax, 0x00 << 11 ;Dev or eax, 0x00 << 8 ;Func jmp start_scan