CH NG 5: TRUY C P TR C TI P B
§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 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 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 hàm trong dos.h là:
void peek(unsigned seg,unsigned off )
5 Hàm movedata(): Sao n byte t i đ 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)
§1 Đ I T Đ A CH PHÂN ĐO N SANG Đ A CH TH C
1 Đ i t đ a ch th c: Đ i t đ i ch th c sang đ a ch phân đo n ta dùng
macro sau:
unsigned FP_SEG(dia chi thuc)
unsigned FP_OFF(dia chi thuc)
2 Đ i t đ a ch phân đo n: Đ i t đ a ch phân đo n sang 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 m ng buf
Sau khi th c hi n câu l nh:
51
Trang 2char *pchar;
pchar = (char *) MK_FP(0xb800:0)
thì pchar tr t i b nh màn hình Khi đó ta có th dùng các l nh đ truy
c 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);
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 m i 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:
k = (n 1)*4;
52