YOMEDIA
ADSENSE
C++ và lập trình hướng đối tượng_chương 9
50
lượt xem 7
download
lượt xem 7
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Tham khảo tài liệu 'c++ và lập trình hướng đối tượng_chương 9', 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ả
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: C++ và lập trình hướng đối tượng_chương 9
- ch¬ng 9 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 § 1. C¸c hµm truy nhËp theo ®Þa chØ ph©n ®o¹n 1. Hµm pokeb: Göi mét ký tù vµo bé nhí. + Nguyªn mÉu trong dos.h nh sau: void pokeb(unsigned seg, unsigned off, char value); + C«ng dông: Göi gi¸ trÞ ký tù value vµo bé nhí t¹i ®Þa chØ ph©n ®o¹n seg:off 2. Hµm peekb: NhËn mét ký tù tõ bé nhí. + Nguyªn mÉu trong dos.h nh sau: char peekb(unsigned seg, unsigned off); + C«ng dông: NhËn mét byte t¹i ®Þa chØ ph©n ®o¹n seg:off 3. Hµm poke: Göi mét sè nguyªn vµo bé nhí. + Nguyªn mÉu trong dos.h nh sau: void poke(unsigned seg, unsigned off, int value); + 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 4. Hµm peek: NhËn mét sè nguyªn tõ bé nhí.
- + Nguyªn mÉu trong dos.h nh sau: int peek(unsigned seg, unsigned off); 491 492 + 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. + Nguyªn mÉu trong mem.h nh sau: void movedata(unsigned seg_gui, unsigned off_gui, unsigned seg_nhan, unsigned off_nhan, int n); + C«ng dông: Sao n byte tõ seg_gui:off_gui ®Õn seg_nhan:off_nhan § 2. Bé nhí mµn h×nh v¨n b¶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Ø : (0xb800:0x0000) Khi ®a mét ký tù vµo vïng nhí mµn h×nh, th× nã sÏ hiÖn lªn mµn h×nh. Mçi ký tù trªn mµn h×nh chiÕm 2 byte trong bé nhí 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: B7B6B5B4B3B2B1B0 ®îc chia lµm 3 nhãm: + 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. + Nhãm 2 gåm c¸c bit B6, B5 vµ B4. C¸c bit nµy chøa ®îc mét sè nguyªn tõ 0 ®Õn 7 vµ biÓu thÞ 8 mÇu nÒn cña ký tù. + 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ù. 2.2. Trang mµn h×nh
- Mçi trang mµn h×nh gåm 80x25 ký tù, do ®ã cÇn 80x25x2=4000 byte bé nhí. Thùc tÕ mçi trang mµn h×nh ®îc ph©n bè 4096 = 0x1000 byte. Nh vËy 4 trang mµn h×nh ®îc ph©n bè nh sau: + Trang mµn h×nh thø 0 b¾t ®Çu tõ ®Þa chØ 0xB800:0x0000 + Trang mµn h×nh thø 1 b¾t ®Çu tõ ®Þa chØ 0xB800:0x1000 + Trang mµn h×nh thø 2 b¾t ®Çu tõ ®Þa chØ 0xB800:0x2000 + Trang mµn h×nh thø 3 b¾t ®Çu tõ ®Þa chØ 0xB800:0x3000 2.3. Chän trang hiÓn thÞ T¹i mçi thêi ®iÓm chØ cã thÓ hiÓn thÞ ®îc mét trong 4 trang mµn h×nh. §Ó hiÓn thÞ trang mµn h×nh th ø t (t=0,1,2,3) chóng ta sö dông chøc n¨ng 5 cña ng¾t 0x10 theo mÉu sau: union REGS v,r; v.h.ah = 5 ; // Chøc n¨ng 5 v.h.al = t ; // Sè hiÖu trang mµn h×nh cÇn hiÓn thÞ int86(0x10, &v, &r); // Thùc hiÖn ng¾t 0x10 2.4. VÝ dô minh ho¹ VÝ dô sau dïng hµm pokeb ®Ó ®a c¸c ký tù vµo c¸c trang cña bé nhí mµn h×nh, sau ®ã dïng chøc n¨ng 5 cña ng¾t 0x10 ®Ó chän trang hiÓn thÞ. //CT9_03.CPP #include #include char d1[]={'C',1*16+14,'H',1*16+14,'U',1*16+14,'C',1*16+14}; char d2[]={'M',2*16+15,'U',2*16+15,'N',2*16+15,'G',2*16+15}; void main() { union REGS v,r; clrscr();
- //MÆc ®Þnh hiÓn thÞ trang 0 for (int i=0;i
- void far *MK_FP(seg,off) VÝ dô 1. Sau khi thùc hiÖn c¸c c©u lÖnh: char buf[100]; unsigned ds,dx; ds = FP_SEG(buf); dx = FP_OFF(buf); th× ds:dx chøa ®Þa chØ cña m¶ng buf. VÝ dô 2. Sau khi thùc hiÖn c¸c c©u lÖnh: char far *pchar; pchar = (char far*)MK_FP(0xb800:0); th× pchar trá tíi ®Þa chØ ®Çu cña bé nhí mµn h×nh. Khi ®ã ta cã thÓ sö dông c¸c lÖnh g¸n ®Ó truy nhË p trùc tiÕp tíi bé nhí mµn h×nh. § 4. c¸c vÝ dô minh ho¹ Ch¬ng tr×nh 1. Ch¬ng tr×nh minh ho¹ c¸ch truy nhËp trùc tiÕp vµo bé nhí mµn h×nh cã ®Þa chØ ®Çu lµ 0xB800:0. Ch¬ng tr×nh gåm hµm main() vµ hai hµm sau: 1. Hµm cuaso void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); 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 sö dông hµm pokeb vµ ®Þa chØ ph©n ®o¹n. 2. Hµm duarmh void duarmh(char *day, int dong, int cotd, int cotc,int m_nen, int m_chu); sÏ ®a ra mµn h×nh mét dÉy ký tù (chøa trong d·y) t¹i dßng dong, tõ cét cotd ®Õn cotc. MÇu nÒn cho bëi m_nen, mÇu ch÷ cho bëi m_ch÷. ë ®©y sö dông to¸n tö g¸n trªn ®Þa chØ thùc. Trong hµm main() sÏ sö dông c¸c hµm cuaso vµ duarmh ®Ó t¹o hai cöa sæ vµ viÕt hai dßng ch÷ trªn tran g mµn h×nh thø hai (tõ dßng 26 ®Õn dßng 50). /*
- 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 */ #include "dos.h" #include "conio.h" void duarmh(char *day, int dong,I nt cotd, int cotc,I nt m_nen, int m_chu); 495 496 void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); main() { cuaso(26,1,50,80,BLUE); duarmh("Chuc mung nam moi", 28, 30, 50, MAGENTA, WHITE); cuaso(30,20,46,60,RED); duarmh("Chuc mung nam moi", 40, 30, 50, MAGENTA, YELLOW); getch(); } void cuaso(int dongt,int cott,int dongd,int cotd,int maucs) /* Dung dia phan doan */ { int i, j, p, t, dt, dd, mau; union REGS v, r; /* Xac dinh thuoc tinh mau */ mau = (maucs
- trong trang t */ t=(dongt-1)/25; dt=(dongt-1)-t*25; dd=(dongd-1)-t*25; /* Chon t la trang hien thi */ v.h.ah=5;v.h.al=t; int86(0x10,&v,&r); /* Dua cac khoang trong (ma 32) va thuoc tinh mau vao cac vi tri thich hop cua bo nho man hinh */ for (i=dt;i
- char far *buf; union REGS v,r; /* Lay dia chi thuc cua bo nho man hinh */ buf=(char far*)MK_FP(0xb800,0); /* Xac dinh thuoc tinh mau */ mau = (m_nen
- Ch¬ng tr×nh 2. BiÕt ®Þa chØ cña c¸c thñ tôc xö lý ng¾t ®îc lu tr÷ trong bé nhí tõ ®Þa chØ 0000:0000 ®Õn 0000:0x0400. Ch¬ng tr×nh sÏ cho biÕt ®Þa chØ cña thñ tôc xö lý ng¾t n (gi¸ trÞ n nhËp vµo tõ bµn ph Ým). Sè hiÖu cña ng¾t ®îc tÝnh tõ 0, nhng n ®îc ®¸nh sè tõ 1. /* Xac dinh dia chi cac thu tuc ngat */ #include "dos.h" #include "conio.h" #include "stdio.h" main() { unsigned char far *p; /*p se tro toi bang vecto ngat*/ int n; /* n - so hieu ngat, n=1,2,... */ int k; /* vi tri cua ngat n trong bang vecto ngat */ unsigned seg,off; /* p tro toi bang vecto ngat */ p=(unsigned char far*)MK_FP(0,0); clrscr(); while(1) { printf("\n So hieu ngat (Bam 0 - Ket thuc): "); scanf("%d",&n); if(n==0) break; k=(n-1)*4; off=p[k]+256*p[k+1]; seg=p[k+2]+256*p[k+3]; printf("\nDia chi %x:%x",seg,off); } }
- Ch¬ng tr×nh 3. Ch¬ng tr×nh minh ho¹ c¸ch dïng con trá hµm ®Ó thùc hiÖn thñ tôc khëi ®éng l¹i m¸y cña DOS, biÕt ®Þa chØ ®Çu cña thñ tôc nµy lµ 0xFFFF:0000 . Ch¬ng tr×nh yªu cÇu nhËp mËt khÈu. NÕu chän ®óng (bÊm ABCD vµ Enter) th× ch¬ng tr×nh tiÕp tôc lµm viÖc, nÕu vµo sai th× sÏ khëi ®éng l¹i m¸y. #include #include #include #include typedef void far (*HAM)(void); void khoi_dong_may(void) { HAM f; f = (HAM)MK_FP(0xFFFF,0); f(); } char mat_khau[]= {'A','B','C','D'}; 499 500 int n = sizeof(mat_khau)/sizeof(char); void main() { char i, ch, sai_mat_khau; clrscr(); i=0; sai_mat_khau=0; cout
- if (ch==13) break; cout
- Ch¬ng tr×nh 4. Ch¬ng tr×nh minh ho¹ c¸ch dïng biÕn con trá ®Ó lÊy d÷ liÖu vÒ thêi gian hÖ thèng chøa trong 4 byte b¾t ®Çu tõ ®Þa chØ 0:0x46C . Ch¬ng tr×nh còng minh ho¹ c¸ch truy nhËp trùc tiÕp bé nhí mµn h×nh v¨n b¶n (®Þa chØ ®Çu lµ 0xB800:0) vµ c¸ch b¾t phÝm tæng qu¸t. Ch¬ng tr×nh sÏ in ra mµn h×nh c¸c ch÷ c¸i mét c¸ch ngÉu nhiªn. Khi bÊm phÝm F1 ch¬ng tr×nh t¹m dõng ®Ó th«ng b¸o thêi gian. §Ó kÕt thóc ch¬ng tr×nh bÊm phÝm ESC. #include #include #include #define VT 132 // vi tri thong bao //Dia chi vung nho man hinh char far *p_mh = (char far*)MK_FP(0xB800,0) ; //Dia chi 4 byte chua thoi gian unsigned long far *t_time=(unsigned long far*)MK_FP(0,0x46C); 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}; char buf_luu[28]; void thong_bao_thoi_gian() { //Luu trang thai man hinh for (int i=0; i
- int giay = (int)(du/18); //Doi ra ky tu dua vao mang buf_time buf_time[12]=gio/10 + 48; buf_time[14]=gio%10 + 48; buf_time[18]=phut/10 + 48; buf_time[20]=phut%10 + 48; buf_time[24]=giay/10 + 48; buf_time[26]=giay%10 + 48; //Dua thong bao goi ra man hinh for (i=0; i
- if (ch1==0) ch2=getch(); if (ch1==27) //ESC break; if (ch1==0 && ch2==59) // Bam F1 thong_bao_thoi_gian(); } //In cac chu cai mot cach ngau nhien gotoxy(random(80)+1,random(25)+1); putch(random(26)+65); delay(400); } } 503
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
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