2012-01-01 2 views
1

내 간단한 코드 : 나는 bochsdbg에 의해 실행 한 후'LOCK 접두어를 허용하지 않음 (op1 = 0x53, attr = 0x0, mod = 0x0, nnn = 0)'을 수정하는 방법은 무엇입니까?

[ORG 0x7C00] 
    MOV  AH,0x02  ;Using the function of reading floppy 
    MOV  AL,0x01  ;The number of sectors to be read is 1. 
    MOV  CH,0x00  ;Only read 0 track 
    MOV  CL,0x03  ;Only read the third sector 
    MOV  DH,0x00  ;Only read the 0 head 
    MOV  DL,0x00  ;Using driver 0 
    INT  13H 

    JMP $ ;Just for loop forever 


    TIMES 510 - ($ - $$) db 0 ;This is for 1 sector(512 bytes) 
    DW 0xAA55 ;This is for the end of boot sector 

.

그것은 보여줍니다

(0) Breakpoint 1, 0x00007c00 in ??() 
    Next at t=12943079 
    (0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ah, 0x02    ; b402 
    <bochs:3> c 
    00012943849i[FDD ] read() on floppy image returns 0 
    00012989063i[CPU0 ] LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0) 

내가 INT (13)가 오류 메시지 중지하지 CF = 1 오류 상태를 반환한다고 생각합니다.

무슨 일입니까? 그것을 고치는 방법?

는 ~

+0

영어 이외의 알파벳은 코드 주석입니까? –

+0

영어로 된 포럼이기 때문에 (중국어?) 주석을 영어로 번역해야하며 코드를 이해하는 데 의견이 도움이되어야한다고 생각합니다. –

+0

* 단지 * 주석 일지라도, 독자가 코드의 목적을 이해하는 데 도움이되는 이유로 주석이 남아 있다고 가정합니다. 따라서 영어 Q & A 사이트에 게시 할 때 번역하는 것이 좋습니다. 투표가 "너무 현지화 된"것으로 마감했습니다. –

답변

1

당신의 문제는 아마 당신의 코드가 "알 수없는"코드 (잘못된 명령처럼 일어나는 예를 들어, 데이터)를 충돌 및/또는 실행하여 발생 해 주셔서 감사합니다.

문제를 해결하려면 코드에서 버그를 수정해야합니다. 가장 가능성있는 버그는 BIOS에 섹터를로드 할 위치를 알려주지 않습니다 (ES : BX에 BIOS에서 섹터를로드 할 주소가 포함되어 있어야 함). "load sector/s"를 사용하기 전에 ES : BX를 설정하지 않았기 때문에 "BIOS 기능을 사용하면 중요한 코드 (예 : 코드 또는 스택 또는 IVT)를 폐기 할 수 있습니다.

다른 버그로는 유효한 스택을 설정하지 않고 오류를 확인하지 않고 재 시도하지 않습니다. 그러나 이러한 버그는 현재 문제를 일으킬 가능성이 훨씬 적습니다.