tôi gần đây đã bắt đầu lập trình lắp ráp cho lõi lõi. Bản trình diễn nhỏ đầu tiên của tôi, chỉ với phần .text, chạy mà không có bất kỳ vấn đề gì.di chuyển nội bộ không cố định lên
Là phần mở rộng hợp lý, tôi muốn cấu trúc mã trình lắp ráp thành các phần thông thường: .text, .data, .bss.
Vì vậy, tôi đã viết chương trình đơn giản sau đây:
.globl _start
.section .text
_start:
b main
b .
b .
b .
b .
b .
b .
b .
main:
ldr r0, x
nop
.section .data
x: .word 0xf0f0f0f0
.end
Nhưng
/opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o
thoát với lỗi
prog.s: Assembler messages:
prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
make: *** [prog.o] Error 1
tôi không có đầu mối tại sao lắp ráp phàn nàn về di dời, vì tôi nghĩ đó là nhiệm vụ của mối liên kết. Tôi có thể tưởng tượng rằng tôi phải nói với người lắp ráp rằng phần .data của tôi không nằm ở vị trí bộ nhớ cuối cùng ở giai đoạn lắp ráp, nhưng tôi không thể tìm thấy bất cứ điều gì liên quan.
Mặc dù tôi tìm thấy một cách để lấy mã lắp ráp một cách chính xác, bằng cách thay thế
.section .data
bởi
.org .
đó không phải là một giải pháp thỏa mãn. Đặc biệt là trong thực tế là các tài liệu khí nêu bật ý nghĩa của phần này.
Có lẽ ai đó của bạn các chuyên gia có thể giúp tôi đạt được một số trí tuệ
Cảm ơn bạn đã giải thích và ví dụ. Điều này hoặc một cái gì đó tương tự nên đi vào phần cánh tay của tài liệu binutils. Tôi sẽ ghi nhớ rằng các mối liên kết không quy mô lớn và coder quy mô nhỏ di dời. Nếu tôi có thêm thời gian, tôi sẽ nghiên cứu một số chương trình c đã bị tháo rời và hy vọng có được một số thông tin chi tiết hơn ... – user1146332
đây có phải là câu trả lời được chấp nhận không? – aditya