Thông tin tài liệu:
TRUY NHẬP TRỰC TIẾP VÀO BỘ NHỚTrong chương này trình bầy các vấn đề:+ Hai kiểu địa chỉ: Địa chỉ phân đoạn và địa chỉ thực+ Truy nhập tới địa chỉ phân đoạn+ Đổi từ địa chỉ phân đoạn sang địa chỉ thực+ Bộ nhớ màn hình, truy nhập trực tiếp vào bộ nhớ màn hình+ Dùng con trỏ để lấy dữ liệu từ bộ nhớ phân đoạn+ Dùng con trỏ hàm để thực hiện các thủ tục của DOS...
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình - chương 9 CHƯƠNG 9 int peek(unsigned seg, unsigned off); TRUY NHẬP TRỰC TIẾP VÀO BỘ NHỚ + Công dụng: Nhận một word tại địa chỉ phân đoạn seg:off 5. Hàm movedata: Sao các byte. Trong chương này trình bầy các vấn đề: + Nguyên mẫu trong mem.h như sau: + Hai kiểu địa chỉ: Địa chỉ phân đoạn và địa chỉ thực void movedata(unsigned seg_gui, unsigned off_gui, + Truy nhập tới địa chỉ phân đoạn unsigned seg_nhan, unsigned off_nhan, int n); + Đổi từ địa chỉ phân đoạn sang địa chỉ thực + Công dụng: Sao n byte từ seg_gui:off_gui đến + Bộ nhớ màn hình, truy nhập trực tiếp vào bộ nhớ màn hình seg_nhan:off_nhan + Dùng con trỏ để lấy dữ liệu từ bộ nhớ phân đoạn + Dùng con trỏ hàm để thực hiện các thủ tục của DOS § 2. BỘ NHỚ MÀN HÌNH VĂN BẢN § 1. CÁC HÀM TRUY NHẬP THEO ĐỊA CHỈ PHÂN ĐOẠN 2.1. Cách biểu diễn ký tự trong bộ nhớ màn hình Bộ nhớ màn hình văn bản bắt đầu từ địa chỉ : 1. Hàm pokeb: Gửi một ký tự vào bộ nhớ. (0xb800:0x0000) + Nguyên mẫu trong dos.h như sau: Khi đưa một ký tự vào vùng nhớ màn hình, thì nó sẽ hi ện lên void pokeb(unsigned seg, unsigned off, char value); màn hình. Mỗi ký tự trên màn hình chiếm 2 byte trong bộ nhớ màn + Công dụng: Gửi giá trị ký tự value vào bộ nhớ tại địa chỉ phân hình: byte đầu chứa mã ASCII, byte thứ hai biểu diễn mầu hiển thịđoạn seg:off gọi là byte thuộc tính. Các bit của byte thuộc tính: 2. Hàm peekb: Nhận một ký tự từ bộ nhớ. B7B6B5B4B3B2B1B0 + Nguyên mẫu trong dos.h như sau: được chia làm 3 nhóm: char peekb(unsigned seg, unsigned off); + Nhóm 1 gồm bit B7 biểu thị sự nhấp nháy. Nếu B7=0 thì ký tự không nhấp nháy, nếu B7=1 thì ký tự sẽ nhấp nháy. + Công dụng: Nhận một byte tại địa chỉ phân đoạn seg:off + Nhóm 2 gồm các bit B6, B5 và B4. Các bit này chứa được m ột 3. Hàm poke: Gửi một số nguyên vào bộ nhớ. số nguyên từ 0 đến 7 và biểu thị 8 mầu nền của ký tự. + Nguyên mẫu trong dos.h như sau: + Nhóm 3 gồm các bit B3, B2, B1 và B0. Các bit này ch ứa đ ược void poke(unsigned seg, unsigned off, int value); một số nguyên từ 0 đến 15 và biểu thị 16 mầu của ký tự. + Công dụng: Gửi giá trị nguyên value vào bộ nhớ tại đ ịa ch ỉ 2.2. Trang màn hìnhphân đoạn seg:off 4. Hàm peek: Nhận một số nguyên từ bộ nhớ. + Nguyên mẫu trong dos.h như sau: 491 492 Mỗi trang màn hình gồm 80x25 ký tự, do đó c ần 80x25x2=4000 //Mặc định hiển thị trang 0byte bộ nhớ. Thực tế mỗi trang màn hình được phân bố 4096 = for (int i=0;i Ví dụ 1. Sau khi thực hiện các câu lệnh: chương trình minh hoạ cách truy nhập trực tiếp vào bộ nhớ của màn hình char buf[100]; unsigned ds,dx; */ ds = FP_SEG(buf); dx = FP_OFF(buf); #include dos.hthì ds:dx chứa địa chỉ của mảng buf. #include conio.h Ví dụ 2. Sau khi thực hiện các câu lệnh: void duarmh(char *day, int dong,I nt cotd, int cotc,I nt m_nen, int m_chu); char far *pchar; ...