Tôi đang viết chức năng chế độ thực, nên là hàm bình thường với các khung xếp chồng và vì vậy, nhưng nên sử dụng% sp thay vì% esp. Có cách nào để làm điều đó không?Làm thế nào để yêu cầu GCC tạo mã 16 bit cho chế độ thực
Trả lời
Theo như tôi biết, GCC không hỗ trợ tạo mã cho x86 16 bit. Đối với các bộ tải khởi động kế thừa và các mục đích tương tự, bạn nên viết một sơ đồ nhỏ trong ngôn ngữ assembly để đặt cpu ở chế độ 32 bit và truyền thực thi sang mã 32 bit. Đối với các mục đích khác, bạn thực sự không nên viết mã 16 bit.
Bạn vui lòng giải thích nhiều hơn nữa. Điều gì về tùy chọn -m16? –
GCC không tạo mã 8086. Chỉ thị GNU AS .code16gcc
có thể được sử dụng để lắp ráp đầu ra của GCC để chạy ở chế độ 16 bit, đặt asm(".code16gcc")
vào đầu nguồn C của bạn, chương trình của bạn sẽ bị giới hạn ở 64Kibyte.
Tài liệu tại: https://sourceware.org/binutils/docs/as/i386_002d16bit.html#i386_002d16bit –
Sử dụng .code16gcc (Tôi vẫn không chắc chắn ai có thể gọi nó là tính năng ổn định) sẽ tạo mã chạy 16 bit chế độ thực, tuy nhiên nó sử dụng tiền tố hướng dẫn chỉ khả dụng trên 386+. Điều này có nghĩa là nếu bạn đang nhắm mục tiêu 8086/8088 (phần cứng hoặc trình giả lập thực) thì mã sẽ có khả năng không hoạt động đúng cách. Nếu bạn có ý định bootstrap vào chế độ bảo vệ 32 bit thì hãy viết một sơ đồ lắp ráp 16 bit nhỏ để thiết lập mọi thứ, đi vào chế độ được bảo vệ và sau đó gọi tới một hàm 32 bit "C" là khởi đầu chương trình của bạn. –
Tất nhiên, bạn có thể mã hóa bộ mã 16 bit bằng tay trong GCC như lắp ráp nội tuyến sử dụng lệnh __asm__. –
GCC 5.2.0 (và các phiên bản trước đó có thể) hỗ trợ tạo mã 16 bit với cờ -m16
. Tuy nhiên, mã sẽ gần như chắc chắn dựa vào các tính năng xử lý 32 bit (chẳng hạn như các thanh ghi rộng 32 bit), vì vậy bạn nên kiểm tra cẩn thận cụm được tạo.
Từ man
trang:
Tùy chọn -m16 cũng giống như -m32, ngoại trừ rằng nó sẽ tạo ra các ".code16gcc" chỉ thị lắp ráp vào đầu sản lượng lắp ráp sao cho nhị phân có thể chạy ở chế độ 16 bit.
- 1. Độ sâu bit 16 bit
- 2. Ngoại lệ ACRA Chỉ có thể sử dụng 16 bit thấp hơn cho mã yêu cầu
- 3. Trộn mã 32 bit và 16 bit với nasm
- 4. Làm cách nào để yêu cầu Xác thực yêu cầu bị vô hiệu hóa cho HttpHandlers?
- 5. Tôi làm cách nào để yêu cầu HTTPS cho chế độ xem Django này?
- 6. Làm thế nào để tăng tốc độ urllib2 của Python khi thực hiện nhiều yêu cầu
- 7. Tìm trình biên dịch 16 bit x86
- 8. Làm thế nào để chuyển đổi 8 bit đến 16 bit trong VHDL?
- 9. Chuyển đổi độ sâu 16 bit CvMat * sang độ sâu 8 bit
- 10. Tiền tố kích thước vận hành ở chế độ 16 bit
- 11. Làm thế nào để thực thi thứ tự bit struct với trình biên dịch GCC?
- 12. GCC: xin lỗi, chưa thực hiện: chế độ 64 bit không được biên dịch trong
- 13. 16 bit grayscale png
- 14. Chuỗi C++: mã hóa UTF-8 hoặc 16 bit?
- 15. Làm thế nào để thực hiện một yêu cầu POST bên trong mã Sinatra?
- 16. Làm thế nào để cho các tham số tạo mẫu yêu cầu jMeter http tạo ra?
- 17. GCC 4.7.2 yêu cầu ppl?
- 18. Làm thế nào để tạo UISplitViewController ở chế độ dọc?
- 19. Làm cách nào để lưu/tải hình ảnh 16 bit trong .net x64?
- 20. Làm cách nào để buộc MSBuild biên dịch cho chế độ 32 bit?
- 21. cách bật yêu cầu chế độ không đồng bộ?
- 22. Yêu cầu HTTP iOS trong khi ở chế độ nền
- 23. Làm thế nào để chế độ Emacs Python tạo TAB cho thụt lề?
- 24. Làm cách nào để tạo tham số WebMethod yêu cầu
- 25. Python và 16 bit PGM
- 26. Làm thế nào để tạo một va_list trên GCC?
- 27. Làm thế nào để cho phép xác thực chế độ hỗn hợp trong IIS 7.0
- 28. Làm cách nào để xác thực yêu cầu WebClient?
- 29. Chế độ mã hóa mã hóa và xác thực
- 30. Làm thế nào để thực hiện yêu cầu bộ nhớ cache theo yêu cầu trong ASP.NET 3.5
Hệ điều hành nào được cho là chạy dưới? GCC không hỗ trợ MS-DOS. –