2010-01-01 41 views
2

我需要能夠在程序集中編寫程序來讀取磁盤的第一個扇區(MBR)並將其寫入軟盤或至少顯示數據。 據我所知,INT 13h和25h不能在Windows保護模式下工作,我甚至在Dos中試過我的代碼,但是當我運行程序時dos系統掛起。這是代碼:程序集INT 13h - 讀取磁盤問題

MOV byte ptr es:[bx], offset result 
    MOV  AL,1 ;number ofsectors to read 
    MOV  Cl,1 
    MOV  ch,0 
    mov  dl,80h ;the HDD 
    mov  dh,1 
    mov ah,02h 
    INT  13h 

結果是緩衝區變量。

在此先感謝。

+0

請使用「代碼」功能來標記代碼演示。 – 2010-01-01 20:49:59

回答

1

YEB。它終於奏效了。這是代碼(僅在DOS下運行,因爲INT 13H無法在Windows操作系統上運行。

  mov dx,80h 
     mov cx,1 
     mov bx,ds 
     mov es,bx 
     mov bx,offset result 
     mov ax,0201h 
     int 13h  
1

我覺得這條線是錯誤的

MOV byte ptr es:[bx], offset result ' attempts to write memory [bx] 

應該

MOV es, segment_offset ' probably not needed 
MOV bx, buffer_offset 
... 

也許你也有恢復ES,例如

push es 
mov es, ... 
... 
pop es 
' done 
+0

感謝尼克d 我改變了我的代碼此: MOV DX,80H;第一物理磁盤 MOV CX,1;磁頭1,扇區0 MOV BX,DS; MOV ES,BX;指向引導記錄緩衝器 MOV BX,OFFSET結果;讀入引導記錄 mov ax,0201h;讀取一個扇區 int 13h I t似乎有效。當我打印出來時,它給了我很多垃圾,但我如何確保它是真正的MBR? 謝謝大家耐心閱讀我的問題。 – Auxiliary 2010-01-01 22:32:53

+0

@輔助,請查看http://mirror.href.com/thestarman/asm/mbr/STDMBR.htm,其中提供了大量有關MBR的信息。 – 2010-01-01 22:44:54