2016-10-22 2 views
2

마침내 어셈블리 및 베어 메탈 프로그래밍의 기본 사항을 이해했습니다. 또는 적어도 이것은 내가 생각한 것입니다. 내가이 USB로이 불에Beeping Bootloader (Intel x86)

[BITS 16] 
[ORG 0X7C00] 

Yaz: MOV SI, Msa 
MOV AL, [SI] 
INC SI 
INT 0x10 
OR AL, AL 
JZ Yaz 
JMP Halt   

Halt: hlt 

Msa db "Test Successful", 0 

TIMES 510 - ($ - $$) DB 0 
DW 0xAA55 

(처음 : 자신을)이 쓴 (나는 실제 하드웨어에서 그 테스트를 잘 알고 그런 좋은 생각이 아니다), 다시 부팅. BIOS는 테스트를 수행하고 내 부트 로더 (또는 실제로 sth로 부팅하지 않으므로 "프로그램")로 부팅되었습니다. 아무 것도 출력하지 않았고 PC가 삐 소리를 내기 시작했습니다.

부트 섹터 바이러스 보호, 빠른 부팅을 사용하지 못하게했지만 모든 것을 시도했지만 부팅 할 때마다 Ctrl + Alt + Delete를 누르기 전까지 내 얼굴에 신호음이 울립니다.

내가 뭘 잘못 했니? 미리 감사드립니다.

+0

을 .com/misc/stackoverflow/40143596/boot.asm. 하지만 당신이 DS (0으로 설정)를 설정하지 않았기 때문에 문제가 될 수도 있고 (잘못된 세그먼트에서 문자열을 읽음) 무한 루프로 끝나지 않을 수도 있습니다. 'Halt : hlt' 후에'JMP Halt'을 움직여야한다고 생각해. 적절한 무한 루프가 없으므로 'hlt'이후 메모리에 있던 일이 무엇이든 실행될 수 있습니다. –

+0

경고음 코드는 일반적으로 디버깅에 도움이되는 제조업체 별 의미를 가지고 있기 때문에 마더 보드를 지정하는 것이 도움이 될 수 있습니다. – Aurora0001

+0

또한 실제로 인쇄 할 것으로 생각되는 _AH_ (Int 10h의 하위 함수)를 설정하지 않습니다. 나는 당신이 _AH_ 레지스터에 0eh를 넣고 [BIOS TTY output] (http://www.ctyme.com/intr/rb-0106.htm)을 사용하기를 원한다고 생각합니다. 뿐만 아니라 인쇄 전에 NUL (0) 터미네이터를 확인해야합니다. –

답변

2

내 PC 비프 음 대신 내가 찾던 문자열 출력합니다하지 않는 작업 코드 주석을 검토 한 후 : HTTP : //www.capp-sysware이 시도 할 수 있습니다

org 7c00h 
bits 16 
main: 
xor ax, ax 
mov ds, ax 
mov es, ax   
mov ss, ax 
mov sp, 7c00h  
cld     
xor bx, bx   
mov si, MESAJ  
call yaz 
cli 
durdur: 
hlt 
jmp durdur 
yaz: 
push ax 
mov ah, 0Eh  
yenikarakter: 
lodsb         
test al, al 
je bitir   
int 10h   
jmp yenikarakter  
bitir: 
pop ax 
ret 
MESAJ: 
db "Test basarili!", 10, 13, 0 
times 510-($-$$) db 00h 
dw 0xAA55 
관련 문제