alex2019ii

Untitled

May 2nd, 2019
33
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. BITS 16
  2.  
  3. %define pci_addr(bus,dev,fun) ((1<<31) + (bus<<16) + (dev<<11) + (fun<<8))
  4. %define pci_reg(addr,reg) (addr+(reg<<2))
  5.  
  6. mov bx, 0xFFFF
  7. mov sp, bx
  8.  
  9. %define eth pci_addr(0,3,0)
  10. mov eax, pci_reg(eth, 0)
  11. call inp
  12.  
  13. nop ; здесь eax = 0x100e8086, Intel 82540EM Gigabit Ethernet Controller
  14.  
  15. mov eax, pci_reg(eth, 5)
  16. mov ebx, 0xFF00+1 ; отображаем регистры в I/O с базовым адресом IOBASE = 0xFF00
  17. call outp
  18.  
  19. mov eax, pci_reg(eth, 1)
  20. mov ebx, 3 ; включаем I/O и Memory Mapping
  21. call outp
  22.  
  23. mov dx, 0xFF00
  24. mov eax, 0x00
  25. out dx, eax ; IOADDR = 0x00 (Control Register)
  26. mov dx, 0xFF04
  27. mov eax, 0xFFFFFFFF
  28. out dx, eax ; IODATA <- 0xFFFFFFFF (пытаемся включить хоть что-то)
  29.  
  30. mov dx, 0xFF00
  31. mov eax, 0x00
  32. out dx, eax ; IOADDR = 0x00
  33. mov dx, 0xFF04
  34. in eax, dx
  35.  
  36. nop ; eax = Control Register = 0x00, почему?
  37.  
  38. jmp $
  39.  
  40. outp:
  41. pusha
  42.     mov dx, 0xCF8
  43.     out dx, eax
  44.     mov eax, ebx
  45.     mov dx, 0xCFC
  46.     out dx, eax
  47. popa
  48. ret
  49.  
  50. inp:
  51. push dx
  52.     mov dx, 0xCF8
  53.     out dx, eax
  54.     mov dx, 0xCFC
  55.     in eax, dx
  56. pop dx
  57. ret
  58.  
  59. times 510-($-$$) db 00
  60. db 0x55, 0xAA
RAW Paste Data