Có tồn tại một vài bộ ghép cho các nền tảng khác nhau, được cung cấp tệp nguồn, sẽ tạo ra tệp nhị phân đầu ra trực tiếp được thiết kế để tải tại một địa chỉ cụ thể. Những người lắp ráp như vậy đã được phổ biến cho một số vi điều khiển nhỏ, hoặc cho một số bộ vi xử lý lịch sử như 6502 và Z80. Khi lắp ráp chương trình, nó sẽ là cần thiết để biết địa chỉ nơi nó sẽ được dự kiến sẽ cư trú; sử dụng một địa chỉ khác sẽ yêu cầu lắp ráp lại chương trình. Mặt khác, lắp ráp trong một hệ thống như vậy là một quá trình một bước. Chạy trình assembler trên mã nguồn và nhận được một đầu ra thực thi. Trong một số trường hợp, nó sẽ có thể có mã nguồn, lắp ráp, và đầu ra tất cả trong bộ nhớ cùng một lúc (trên Commodore 64 của tôi, tôi đã sử dụng một assembler được xuất bản trong tạp chí Gazette của Compute làm việc như thế).
Mặc dù ghép lại mọi thứ bất cứ khi nào thay đổi địa chỉ có thể là thực tế cho một chương trình sẽ "chiếm đoạt máy", trong nhiều trường hợp, bạn nên sử dụng quy trình nhiều bước trong đó tệp nguồn được xử lý thành tệp mã đối tượng , chứa các hướng dẫn lắp ráp nhưng cũng chứa các loại thông tin "tượng trưng" khác nhau về chúng; các tệp này sau đó được xử lý theo nhiều cách khác nhau để tạo ra một hình ảnh bộ nhớ có thể được tải trực tiếp vào bộ nhớ, hoặc một tệp đối tượng có thể di chuyển được kết hợp mà trình tải của hệ điều hành sẽ biết cách điều chỉnh cho bất kỳ địa chỉ nào mà nó có thể được tải .
Để hệ thống liên kết đối tượng hữu ích, nó phải cho phép một số loại tính toán địa chỉ được trì hoãn cho đến khi chương trình được liên kết hoặc được tải. Một số hệ thống chỉ cho phép tính toán cực kỳ đơn giản được thực hiện tại thời gian tải/liên kết, trong khi các hệ thống khác cho phép tính toán phức tạp hơn. Các sơ đồ đơn giản hơn có thể hiệu quả hơn khi chúng có thể thực hiện được, nhưng các hạn chế của chúng có thể bắt buộc các giải pháp thay thế. Ví dụ, một thói quen mà sẽ được sử dụng BX để lặp thông qua một cấu trúc dữ liệu với ít hơn 256 byte có thể được viết như một cái gì đó như:
mov bx,StartAddr
lp: mov al, [bx] ... làm một số tính toán inc bx cmp bl, < (StartAddr + Length); Nhà điều hành tiền tố < có nghĩa là "LSB của" jnz lp
Có thể sử dụng cmp bx,(StartAddr+Length)
, nhưng nếu công cụ biên dịch có thể hỗ trợ, so sánh chỉ với byte thấp sẽ nhanh hơn. Mặt khác, một số loại công cụ lắp ráp/liên kết 16 bit có thể yêu cầu tất cả các bản sửa lỗi địa chỉ phải được thực hiện với các địa chỉ 16 bit được lưu trữ trong mã.
Bởi vì các hệ thống khác nhau cho phép các tính năng khác nhau trong định dạng mã đối tượng của chúng, chúng yêu cầu các tính năng khác nhau trong ngôn ngữ lắp ráp của chúng để kiểm soát chúng. Các tập lệnh có thể được chỉ định bởi nhà sản xuất chip, nhưng các tính năng để thể hiện tính toán địa chỉ relocatable thường không.
khác biệt duy nhất là: phương pháp bạn sử dụng phụ thuộc vào hệ điều hành. ví dụ: phương thức C printf() sẽ làm điều gì đó khác trên OS bởi vì mọi HĐH xử lý nó theo cách khác. –