나는 간단한 프로그램을 가지고 있는데, 이는 PCI configuration space
(첫 번째 PCI 장치 만)입니다. 그러나 그것은 작동하지 않습니다. YASM :PCI 장치가 어셈블리 언어로 검사 됨
[use 32]
[org 0x7c00]
start:
mov ah, 0x3
int 0x10 ;clear screen
;forming the PCI address
push ax
or ah, 10000000b
xor al, al
or al, 00000001b
shl eax, 16
pop ax
xor al, al
xor ah, ah
push eax
out 0xcf8, eax
in eax, 0xcfc
mov edi, field
stosd
mov si, di
call print_str
ret
field:
print_str:
;print a string in si
mov ax, 0xb800
mov es, ax
xor di, di
mov cx, 128
rep movsw
ret
times 510 - ($ - $$) db 0
dw 0xaa55
감사 : 여기
18: warning: value doesnt fit in 8 bit fild
19: warning: value doesnt fit in 8 bit fild
는 코드입니다.
P. 에뮬레이션을 위해 Bochs를 사용하고 YASM을 어셈블러로 사용합니다.
감사합니다. 그러나 프로그램은 아무것도하지 않습니다 (예를 들어 화면을 지우십시오).모든 in/out 연산이나 32 비트 ('eax '등)에 필요한가? – Vanzef
@Vanzef 코드에 더 많은 문제점에 대한 설명이 추가되었습니다. ['in'] (http://web.itu.edu.tr/kesgin/mul06/intel/instr/in.html)과 ['out'] (http://web.itu.edu.tr/kesgin /mul06/intel/instr/out.html)은 8 비트의 즉각적인 포트 주소 만 허용하며'al','ax' 및'eax'도 마찬가지입니다. 16 비트 포트 주소의 경우 'dx'를 사용해야합니다. – nrz
... 당신은'비트 32 '를 원하지 않습니다! –