Thứ Sáu, 14 tháng 1, 2022
5: Truy Cập Trực Tiếp Bộ Nhớ
- 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ỉ sep_ nhan:off_nhan. Nguyên mẫu của hầm trong menu.h là:
void movedata(unsigned seg gui,unsigned ofÍf gui, unsigned seg_ nhan,unsiened off nhan, Int n)
- Đổ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 đù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]
unsiened ds,dx;
ds= EP_SEGŒuf)
dx= EP_OFF(bu?)
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_ EP(Oxb§00: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.
// Address_1
#include <dos.h>
#include <conio.h>
#include <stdio.h>
int main() {
unsigned char far *p;
int n,k;
unsigned seg,off;
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);
}
return 0
}
Đăng ký:
Đăng Nhận xét (Atom)
0 bình luận:
Đăng nhận xét