2010-01-13 27 views

Trả lời

10

Dấu ":" là sự lưu giữ từ các ngày bộ nhớ được phân đoạn, khi máy tính chạy ở chế độ thực và chỉ có thể thực hiện 64K tại một thời điểm. Số ở bên trái của ":" là phân đoạn của bạn, số ở bên phải là địa chỉ của bạn.

Lệnh cửa sổ debug chấp nhận ký hiệu này nếu bạn muốn poke xung quanh trong bộ nhớ tự hỏi:

C:\Users\Seth> debug 
-d0000:7c00 
0000:7C00 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C30 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C60 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0000:7C70 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 

liên quan đến địa chỉ cụ thể này với, nó chỉ là một địa chỉ đã được chọn để nạp MBR, Xem: http://www.ata-atapi.com/hiwmbr.html

"Nếu một MBR được tìm thấy nó được đọc vào bộ nhớ tại địa điểm 0000: 7c00 và INT 19 nhảy đến vị trí bộ nhớ 0000: 7c00"

1

Tại sao chọn 7C00? Điều đó có lẽ tốt nhất nên được trả lời bởi một nhà thiết kế/lập trình phần cứng BIOS cho BIOS PC ban đầu/gốc của IBM.

Nếu bạn có thể tìm thấy một bản sao của Hướng dẫn tham khảo kỹ thuật máy tính cá nhân của IBM, nó có thể chứa một số manh mối.

16

Câu trả lời đơn giản là 7C00h là 1k (512 byte cho khu vực khởi động cộng với 512 byte bổ sung để sử dụng khu vực có thể khởi động) từ dưới cùng của bộ nhớ 32k gốc đã cài đặt.

Câu trả lời hạnh phúc là org 7C00h đã trở thành đồng nghĩa với boot sector - lập trình bộ nạp khởi động.

+0

512 byte bổ sung có thể là cho ngăn xếp khởi động. –

+0

@Mike Gonta: Tôi đang tìm kiếm câu trả lời như vậy trong nhiều năm, trong nhiều tài liệu và hướng dẫn, không có kết quả. Nhưng câu trả lời của bạn là tốt nhất và giải quyết những bí ẩn. Cảm ơn bạn rất nhiều vì điều đó. Bạn đã cho tôi mảnh ghép cuối cùng đã dẫn tôi đến liên kết này: http://www.glamenv-septzen.net/en/view/6 ... Nhưng có một bí ẩn cuối cùng đối với tôi: Tại sao họ lại sử dụng 55 AA cho chữ ký khởi động? Tôi nghi ngờ rằng có một cái gì đó để làm với các mẫu bit họ là: 01010101 10101010, nhưng không biết những gì. Có lẽ bạn biết? – SasQ

0

Đọc bài viết này:

http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders

Từ URL trên, BIOS (đó là phần cứng một cách hiệu quả PC) sẽ thực hiện chuyển vào bộ nhớ tại 0000: 7c00 để tiếp tục thực hiện trong chế độ 16-bit.

Và trích dẫn từ trên cao:

Một bootloader chạy dưới những điều kiện nhất định mà các lập trình viên phải đánh giá cao để làm cho một bộ nạp khởi động thành công. sau gắn liền với Bootloader khởi xướng bởi BIOS PC:

  • các sector đầu tiên của một ổ đĩa chứa bộ nạp khởi động của nó.
  • Một sector là 512 byte - hai byte cuối cùng phải là 0xAA55 (tức là 0x55 theo sau là 0xAA) hoặc nếu không BIOS sẽ coi ổ đĩa đó là không thể khởi động.
  • Nếu mọi thứ trong đơn đặt hàng , cho biết khu vực đầu tiên sẽ được đặt ở địa chỉ RAM 0000: 7C00 và vai trò của BIOS kết thúc khi nó chuyển quyền kiểm soát đến 0000: 7C00. (I E.nó JMPs đến địa chỉ đó)

Vì vậy, từ lúc khởi động, nếu u muốn CPU để bắt đầu thực thi mã của bạn, nó phải được đặt trong bộ nhớ tại 0000: 7c00. Và phần này của mã được nạp từ sector đầu tiên của đĩa cứng - cũng được thực hiện bởi phần cứng. Và nó chỉ là khu vực đầu tiên được nạp, phần còn lại của các phần khác của mã sau đó phải được nạp bởi "bộ nạp khởi động" ban đầu này.

Thông tin thêm về lĩnh vực đầu tiên ổ cứng và thiết kế 7c00:

http://www.ata-atapi.com/hiwdos.html

http://www.ata-atapi.com/hiwmbr.html

Xin đừng nhầm lẫn với khởi động chế độ của CPU - câu lệnh đầu tiên nó sẽ lấy và thực thi tại địa chỉ thực 0xfffffff0 (xem trang 9-5):

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

và ở giai đoạn này nó đang thực hiện không bay hơi (nghĩa là bạn không thể lập trình lại nó dễ dàng, và do đó không phải là một phần trách nhiệm của bộ nạp khởi động) mã BIOS.

Các vấn đề liên quan