2012-06-24 34 views
6

Tôi đọc ở đâu đó trên internet, trước khi nhảy tới 0x7c00, BIOS tải vào% dl "số ổ đĩa" của thiết bị được khởi động. Nhưng "số ổ" này là gì? Mỗi thiết bị gắn vào máy tính được gán một số bởi BIOS? Nếu vậy, làm thế nào tôi có thể biết số nào là một thiết bị được gán cho?PC boot: đăng ký dl và số ổ đĩa

Đọc mã nguồn của GRUB mà tôi tìm thấy khi% dl có bit 0x80 và 0x70 đặt, nó ghi đè toàn bộ thanh ghi bằng 0x80. Tại sao vậy? Đây là mã:

jmp 3f  /* grub-setup may overwrite this jump */ 
testb $0x80, %dl 
jz 2f 
3: 
/* Ignore %dl different from 0-0x0f and 0x80-0x8f. */ 
testb $0x70, %dl 
jz 1f 
2:  
movb $0x80, %dl 
1: 

Nhân tiện. Có bất kỳ tài nguyên chi tiết nào về quá trình khởi động của PC trong web không? Đặc biệt về những gì BIOS làm trước khi đưa điều khiển cho bộ nạp khởi động và cũng là các mã tiêu chuẩn được sử dụng để giao tiếp với nó (giống như "số ổ"). Tôi đã hy vọng viết bộ nạp khởi động của riêng mình và mọi thứ tôi thấy hơi mơ hồ, không đủ kỹ thuật để thông báo trạng thái chính xác của máy tính khi bộ nạp khởi động của tôi bắt đầu chạy.

Trả lời

3

Chức năng BIOS int 13h chấp nhận số ổ đĩa. Nó được cho là loại số ổ đĩa trong DL, một BIOS hiểu, bởi vì, tốt, nó tự nó sử dụng int 13h để tải các lĩnh vực khởi động.

+0

Ok. Tôi biết bios hiểu nó, nhưng tôi cũng muốn hiểu. :) Những gì tôi muốn biết là các mã này được gán như thế nào. Giống như, nếu chúng là tĩnh (0 cho một thiết bị nhất định, 1 cho một thiết bị khác ... vv) và nếu có, tôi có thể lấy danh sách này ở đâu; và nếu không, bios sẽ gán chúng như thế nào. – Kei

+1

AFAIK, 0x80 là số ổ đĩa hợp lệ duy nhất cho ổ cứng khởi động, tương tự 0x00 cho ổ đĩa mềm khởi động. Có bình luận này trong mã: 'Đây là một cách giải quyết cho các BIOS lỗi mà không vượt qua ổ đĩa khởi động một cách chính xác. Nếu GRUB được lắp vào ổ cứng, hãy kiểm tra xem DL có được đeo mặt nạ đúng cách hay không. Nếu không, giả sử rằng BIOS đã vượt qua một giá trị không có thật và đặt DL thành 0x80, vì đây là ổ đĩa khởi động duy nhất có thể. Nếu GRUB được cài đặt vào đĩa mềm, điều này không có gì (chỉ nhảy) .' Đó là cách truyền thống. Số ổ đĩa không khởi động cao hơn. –

+0

Tôi hiểu. Nó sẽ có cùng số (0x80) cho các ổ đĩa flash và cd-rom không? – Kei