Giáo trình Lập trình C_Chương 5: Truy cập trực tiếp bộ nhớ

Nội dung: - Bài 1: Các hàm truy cập theo địa chỉ phân đoạn - Bài 2: Đổi từ địa chỉ phân đoạn sang địa chỉ thực

pdf2 trang | Chia sẻ: diunt88 | Lượt xem: 2073 | Lượt tải: 3download
Bạn đang xem nội dung tài liệu Giáo trình Lập trình C_Chương 5: Truy cập trực tiếp bộ nhớ, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
58 Ch−¬ng 5 : truy cËp trùc tiÕp bé nhí §1.C¸c hµm truy cËp theo ®Þa chØ ph©n ®o¹n 1. Hµm pokeb() : Dïng ®Ó göi mét kÝ tù value vµo bé nhí t¹i ®Þa chØ ph©n ®o¹n off . Nguyªn mÉu cña hµm trong dos.h lµ : void pokeb(unsigned seg,unsigned off , char value) 2. Hµm peekb() : NhËn mét byte t¹i ®Þa chØ seg:off . Nguyªn mÉu cña hµm trong dos.h lµ : char peekb(unsigned seg,unsigned off) 3. Hµm poke() : Göi mét sè nguyªn value vµo bé nhí t¹i ®Þa chØ seg:off . Nguyªn mÉu cña hµm trong dos.h lµ : void poke(unsigned seg,unsigned off , int value) 4. Hµm peek() : NhËn mét word t¹i ®Þa chØ seg:off . Nguyªn mÉu cña hµm trong dos.h lµ : void peek(unsigned seg,unsigned off ) 5. Hµm movedata() : Sao n byte tõ ®Þa chØ seg_gui:off_gui ®Õn ®Þa chØ seg_nhan:off_nhan . Nguyªn mÉu cña hµm trong menu.h lµ : void movedata(unsigned seg_gui,unsigned off_gui , unsigned seg_nhan,unsigned off_nhan , int n) §2. §æi tõ ®Þa chØ ph©n ®o¹n sang ®Þa chØ thùc 1. §æi tõ ®Þa chØ thùc : §Ó ®æi tõ ®Þa chØ thùc sang ®Þa chØ ph©n ®o¹n ta dïng macro sau : unsigned FP_SEG(®Þa chØ thùc) unsigned FP_OFF(®Þa chØ thùc) 2. §æi tõ ®Þa chØ ph©n ®o¹n : §Ó ®æi tõ ®Þa chØ ph©n ®o¹n sang ®Þa chØ thùc ta dïng macro : void far *MK_FP(seg:off) VÝ dô : 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 n¶mg buf . Sau khi thùc hiÖn c©u lÖnh : char *pchar; pchar = (char *) MK_FP(0xb800:0) th× pchar trá tíi ®Çu bé nhí mµn h×nh . Khi ®ã ta cã thÓ dïng c¸c lÖnh g¸n ®Ó truy cËp trùc tiÕp tíi bé nhí mµn h×nh . Ch−¬ng tr×nh 5-1 : LËp ch−¬ng tr×nh x¸c ®Þnh ®Þa chØ cña mét ng¾t . #include #include #include void main() { unsigned char far *p; int n,k; unsigned seg,off; clrscr(); p=(unsigned char far*)MK_FP(0,0); 59 while(1) { printf("\nSo hieu ngat(Bam 0 de 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 cua ngat %x : %x",seg,off); } } Sè hiÖu cña ng¾t ®−îc ®¸nh sè tõ 0 nh−ng n ®−îc nhËp tõ 1 , mçi ng¾t chiÕm 4 byte nªn ta cã k=(n-1)*4;
Tài liệu liên quan