2012-01-01 54 views
1

我簡單的代碼:如何解決'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 

後,我通過bochsdbg運行。

它顯示:

(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

非英文字母只是代碼註釋嗎? – 2012-01-01 07:03:31

+0

我認爲你應該將你的(中文?)評論翻譯成英文,因爲這是一個英語口語論壇,評論有助於理解代碼。 – 2012-01-01 07:06:57

+0

即使他們只是*評論,我認爲這些評論是有原因的,也許可以幫助讀者理解代碼的目的。因此,在發佈到英文問答網站時翻譯它們是有意義的。投票結束爲「太本地化」。 – 2012-01-01 07:08:00

回答

1

你的問題可能是由你的代碼崩潰和/或執行「未知」代碼(如出現這種情況看起來像一個無效的指令數據)引起的。

要解決該問題,您需要修復代碼中的錯誤。最可能的錯誤是沒有告訴BIOS在哪裏加載扇區(ES:BX應該包含您想要BIOS加載該扇區的地址),並且因爲在使用「加載扇區/ s」之前未設置ES:BX 「BIOS功能可能會損壞一些重要的東西(比如你自己的代碼或堆棧,或者IVT)。

其他錯誤包括沒有設置有效的堆棧,沒有檢查錯誤(而不是重試);但這些錯誤不太可能導致您目前的問題。

相關問題