Đúng là chỉ cần con trỏ ta có thể truy xuất đến bất kỳ vị trí nào trong RAM . Nếu muốn truy xuất 1 cách chính xác bạn bắt buộc phải hiểu thế nào là con trỏ gần và xa , thế nào là mô hình bộ nhớ .
Đầu tiên , xin nói là 1 điạ chỉ gồm 2 phần : đoạn ( segment ) và độ lệch ( offset ) . 1 địa chỉ viết chính xác có dạng : 0x????:0x???? ( seg:off theo hệ 16 ( 0x) )
Con trỏ gần là con trỏ chỉ có thể di chuyển đâu đó trên 1 offset . Tức là nó chỉ có thể di chuyễn trên 1 đoạn , ko thể đi ra ngoài đoạn ấy .
VD:
Code:
int *p; // khai báo 1 con trỏ gần kiểu int
Con trỏ xa là con trỏ có thể di chuyển trên bất kỳ đoạn nào và độ lệch nào .
VD:
Code:
int far *p; // khai báo 1 con trỏ xa kiểu int , thêm từ khoá far vào
Mô bộ nhớ chia làm 6 phần : tiny , small , medium , compact , large , huge .
Tiny : tất cả dữ liệu và mã gắn trên 1 segment . Tức là chỉ cần con trỏ gần là đủ truy xuất mô hình này .
Small : Dữ liệu và mã ở các đoạn riêng biệt . Thường thì con trỏ gần là đủ xài , đôi khi cần bộ nhớ phân chia động xa thì ta dùng con trỏ xa .
Medium và Compact: dữ liệu , găn xếp và bộ nhớ cấp phát động đều có đoạn riêng của chúng . Trong này thì con trỏ gần dùng cho mã và con trỏ xa cho dữ liệu .
Large và Huge : Hai mô hình bộ nhớ "khổng lồ" . Nói chung con trỏ xa được dùng cho cả mã và dữ liệu .
Con trỏ gần chắc bạn cũng đã thường xuyên khai báo trong các chương triìn của mình , điều đó là đủ . Một ví dụ khá đơn giản cho việc dùng con trỏ xa là khi ta muốn truy xuất đến đầu màn hình văn bản , ta biết địa chỉ của nó là 0xB800:0x0000 . Vậy bạn ghi như sau :
Code:
char far *rvb=(char*)MK_FP(B800,0);