Chương 9 Truy nhập trực tiếp vào bộ nhớ
lượt xem 29
download
Tham khảo tài liệu 'chương 9 truy nhập trực tiếp vào bộ nhớ', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Chương 9 Truy nhập trực tiếp vào bộ nhớ
- chương 9 + Nguyờn mẫu trong dos.h như sau: Truy nhập trực tiếp vào bộ nhớ int peek(unsigned seg, unsigned off); Trong chương này trỡnh bầy cỏc vấn đề: 491 + Cụng dụng: Nhận một word tại địa chỉ phõn đoạn seg:off 492 + Hai kiểu địa chỉ: Địa chỉ phõn đoạn và địa chỉ thực 5. Hàm movedata: Sao cỏc byte. + Truy nhập tới địa chỉ phõn đoạn + Nguyờn mẫu trong mem.h như sau: + Đổi từ địa chỉ phõn đoạn sang địa chỉ thực void movedata(unsigned seg_gui, unsigned off_gui, + Bộ nhớ màn hỡnh, truy nhập trực tiếp vào bộ nhớ màn unsigned seg_nhan, unsigned off_nhan, int n); hỡnh + Cụng dụng: Sao n byte từ seg_gui:off_gui đến + Dựng con trỏ để lấy dữ liệu từ bộ nhớ phõn đoạn seg_nhan:off_nhan + 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 1. Hàm pokeb: Gửi một ký tự vào bộ nhớ. Bộ nhớ màn hỡnh văn bản bắt đầu từ địa chỉ : + Nguyờn mẫu trong dos.h như sau: (0xb800:0x0000) void pokeb(unsigned seg, unsigned off, char value); Khi đưa một ký tự vào vựng nhớ màn hỡnh, thỡ nú sẽ hiện lờn + Cụng dụng: Gửi giỏ trị ký tự value vào bộ nhớ tại địa chỉ màn hỡnh. Mỗi ký tự trờn màn hỡnh chiếm 2 byte trong bộ nhớ phõn đoạn seg:off màn hỡnh: byte đầu chứa mó ASCII, byte thứ hai biểu diễn mầu hiển thị 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ý + Cụng dụng: Nhận một byte tại địa chỉ phõn đoạn seg:off tự khụng nhấp nhỏy, nếu B7=1 thỡ ký tự sẽ nhấp nhỏy. 3. Hàm poke: Gửi một số nguyờn vào bộ nhớ. + Nhúm 2 gồm cỏc bit B6, B5 và B4. Cỏc bit này chứa được + Nguyờn mẫu trong dos.h như sau: một số nguyờn từ 0 đến 7 và biểu thị 8 mầu nền của ký tự. void poke(unsigned seg, unsigned off, int value); + Nhúm 3 gồm cỏc bit B3, B2, B1 và B0. Cỏc bit này chứa được 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ỉ phõn đoạn seg:off 2.2. Trang màn hỡnh 4. Hàm peek: Nhận một số nguyờn từ bộ nhớ.
- Mỗi trang màn hỡnh gồm 80x25 ký tự, do đú cần 80x25x2=4000 //Mặc định hiển thị trang 0 byte 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: /* char buf[100]; chương trỡnh minh hoạ cỏch truy nhập trực tiếp vào bộ unsigned ds,dx; nhớ của màn hỡnh ds = FP_SEG(buf); dx = FP_OFF(buf); */ thỡ ds:dx chứa địa chỉ của mảng buf. #include "dos.h" Vớ dụ 2. Sau khi thực hiện cỏc cõu lệnh: #include "conio.h" char far *pchar; void duarmh(char *day, int dong,I nt cotd, int cotc,I nt m_nen, pchar = (char far*)MK_FP(0xb800:0); int m_chu); 495 496 thỡ pchar trỏ tới địa chỉ đầu của bộ nhớ màn hỡnh. Khi đú ta cú void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); thể sử dụng cỏc lệnh gỏn để truy nhập trực tiếp tới bộ nhớ màn main() hỡnh. { cuaso(26,1,50,80,BLUE); § 4. cỏc vớ dụ minh hoạ duarmh("Chuc mung nam moi", 28, 30, 50, MAGENTA, Chương trỡnh 1. Chương trỡnh minh hoạ cỏch truy nhập trực WHITE); tiếp vào bộ nhớ màn hỡnh cú địa chỉ đầu là 0xB800:0. Chương cuaso(30,20,46,60,RED); trỡnh gồm hàm main() và hai hàm sau: duarmh("Chuc mung nam moi", 40, 30, 50, MAGENTA, 1. Hàm cuaso YELLOW); void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); getch(); thiết lập một cửa sổ mầu cú toạ độ gúc trờn-trỏi là (dongt, cott) và } gúc dưới-phải là (dongd,cotd). Mầu cho bởi tham số maucs. ở đõy void cuaso(int dongt,int cott,int dongd,int cotd,int maucs) sử dụng hàm pokeb và địa chỉ phõn đoạn. /* Dung dia phan doan */ 2. Hàm duarmh { void duarmh(char *day, int dong, int cotd, int cotc,int m_nen, int m_chu); int i, j, p, t, dt, dd, mau; sẽ đưa ra màn hỡnh một dẫy ký tự (chứa trong dóy) tại dũng dong, union REGS v, r; từ cột cotd đến cotc. Mầu nền cho bởi m_nen, mầu chữ cho bởi /* Xac dinh thuoc tinh mau */ m_chữ. ở đõy sử dụng toỏn tử gỏn trờn địa chỉ thực. mau = (maucs
- va cac chi so dong tren dt, dong duoi dd /* Lay dia chi thuc cua bo nho man hinh */ trong trang t buf=(char far*)MK_FP(0xb800,0); */ /* Xac dinh thuoc tinh mau */ t=(dongt-1)/25; mau = (m_nen
- /* #include Xac dinh dia chi cac thu tuc ngat */ #include #include "dos.h" #include #include "conio.h" #include "stdio.h" #include main() typedef void far (*HAM)(void); { void khoi_dong_may(void) unsigned char far *p; /*p se tro toi bang vecto ngat*/ { int n; /* n - so hieu ngat, n=1,2,... */ HAM f; int k; /* vi tri cua ngat n trong bang vecto ngat */ f = (HAM)MK_FP(0xFFFF,0); unsigned seg,off; f(); /* p tro toi bang vecto ngat */ } p=(unsigned char far*)MK_FP(0,0); char mat_khau[]= {'A','B','C','D'}; clrscr(); int n = sizeof(mat_khau)/sizeof(char); 499 500 while(1) void main() { { printf("\n So hieu ngat (Bam 0 - Ket thuc): "); char i, ch, sai_mat_khau; scanf("%d",&n); if(n==0) break; clrscr(); k=(n-1)*4; i=0; off=p[k]+256*p[k+1]; seg=p[k+2]+256*p[k+3]; sai_mat_khau=0; printf("\nDia chi %x:%x",seg,off); cout
- if (toupper(ch)!=mat_khau[i]) #include sai_mat_khau=1; #include } #define VT 132 // vi tri thong bao else //Dia chi vung nho man hinh sai_mat_khau=1; char far *p_mh = (char far*)MK_FP(0xB800,0) ; ++i ; //Dia chi 4 byte chua thoi gian unsigned long far *t_time=(unsigned long } far*)MK_FP(0,0x46C); if (sai_mat_khau) char buf_time[]={'T',47,'I',47,'M',47,'E',47,':', 47, 32, 47, 32, 47, { 32, 47, 32, 47, 32, 47, 32, 47, 32, 47, 32, 47, 32, 47}; cout
- buf_time[26]=giay%10 + 48; delay(400); //Dua thong bao goi ra man hinh } for (i=0; i
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình Kỹ thuật lập trình C: Căn bản & nâng cao - Phần 2
236 p | 25 | 14
-
Chương 9: Truy cập trực tiếp vào bộ nhớ
7 p | 70 | 11
-
Kỹ thuật lập trình - chương 9
7 p | 87 | 6
-
Bài giảng Lập trình C: Chương 09 - GV. Ngô Công Thắng
18 p | 39 | 4
-
Bài giảng Lập trình nâng cao (Advanced Programming) - Chương 9: Kiểu dữ liệu tệp
18 p | 7 | 4
-
chương 9: Hệ thống xuất / nhập (I/O Systems)
17 p | 103 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn