2009-05-21 32 views
5

Tôi đang xem xét công cụ gỡ lỗi phần cứng chạy trên CPU trần (x86), chế độ được bảo vệ 32 bit và không có hệ điều hành. Do ràng buộc về thời gian, tôi sẽ không viết công cụ tất cả trong assembly x86. Tôi thích ngôn ngữ Ada (nhưng không có kinh nghiệm với nó) và nghĩ rằng nó có thể là thú vị để sử dụng Ada hơn là C cho dự án này.Ada và assembly

Với C người ta có thể sử dụng lắp ráp nội tuyến hoặc gọi chương trình con được viết trong assembly để truy cập BIOS cho những thứ cơ bản như bàn phím I/O hoặc hiển thị văn bản trên màn hình. Ada có khả năng tương tự không? Và nếu có, có ai biết về bất kỳ tài nguyên hoặc hướng dẫn nào để gọi các phương thức lắp ráp và liên kết với chúng không?

+2

Tại sao bạn khăng khăng không sử dụng hệ điều hành. Truy cập tất cả phần cứng (màn hình, bàn phím, v.v.) rất khó, tại sao không để hệ điều hành xử lý nó. Linux là miễn phí ;-) – lothar

+0

Tại sao tôi nhấn mạnh? Vâng, tôi đang gỡ lỗi phần cứng, không phải viết phần mềm Linux! : p Tôi cần phải đặt lại bus PCI và sửa đổi thanh ghi cấu hình, và. Tôi đã không làm được nhiều việc với Linux cấp thấp, nhưng trong thế giới Windows, lỗi chẵn lẻ (PERR #), lỗi hệ thống (SERR #) và thiết lập lại bus PCI (RESET #) là những sự kiện thảm khốc. –

Trả lời

5

Bạn có thể sử dụng mã lắp ráp nội tuyến trong Ada. Bạn cần sử dụng gói System.Machine_Code cung cấp chức năng (overloaded) Asm.

+0

Cảm ơn! Điều đó sẽ làm các trick! –

2

Hướng dẫn tham khảo GNAT có một phần trên Machine Code Insertions và trong khi cụ thể là GNAT, bạn có thể hiểu được cách hoạt động ngay cả khi bạn đang sử dụng trình biên dịch khác.

+0

Cảm ơn, tôi sẽ gắn bó với GNAT vì tôi muốn sử dụng các công cụ miễn phí. Đó là một dự án sở thích sau khi tất cả. –