Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Xử lý ngắt trên Dev C++ như thế nào?

  1. #1
    Ngày gia nhập
    11 2010
    Bài viết
    49

    Mặc định Xử lý ngắt trên Dev C++ như thế nào?

    Chào các bạn. chắc hẳn mọi người sẻ nghĩ mình cầm đèn chạy trước otô vì mình chưa học sâu về C tuy nhiên không phải vậy vấn đề của mình gặp khi lập trình trên Dev C++ đây cũng là điều mọi người vướng mắc nhưng CHẤP NHẬN là không có hoặc chuyển qua trình dịch khác.
    Cụ thể như sau. Trong Dev C++ không có hàm gotoxy() vậy mình cần phải viết lại hàm này.
    Cách của mình là sử dụng ngắt màn hình ( Lý thuyết ngắt cứng và ngắt mềm)
    C Code:
    1. void my_goto(int x,int y)
    2. {
    3.      union REGS v,r;
    4.      v.h.ah=2; // ngăt 0x21,2 --- ah=2
    5.      v.h.bh=0; // page màn hình mặc định là page=0;
    6.      // TOA DO X VA Y
    7.      v.h.dh=x;  
    8.      v.h.dl=y;
    9.      int86(0x21,&v,&r);
    10. }
    11. Tuy nhiên chạy trên Dev C++ không được nó báo lỗi bạn nào có thể giúp mình được không.
    12. Mình muốn cách xử lý để thực hiện viết các chương trình ngắt trên dev C cho tiện.
    13. Cảm ơn các bạn nhiều
    14. Y(:DY(:D

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    15

    Có vẻ cái này liên quan đến assembly. Mình chưa được học cái này nên không biết cú pháp. Bạn có thể chỉ rõ hơn được không? Có khi bạn cho người khác hiểu xong sẽ có người giúp

    Chia tay chia tay chiều mưa miên man
    Bong bóng phập phồng lòng ai chứa chan
    Đừng khóc nhé mưa ơi nhạt nhòa lắm
    Chiều phân vân...Cầu vồng xa xăm

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn chạy devc tức là bạn đang chạy trên môi trường hệ điều hành windows. Ngoại trừ dos, các hệ điều hành sau này như windows, linux ... đều dùng cơ chế bảo vệ bộ nhớ và bộ nhớ ảo. Theo đó, bộ nhớ vật lý được chia làm nhiều không gian nhớ ảo và mỗi không gian nhớ được phân quyền khác nhau. Có 4 mức phân quyền. Mức cao nhất là mức 0. Chỉ ở mức này bạn mới có thể gọi được ngắt. Tiện ích cấu hình Bios và lõi của hệ điều hành mới chạy được ở mức này. Mức 1, 2 thì chỉ có driver mới đụng tới được. Ứng dụng được đặt ở mức thấp nhất là mức 3. Do đó ứng dụng ko thể nào gọi ngắt, nếu cố gọi nó ứng dụng sẽ bị crash với lỗi là "priviledge instruction". Ngay cả console trên windows cũng ko phải là dos. Nó là một tiện ích giả lập dos. Tuy nhiên nó vẫn chạy ở mức 3 và ko thể gọi trực tiếp ngắt.

    Muốn dời con trỏ giống như gotoxy, bạn phải dùng các hàm API liên quan đến console mà windows cung cấp. Chi tiết bạn hãy tham khảo trên msdn, hoặc trên 4rum cũng có nữa. Khi nào bí quá thì mới nên hỏi tiếp.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    11 2010
    Bài viết
    49

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Muốn dời con trỏ giống như gotoxy, bạn phải dùng các hàm API liên quan đến console mà windows cung cấp. Chi tiết bạn hãy tham khảo trên msdn, hoặc trên 4rum cũng có nữa. Khi nào bí quá thì mới nên hỏi tiếp.
    Thực sự là em chưa có trình độ cao như vậy đâu. Em đang làm bài tập cần cái hàm gotoxy(). Em cũng có đọc đc code API rồi. nhưng Trên Dev C thì không chạy được ngắt. Em dùng turbo thì được. vậy nên em muốn hỏi về cách chạy trên dev C thôi.

    Mới sinh viên năm 2 bắt đầu dạy lập trình C thôi à.

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi ghost.love Xem bài viết
    Thực sự là em chưa có trình độ cao như vậy đâu. Em đang làm bài tập cần cái hàm gotoxy(). Em cũng có đọc đc code API rồi. nhưng Trên Dev C thì không chạy được ngắt. Em dùng turbo thì được. vậy nên em muốn hỏi về cách chạy trên dev C thôi.

    Mới sinh viên năm 2 bắt đầu dạy lập trình C thôi à.
    Trên windows hay linux thì bạn hãy quên chuyện ngắt đi. Ngắt là chuyện của thời dos. Trên windows bạn chỉ có thể giao tiếp thông qua các hàm api. Muốn ngắt thì chỉ có cách bạn phải viết 1 driver chạy ở mức 0 hoặc 1 mới được. Mà nếu bạn vẫn chưa đủ trình làm việc với api thì cũng đừng nên nghĩ đến chuyện driver để làm gì.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    09 2011
    Bài viết
    84

    Mặc định Xử lý ngắt trên Dev C++ như thế nào?

    bạn cứ dùng từ "ngắt" quá khó hiểu cho mình nếu muốn giúp bạn
    thực tình mình cũng chưa hiểu ngắt trong DOS
    Nếu bạn muốn xài ngắt thì vẫn có
    trên kiến trúc x86 có chỉ lệnh "int" để bạn tạo ra ngắt,
    nhưng mình chỉ biết Linux hỗ trợ int $0x80, cái này dùng để
    giao tiếp với kernel thông qua lớp system call
    ngoài ra Linux còn hỗ trợ lệnh syscall để giao tiếp qua system call
    Còn trên Windows thì mình bó tay vì nó abstract qua API dữ quá
    Ai biết xài chỉ mình với
    RISC better than CISC
    phamthechung0@gmail.com

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi hardwire Xem bài viết
    bạn cứ dùng từ "ngắt" quá khó hiểu cho mình nếu muốn giúp bạn
    thực tình mình cũng chưa hiểu ngắt trong DOS
    Nếu bạn muốn xài ngắt thì vẫn có
    trên kiến trúc x86 có chỉ lệnh "int" để bạn tạo ra ngắt,
    nhưng mình chỉ biết Linux hỗ trợ int $0x80, cái này dùng để
    giao tiếp với kernel thông qua lớp system call
    ngoài ra Linux còn hỗ trợ lệnh syscall để giao tiếp qua system call
    Còn trên Windows thì mình bó tay vì nó abstract qua API dữ quá
    Ai biết xài chỉ mình với
    Windows cũng có ngắt để chuyển vào system call đấy chứ, dùng lệnh asm sysenter. Mã int bao nhiêu thì mình ko nhớ. Tuy nhiên việc này và việc gọi hàm api trong windows là như nhau. Api đã wrap sẵn các param cần thiết trước khi thực hiện system call. Ngoài sysenter thì còn có int 3 cũng là 1 ngắt ( interrupt ) được phép xài trong user mode. Những ngắt còn lại trong windows đều phải thực hiện ở driver. Mình thấy linux cũng thế mà bạn. Nó mà cho gọi ngắt trực tiếp từ mức user chắc dữ liệu ổ cứng bị phá tanh banh ko còn gì cả.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    11 2010
    Bài viết
    49

    Thực sự là dùng được vì mình dùng turbo vẫn ngắt trên windows được. nhưng điều đó là không thể với Dev C++.
    Tình hình này chắc phải theo học cái API thôi.
    Bạn nào cho mình xin cái link học từ sơ cấp với nha.

  9. #9
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi ghost.love Xem bài viết
    Thực sự là dùng được vì mình dùng turbo vẫn ngắt trên windows được. nhưng điều đó là không thể với Dev C++.
    Tình hình này chắc phải theo học cái API thôi.
    Bạn nào cho mình xin cái link học từ sơ cấp với nha.
    Mình đã giải thích cho bạn ngay từ bài trả lời đầu tiên của mình rồi cơ mà. Khác với TC, DevC chạy trên win thật, ko qua giả lập. Vì vậy nó ko thể gọi trực tiếp ngắt. Trong khi đó TC nó chạy trong dos. Mà dos trong win là một dạng giả lập, ko phải dos thật. Và ngắt trong đó cũng là giả lập nốt. Bạn gọi ngắt, hay làm cái gì trên đó mà được là do chương trình giả lập chiều theo ý bạn thôi. Mà chương trình console dùng để giả lập cho dos nó cũng dùng các hàm api đó bạn à.
    Bạn làm ko được trên DevC là vì bạn ko chịu xài hàm API. Trong khi đó bạn lại so sánh TC chạy thông qua giả lập và được giả lập bao che và gọi sẵn các hàm API bên dưới. Đây là 1 phép so sánh rất ko hợp lý.
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 21-09-2011 lúc 11:51 PM.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  10. #10
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Hi chủ topic.
    Mình hiểu ý bạn rồi,
    cái bạn cần có trong đây nè
    http://forums.congdongcviet.com/showthread.php?t=33962
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

  1. Suy ngẫm trên đường phượt
    Gửi bởi Umove trong diễn đàn Giải trí - Thư giãn
    Trả lời: 0
    Bài viết cuối: 12-12-2012, 01:03 PM
  2. Cách tạo ra số ngẫu nhiên trên mảng
    Gửi bởi acumen trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 12
    Bài viết cuối: 26-06-2011, 03:45 PM
  3. Thảo luận về thuật toán tìm đường đi ngắn nhất (có chi phí ít nhất) trên ma trận
    Gửi bởi hunterphu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 10-08-2010, 12:05 AM
  4. ngắt bàn phím trên C
    Gửi bởi quangitbk trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 24-04-2010, 11:14 AM
  5. Thật toán xuất dãy con no tăng nghiêm ngặt trên C++?
    Gửi bởi nhoemlem trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 28-04-2009, 11:16 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