Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: [Hỏi]GCC hoặc C++ Compiler...

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    45

    Question [Hỏi]GCC hoặc C++ Compiler...

    - Có bạn nào có thể chỉ giúp mình trình biên dịch nào support biên dịch code C++ ra dạng binary gốc giống NASM biên dịch file asm không (không phải biên dịch ra chạy trên DOS hay Windows nha).

    - Tại mình xài GCC (có thể không biết cú pháp dùng để compile) khi compile nó tạo ra file .exe để chạy trên DOS, như vậy mình không thể call nó trong hệ điều hành mình đang viết được.

    - Hic, chứ giờ ngồi code 1 đống hàm = ASM chắc :(.

    //À, 16bit nha.

    // Tiện thể có bạn nào có tài liệu về cấu trúc máy tính không, ví dụ như làm sao CPU có thể thực thi code mã máy... (cái này chắc nghiêng về lĩnh vực điện tử hơn ).

    - Ví dụ:
    mov AX,0x1235
    mov WORD[variable001],AX
    mov BX,0x1230
    mul BX

    => bên trong CPU nó chạy như thế nào ???

    Thân,
    Cảm ơn nhiều.

  2. #2
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Tiện thể có bạn nào có tài liệu về cấu trúc máy tính không, ví dụ như làm sao CPU có thể thực thi code mã máy... (cái này chắc nghiêng về lĩnh vực điện tử hơn ).

    - Ví dụ:
    mov AX,0x1235
    mov WORD[variable001],AX
    mov BX,0x1230
    mul BX

    => bên trong CPU nó chạy như thế nào ???
    Cái bạn hỏi là kiến trúc máy tính (computer architecture) chứ ko phải cấu trúc máy tính (computer structure) ^_^

  3. #3
    Ngày gia nhập
    01 2009
    Bài viết
    2

    - Ví dụ:
    mov AX,0x1235
    mov WORD[variable001],AX
    mov BX,0x1230
    mul BX
    Kiếm quyển Vi Xử Lý của KS. Văn Thế Minh đọc chắc là okay

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Trích dẫn Nguyên bản được gửi bởi khanhduy301 Xem bài viết
    - Có bạn nào có thể chỉ giúp mình trình biên dịch nào support biên dịch code C++ ra dạng binary gốc giống NASM biên dịch file asm không (không phải biên dịch ra chạy trên DOS hay Windows nha).

    - Tại mình xài GCC (có thể không biết cú pháp dùng để compile) khi compile nó tạo ra file .exe để chạy trên DOS, như vậy mình không thể call nó trong hệ điều hành mình đang viết được.
    Mình thì chưa biết chương trình nào có thể biên dịch chương trình C++ ra thuần ASM của CPU.

    Nhưng mình nghĩ chắc không có đâu vì hầu như các function của C hay C++ khi dịch thì phải được xác định trước trên HDH nào đó. Tức là có hệ điều hành rồi mới có ngôn ngữ lập trình cấp cao.

    Mình lấy ví dụ thế này: Bạn đang viết 1 HDH chạy trên máy giặt. Chtr của bạn có hàm printf để hiển thị lên màn hình tinh thể lỏng máy giặt.

    Chắc chắn hàm printf này này không giống trên máy tính được. Vì các ngắt của máy tính khác với ngắt của máy giặt do đó bạn cần phải viết lại từ đầu...

    Trừ tường hợp 1 khi bạn viết ứng dụng trên 1 CPU khác. Lúc này bạn sẽ viết 1 chương trình nhúng bằng C và dịch bằng 1 compiler của hãng sản xuât CPU đó.

    - Hic, chứ giờ ngồi code 1 đống hàm = ASM chắc :(.
    Chính xác là phải làm vậy. Linux Toval cũng phải viết đoạn đầu cho Linux bằng ASM mà. Nếu bạn muốn viết HDH thì cũng phải viết bằng ASM.

    - Ví dụ:
    mov AX,0x1235
    mov WORD[variable001],AX
    mov BX,0x1230
    mul BX

    => bên trong CPU nó chạy như thế nào ???
    CPU chỉ có thể chạy đoạn code ASM trên khi đó đã được nạp trên RAM và được jump tới vị trí đoạn code này, sau đó nó chạy thế nào thì phụ thuộc vào các đoạn code như cmp, jmp.... Như vậy khi bạn bật máy tính thì BIOS sẽ tìm partition active và sẽ nạp 512bytes code ASM đầu tiên trên sector 0 của partition đó. CPU sẽ chạy ngay tại thời điểm này và chương trình này gọi là chương trình BOOT. Tiếp tục chương trình BOOT này sẽ đọc các dãy sector tiếp theo đó để nạp lên RAM (với MSDOS thì sẽ load 15 sector tiếp theo chính là vị trí files io.sys và msdos.sys để nó có thể hiểu được kiến trúc folder/files (-> kernel) rồi cuối cùng là command.com (-> shell) ) để tạo nên HDH. Tới lúc này thì chương trình .exe mới chạy trên nó.

    Mình chỉ hiểu chừng nấy thôi vì đây là lý thuyết của kiến trúc máy tính...
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 28-01-2009 lúc 07:01 PM.

  5. #5
    Ngày gia nhập
    10 2007
    Bài viết
    45

    OS của mình viết có sơ đồ hoạt động như sau:
    ***Code bootsector = NASM...
    -> Đầu tiên bootsector sẽ load bảng FAT của đĩa lên vùng nhớ 0x1000:0x0000, tìm cluster của file kernel00.bin, load toàn bộ file kernel00.bin lên vùng nhớ 0x2000:0x0000, jmp tới đó để chạy nó.
    *** Code file kernel00.bin = NASM...
    -> File này sẽ chuyển VGA sang mode 1024x768x32bit sau đó load hình lên VGA.

    => Vấn đề ở đây là nếu code = NASM hoài chắc nên cần phải dùng C++ 16bit. Mà các trình compiler C++ 16bit đều cho ra file dạng PE(.exe) nên mình ko biết cách gọi.

    -> Cảm ơn các bạn đã reply, hiện nay mình tìm ra 1 giải pháp là ở bootsector, sau khi load kernel00.bin lên RAM, nó sẽ chuyển comp sang chế độ protected mode 32bit rồi jmp đến vùng nhớ chứa kernel00.bin.
    Còn file kernel00.bin mình code và compile = GCC 32bit.

    - Làm việc ở môi trường 32bit thì quản lý bộ nhớ có vẻ thuận lợi hơn 16bit nhưng có 1 số vấn đề em bí mong các Bác giúp :
    -> Các BIOS interrupt không hoạt động, chỉ hoạt động ở 16bit
    ==> Làm sao để ngắt bàn phím? VGA?
    -> Không set được resolution của VGA, do VESA chỉ chạy trong Realmode. Search thì thấy bảo phải chuyển xuống 16bit set xong quay lên (cách này cực slow) hoặc dùng driver của hãng sx card VGA .
    -> Làm cách nào để đọc đĩa trong môi trường 32bit mà ko cần chuyển xuống 16bit?

    Thân,
    Cảm ơn nhiều.

Các đề tài tương tự

  1. Phần mềm lập trình C++ Borland C++ Compiler version 5.5
    Gửi bởi hocphp_1998 trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 4
    Bài viết cuối: 23-05-2011, 11:04 AM
  2. Message Compiler (MC.EXE)?
    Gửi bởi nthung trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 15-09-2010, 01:41 PM
  3. C/C++ Compiler Online !
    Gửi bởi Xcross87 trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 6
    Bài viết cuối: 20-02-2010, 03:58 PM
  4. cách sử dụng thư viện Fmod.dll hoặc Bass.dll?
    Gửi bởi RainCrystal trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 27-09-2009, 08:20 PM
  5. bộ công cụ compiler của VC++6.=
    Gửi bởi nguyenk2089@yahoo.com trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 12-09-2008, 07:37 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn