intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Truy nhập trực tiếp vào bộ nhớ

Chia sẻ: Nguyen Thanh Luan | Ngày: | Loại File: DOC | Số trang:7

65
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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

Chủ đề:
Lưu

Nội dung Text: Truy nhập trực tiếp vào bộ nhớ

  1. ch¬ng 9 4. Hµm peek: NhËn mét sè nguyªn tõ bé nhí. Truy nhËp trùc tiÕp vµo bé nhí + Nguyªn mÉu trong dos.h nh sau: Trong ch¬ng nµy tr×nh bÇy c¸c vÊn ®Ò: int peek(unsigned seg, unsigned off); 491 + C«ng dông: NhËn mét word t¹i ®Þa chØ ph©n ®o¹n 492 + Hai kiÓu ®Þa chØ: §Þa chØ ph©n ®o¹n vµ ®Þa chØ thùc seg:off + Truy nhËp tíi ®Þa chØ ph©n ®o¹n 5. Hµm movedata: Sao c¸c byte. + §æi tõ ®Þa chØ ph©n ®o¹n sang ®Þa chØ thùc + Nguyªn mÉu trong mem.h nh sau: + Bé nhí mµn h×nh, truy nhËp trùc tiÕp vµo bé nhí mµn void movedata(unsigned seg_gui, unsigned off_gui, h×nh unsigned seg_nhan, unsigned off_nhan, + Dïng con trá ®Ó lÊy d÷ liÖu tõ bé nhí ph©n ®o¹n int n); + Dïng con trá hµm ®Ó thùc hiÖn c¸c thñ tôc cña DOS + C«ng dông: Sao n byte tõ seg_gui:off_gui ®Õn seg_nhan:off_nhan § 1. C¸c hµm truy nhËp theo ®Þa chØ ph©n ®o¹n § 2. Bé nhí mµn h×nh v¨n b¶n 1. Hµm pokeb: Göi mét ký tù vµo bé nhí. + Nguyªn mÉu trong dos.h nh sau: 2.1. C¸ch biÓu diÔn ký tù trong bé nhí mµn h×nh void pokeb(unsigned seg, unsigned off, char value); Bé nhí mµn h×nh v¨n b¶n b¾t ®Çu tõ ®Þa chØ : + C«ng dông: Göi gi¸ trÞ ký tù value vµo bé nhí t¹i ®Þa chØ (0xb800:0x0000) ph©n ®o¹n seg:off 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í 2. Hµm peekb: NhËn mét ký tù tõ bé nhí. mµn h×nh: byte ®Çu chøa m· ASCII, byte thø hai biÓu diÔn + Nguyªn mÉu trong dos.h nh sau: mÇu hiÓn thÞ gäi lµ byte thuéc tÝnh. C¸c bit cña byte thuéc char peekb(unsigned seg, unsigned off); tÝnh: + C«ng dông: NhËn mét byte t¹i ®Þa chØ ph©n ®o¹n B7B6B5B4B3B2B1B0 seg:off ®îc chia lµm 3 nhãm: 3. Hµm poke: Göi mét sè nguyªn vµo bé nhí. + Nhãm 1 gåm bit B7 biÓu thÞ sù nhÊp nh¸y. NÕu B7=0 + Nguyªn mÉu trong dos.h nh sau: th× ký tù kh«ng nhÊp nh¸y, nÕu B7=1 th× ký tù sÏ nhÊp nh¸y. void poke(unsigned seg, unsigned off, int value); + 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ù. + 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. + Nhãm 3 gåm c¸c bit B3, B2, B1 vµ B0. C¸c bit nµy chøa #include ®îc mét sè nguyªn tõ 0 ®Õn 15 vµ biÓu thÞ 16 mÇu cña ký tù. char d1[]={'C',1*16+14,'H',1*16+14,'U',1*16+14,'C',1*16+14}; 2.2. Trang mµn h×nh char Mçi trang mµn h×nh gåm 80x25 ký tù, do ®ã cÇn d2[]={'M',2*16+15,'U',2*16+15,'N',2*16+15,'G',2*16+15}; 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 void main() ph©n bè nh sau: { + Trang mµn h×nh thø 0 b¾t ®Çu tõ ®Þa chØ union REGS v,r; 0xB800:0x0000 clrscr(); + Trang mµn h×nh thø 1 b¾t ®Çu tõ ®Þa chØ //MÆc ®Þnh hiÓn thÞ trang 0 0xB800:0x1000 for (int i=0;i
  3. § 3. chuyÓn §æi ®Þa chØ 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è 3.1. §Ó chuyÓn tõ ®Þa chØ thùc sang ®Þa chØ ph©n maucs. ë ®©y sö dông hµm pokeb vµ ®Þa chØ ph©n ®o¹n. ®o¹n ta dïng c¸c macro: 2. Hµm duarmh unsigned FP_SEG(®Þa_chØ_thùc) void duarmh(char *day, int dong, int cotd, int cotc,int unsigned FP_OFF(®Þa_chØ_thùc) 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 3.2. §Ó chuyÓn tõ ®Þa chØ ph©n ®o¹n sang ®Þa chØ dong, tõ cét cotd ®Õn cotc. MÇu nÒn cho bëi m_nen, mÇu thùc ta dïng macro: ch÷ cho bëi m_ch÷. ë ®©y sö dông to¸n tö g¸n trªn ®Þa chØ void far *MK_FP(seg,off) thùc. VÝ dô 1. Sau khi thùc hiÖn c¸c c©u lÖnh: Trong hµm main() sÏ sö dông c¸c hµm cuaso vµ duarmh ®Ó char buf[100]; t¹o hai cöa sæ vµ viÕt hai dßng ch÷ trªn trang mµn h×nh thø unsigned ds,dx; hai (tõ dßng 26 ®Õn dßng 50). ds = FP_SEG(buf); dx = FP_OFF(buf); /* th× ds:dx chøa ®Þa chØ cña m¶ng buf. ch¬ng tr×nh minh ho¹ c¸ch truy nhËp trùc tiÕp vµo bé VÝ dô 2. Sau khi thùc hiÖn c¸c c©u lÖnh: nhí cña mµn h×nh char far *pchar; */ pchar = (char far*)MK_FP(0xb800:0); #include "dos.h" th× pchar trá tíi ®Þa chØ ®Çu cña bé nhí mµn h×nh. Khi ®ã ta #include "conio.h" cã thÓ sö dông c¸c lÖnh g¸n ®Ó truy nhËp trùc tiÕp tíi bé nhí void duarmh(char *day, int dong,I nt cotd, int cotc,I nt mµn h×nh. m_nen, int m_chu); 495 496 void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); § 4. c¸c vÝ dô minh ho¹ main() { 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- cuaso(26,1,50,80,BLUE); ¬ng tr×nh gåm hµm main() vµ hai hµm sau: duarmh("Chuc mung nam moi", 28, 30, 50, MAGENTA, 1. Hµm cuaso WHITE); void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); cuaso(30,20,46,60,RED); duarmh("Chuc mung nam moi", 40, 30, 50, MAGENTA, YELLOW);
  4. getch(); pokeb(0xb800,p+2*j+1,mau); } } void cuaso(int dongt,int cott,int dongd,int cotd,int maucs) } /* Dung dia phan doan */ } { void duarmh(char *day, int dong, int cotd, int cotc, int int i, j, p, t, dt, dd, mau; m_nen, union REGS v, r; int m_chu) /* Xac dinh thuoc tinh mau */ /* Dung dia chi thuc */ mau = (maucs
  5. for (i=0;i
  6. clrscr(); getch(); i=0; } sai_mat_khau=0; } cout
  7. // Xac dinh gio, phut, giay if (kbhit()) int gio = (int)(*t_time/65543) ; { unsigned long du = *t_time%65543 ; ch1=getch(); int phut = (int)(du/1092); if (ch1==0) ch2=getch(); du = du%1092; if (ch1==27) //ESC int giay = (int)(du/18); break; //Doi ra ky tu dua vao mang buf_time if (ch1==0 && ch2==59) // Bam F1 buf_time[12]=gio/10 + 48; thong_bao_thoi_gian(); buf_time[14]=gio%10 + 48; } buf_time[18]=phut/10 + 48; //In cac chu cai mot cach ngau nhien buf_time[20]=phut%10 + 48; gotoxy(random(80)+1,random(25)+1); buf_time[24]=giay/10 + 48; putch(random(26)+65); buf_time[26]=giay%10 + 48; delay(400); //Dua thong bao goi ra man hinh } for (i=0; i
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2