Giáo trình C++ - Chương 5: Truy cập trực tiếp bộ nhớ

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 <dos.h>  
#include <conio.h>  
#include <stdio.h>  
void main()  
{
unsigned char far *p;  
int n,k;  
unsigned seg,off;  
clrscr();  
p=(unsigned char far*)MK_FP(0,0);  
58  
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 nhng n ®îc nhËp tõ 1 , mçi ng¾t chiÕm 4 byte  
nªn ta cã  
k=(n-1)*4;  
59  
pdf 2 trang Thùy Anh 27/04/2022 3560
Bạn đang xem tài liệu "Giáo trình C++ - Chương 5: Truy cập trực tiếp bộ nhớ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_c_chuong_5_truy_cap_truc_tiep_bo_nho.pdf