1. Trang chủ
  2. » Toán

Lập trình hướngđối tượng - Truy cập vào bộ nhớ

3 4 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 3
Dung lượng 75,56 KB

Nội dung

[r]

(1)

chương 9

Truy nh p tr c ti p vào b nh ế

Trong chương tr nh b y c c v n đ :ỡ ầ ỏ ấ ề

+ Hai ki u đ a ch : Đ a ch phõn đo n đ a ch th cể ị ỉ ị ỉ ị ỉ ự

+ Truy nh p t i đ a ch phõn đo nậ ị ỉ

+ Đ i t đ a ch phõn đo n sang đ a ch th cổ ị ỉ ị ỉ ự

+ B nh h nh, truy nh p tr c ti p vào b nh mànộ ỡ ậ ự ế ộ

h nhỡ

+ D ng tr đ l y d li u t b nh phõn đo nự ỏ ể ấ ữ ệ ộ

+ D ng tr hàm đ th c hi n c c th t c c a DOSự ỏ ể ự ệ ỏ ủ ụ ủ

§ C c hàm truy nh p theo đ a ch phõn đo nỏ

1 Hàm pokeb: G i m t ký t vào b nh ử ộ ự ộ

+ Nguy n m u dos.h nh sau:ờ ẫ

void pokeb(unsigned seg, unsigned off, char value);

+ C ng d ng: G i gi tr ký t value vào b nh t i đ a chụ ụ ỏ ị ự ộ ị ỉ

phõn đo n seg:offạ

2 Hàm peekb: Nh n m t ký t t b nh ậ ộ ự ộ

+ Nguy n m u dos.h nh sau:ờ ẫ

char peekb(unsigned seg, unsigned off);

+ C ng d ng: Nh n m t byte t i đ a ch phõn đo n seg:offụ ụ ậ ộ ị ỉ

3 Hàm poke: G i m t s nguy n vào b nh ử ộ ố ộ

+ Nguy n m u dos.h nh sau:ờ ẫ

void poke(unsigned seg, unsigned off, int value);

+ C ng d ng: G i gi tr nguy n value vào b nh t i đ a chụ ụ ỏ ị ộ ị ỉ

phõn đo n seg:offạ

4 Hàm peek: Nh n m t s nguy n t b nh ậ ộ ố ộ

+ Nguy n m u dos.h nh sau:ờ ẫ

int peek(unsigned seg, unsigned off);

+ C ng d ng: Nh n m t word t i đ a ch phõn đo n seg:offụ ụ ậ ộ ị ỉ

5 Hàm movedata: Sao c c byte.

+ Nguy n m u mem.h nh sau:ờ ẫ

void movedata(unsigned seg_gui, unsigned off_gui,

unsigned seg_nhan, unsigned off_nhan, int n); + C ng d ng: Sao n byte t seg_gui:off_gui đ n ụ ụ ế

seg_nhan:off_nhan

§ B nh h nh văn b nộ

2.1 C ch bi u di n ký t b nh h nhỏ

B nh h nh văn b n b t đ u t đ a ch :ộ ỡ ả ắ ầ ị ỉ

(0xb800:0x0000)

Khi đ a m t ký t vào v ng nh h nh, th nú s hi n l nư ộ ự ự ỡ ỡ ẽ ệ

màn h nh M i ký t tr n h nh chi m byte b nhỡ ỗ ự ỡ ế ộ

màn h nh: byte đ u ch a mó ASCII, byte th hai bi u di n m uỡ ầ ứ ứ ể ễ ầ

hi n th g i byte thu c t nh C c bit c a byte thu c t nh:ể ị ọ ộ ỏ ủ ộ

B7B6B5B4B3B2B1B0 chia làm nhúm:

+ Nhúm g m bit B7 bi u th s nh p nh y N u B7=0 th kýồ ể ị ự ấ ỏ ế ỡ

t kh ng nh p nh y, n u B7=1 th ký t s nh p nh y.ự ụ ấ ỏ ế ỡ ự ẽ ấ ỏ

+ Nhúm g m c c bit B6, B5 B4 C c bit ch a đồ ỏ ỏ ứ ược m t s nguy n t đ n bi u th m u n n c a ký t ộ ố ế ể ị ầ ề ủ ự

+ Nhúm g m c c bit B3, B2, B1 B0 C c bit ch a đồ ỏ ỏ ứ ược m t s nguy n t đ n 15 bi u th 16 m u c a ký t ộ ố ế ể ị ầ ủ ự

2.2 Trang h nhỡ

(2)

M i trang h nh g m 80x25 ký t , đú c n 80x25x2=4000ỗ ỡ ự ầ

byte b nh Th c t m i trang h nh độ ự ế ỗ ỡ ược phõn b 4096 ố = 0x1000 byte Nh v y trang h nh đư ậ ỡ ược phõn b nh sau:ố

+ Trang h nh th b t đ u t đ a ch 0xB800:0x0000ỡ ứ ắ ầ ị ỉ

+ Trang h nh th b t đ u t đ a ch 0xB800:0x1000ỡ ứ ắ ầ ị ỉ

+ Trang h nh th b t đ u t đ a ch 0xB800:0x2000ỡ ứ ắ ầ ị ỉ

+ Trang h nh th b t đ u t đ a ch 0xB800:0x3000ỡ ứ ắ ầ ị ỉ

2.3 Ch n trang hi n thọ

T i m i th i m ch cú th hi n th đạ ỗ ể ỉ ể ể ị ược m t trangộ

màn h nh Đ hi n th trang h nh th t (t=0,1,2,3) chỳng ta sỡ ể ể ị ỡ ứ

d ng ch c c a ng t 0x10 theo m u sau:ụ ứ ủ ắ ẫ

union REGS v,r;

v.h.ah = ; // Ch c 5ứ

v.h.al = t ; // S hi u trang h nh c n hi n thố ệ ỡ ầ ể ị

int86(0x10, &v, &r); // Th c hi n ng t 0x10ự ệ ắ

2.4 V d minh hoớ ụ

V d sau d ng hàm pokeb đ đ a c c ký t vào c c trang c aớ ụ ự ể ỏ ự ỏ ủ

b nh h nh, sau đú d ng ch c c a ng t 0x10 độ ỡ ự ứ ủ ắ ể

ch trang hi n th ể ị

//CT9_03.CPP #include <dos.h> #include <conio.h>

char d1[]={'C',1*16+14,'H',1*16+14,'U',1*16+14,'C',1*16+14}; char d2[]={'M',2*16+15,'U',2*16+15,'N',2*16+15,'G',2*16+15}; void main()

{

union REGS v,r; clrscr();

//M c đ nh hi n th trang 0ặ ị ể ị

for (int i=0;i<8;++i) pokeb(0xb800,i,d1[i]); getch();

//Hien thi trang v.h.ah = ; v.h.al = ; int86(0x10,&v,&r); for (i=0;i<8;++i)

pokeb(0xb800,0x1000+i,d2[i]); getch();

//Hien thi trang v.h.ah = ; v.h.al = ; int86(0x10,&v,&r); getch();

//Hien thi trang v.h.ah = ; v.h.al = ; int86(0x10,&v,&r); getch();

}

§ chuy n Đ i đ a ch ể

3.1 Đ chuy n t đ a ch th c sang đ a ch phõn đo n ta d ngể ừ ị ỉ ự

c c macro: ỏ

unsigned FP_SEG(đ a_ch _th c) ị ỉ ự

unsigned FP_OFF(đ a_ch _th c)ị ỉ ự

3.2 Đ chuy n t đ a ch phõn đo n sang đ a ch th c ta d ngể ừ ị ỉ ự

macro:

void far *MK_FP(seg,off)

(3)

V d 1ớ ụ Sau 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.ỡ ứ ị ỉ ủ ả

V d 2.ớ ụ Sau th c hi n c c cõu l nh:ự ệ ỏ ệ

char far *pchar;

pchar = (char far*)MK_FP(0xb800:0);

th pchar tr t i đ a ch đ u c a b nh h nh Khi đú ta cúỡ ỏ ị ỉ ầ ủ ộ ỡ

th s d ng c c l nh g n đ truy nh p tr c ti p t i b nh mànể ụ ỏ ệ ỏ ể ậ ự ế ộ

h nh.ỡ

§ c c v d minh hoỏ ớ ụ

Chương tr nh ỡ Chương tr nh minh ho c ch truy nh p tr cỡ ỏ ậ ự

ti p vào b nh h nh cú đ a ch đ u 0xB800:0 Chế ộ ỡ ị ỉ ầ ương tr nh g m hàm main() hai hàm sau:ỡ

1 Hàm cuaso

void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); thi t l p m t c a s m u cú to đ gúc tr n-tr i (dongt, cott) vàế ậ ộ ổ ầ ộ ỏ

gúc dưới-ph i (dongd,cotd) M u cho b i tham s maucs đõyả ầ ố

s d ng hàm pokeb đ a ch phõn đo n.ử ụ ị ỉ

2 Hàm duarmh

void duarmh(char *day, int dong, int cotd, int cotc,int m_nen, int m_chu);

s đ a h nh m t d y ký t (ch a dóy) t i dũng dong,ẽ ỡ ộ ẫ ự ứ

t c t cotd đ n cotc M u n n cho b i m_nen, m u ch cho b iừ ộ ế ầ ề ầ ữ

m_ch đõy s d ng to n t g n tr n đ a ch th c.ữ ụ ỏ ỏ ị ỉ ự

Trong hàm main() s s d ng c c hàm cuaso duarmh đ t oẽ ụ ỏ ể

hai c a s vi t hai dũng ch tr n trang h nh th hai (tử ổ ế ữ ỡ

dũng 26 đ n dũng 50).ế

/*

chương tr nh minh ho c ch truy nh p tr c ti p vào bỡ ỏ ậ ự ế ộ

nh c a h nhớ ủ ỡ

*/

#include "dos.h" #include "conio.h"

void duarmh(char *day, int dong,I nt cotd, int cotc,I nt m_nen, int m_chu);

void cuaso(int dongt,int cott,int dongd,int cotd,int maucs); main()

{

cuaso(26,1,50,80,BLUE);

duarmh("Chuc mung nam moi", 28, 30, 50, MAGENTA, WHITE); cuaso(30,20,46,60,RED);

duarmh("Chuc mung nam moi", 40, 30, 50, MAGENTA, YELLOW); getch();

}

void cuaso(int dongt,int cott,int dongd,int cotd,int maucs) /* Dung dia phan doan */

{

int i, j, p, t, dt, dd, mau; union REGS v, r;

/* Xac dinh thuoc tinh mau */ mau = (maucs << 4)+maucs; /*

Xac dinh trang man hinh t

Ngày đăng: 09/03/2021, 05:02

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w