Tôi làm theo hướng dẫn này như một bước đột phá đầu tiên vào phát triển bootloader/OS cho x86 sử dụng NASM:x86 NASM 'org' nghĩa
http://joelgompert.com/OS/TableOfContents.htm
Và tôi trên Lesson 4, mà là làm cho tôi bootloader in chuỗi "Hello, world". Tôi không hiểu ý nghĩa của lệnh org
(chỉ thị?).
Như tôi đã hiểu, org
xác định nơi chương trình đang được thực thi được tải vào bộ nhớ. Điều này là cần thiết khi sử dụng bất kỳ loại nhãn hoặc địa chỉ tương đối nào trong chương trình.
Giả sử tôi có một chuỗi định nghĩa với một nhãn như thế này trong chương trình của tôi:
szHello db 'Hello, world!', 0
Và sau đó tôi sau cố gắng tham chiếu nhãn như thế này (chỉ có đoạn có liên quan):
org 0x7c00
xor ax, ax
mov ds, 0
...
mov si, szHello
lodsb
...
int 0x10 ; Print first character of szHello
Câu hỏi của tôi là, tại sao điều đó không tương đương với điều này? :
org 0
mov ds, 0x7c00
...
mov si, szHello
lodsb
...
int 0x10
Khi tôi chạy ví dụ đầu tiên, chuỗi của tôi xuất hiện chính xác. Ví dụ thứ hai không hoạt động.
Con trỏ đến tài liệu liên quan cũng sẽ được đánh giá cao, nếu vấn đề là một vấn đề khái niệm về phía tôi.
Tuyệt vời, hoạt động, cảm ơn bạn. Tuy nhiên, tôi không chắc tôi hoàn toàn hiểu. 'Org' có sử dụng địa chỉ phân đoạn hoặc bù đắp vào phân đoạn không? –
Đó là một khoảng trống trong phân đoạn hiện tại. –
'mov ds, 0x7c0' không phải là lệnh hợp lệ. Có lẽ bạn có nghĩa là một cái gì đó như 'mov ax, 0x7c0'' mov ds, ax' –