1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài thực hành số 7: Lập trình màn hình

4 567 1
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài thực hành số 7: Lập trình màn hình
Trường học Đại học Khoa học Tự nhiên, Đại học Quốc gia Hà Nội
Chuyên ngành Tin học
Thể loại Bài thực hành
Thành phố Hà Nội
Định dạng
Số trang 4
Dung lượng 55,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài thực hành số 7Lập trình màn hình Mục đích  Hiểu được cách tổ chức bộ nhớ màn hình cho chế độ text 80x25 16 màu và chế độ graphic SVGA 800x600 256 màu  Biết truy xuất bộ nhớ bằng ng

Trang 1

Bài thực hành số 7

Lập trình màn hình Mục đích

 Hiểu được cách tổ chức bộ nhớ màn hình cho chế độ text 80x25 16 màu và chế độ graphic SVGA 800x600 256 màu

 Biết truy xuất bộ nhớ bằng ngắt 10h và bằng cách đọc/ghi vào vùng nhớ màn hình

Tóm tắt lý thuyết

T

ổ chức bộ nhớ

Thông tin thể hiện trên màn hình được quy định bởi dữ liệu ghi trong vùng nhớ màn hình Dữ liệu này được tổ chức khác nhau tùy vào chế độ thể hiện (display mode)

Trong chế độ 03h (text 16 màu, 80x25) vùng nhớ màn hình bắt đầu từ địa chỉ B800h:0000 Mỗi màn hình có 80x25 = 2000 kí tự Mỗi kí tự được lưu trữ bởi 2 byte, byte thứ nhất lưu mã ASCII, byte thứ hai lưu thuộc tính thể hiện (bit 7 : nhấp nháy, bit 6-4 : màu nền, bit 3-0 : màu chữ) Như vậy mỗi màn hình ứng với 4000 byte Trong chế độ này (03h) ta có thể sử dụng 4 trang màn hình khác nhau, đánh số từ 0 đến 3 Tại mỗi thời điểm chỉ có một trang được hiển thị, các trang khác ẩn nhưng

vẫn có thể ghi dữ liệu lên đó Địa chỉ của trang thứ k là B8000h + k x 1000h, nghĩa là mỗi trang

chiếm 4096 byte, mặc dù chỉ 4000 byte là được sử dụng

Trong chế độ 103h (SVGA, graphic 256 màu, 800x600) vùng nhớ màn hình bắt đầu từ địa chỉ A000h:0000 Mỗi điểm ảnh ứng với 1 byte lưu chỉ số màu Như vậy, vùng nhớ màn hình trải dài

480000 byte, chia làm nhiều trang Mỗi trang có kích thước bằng một segment 64KB Chỉ số màu của điểm ảnh chính là số thứ tự của màu trong bảng màu Mỗi màu trong bảng màu được xác định bởi 18 bit đại diện cho tỉ lệ 3 thành phần màu (R,G,B), mỗi thành phần 6 bit nhận giá trị từ 0 đến 63

Ở chế độ này, màn hình có thể biểu diễn được 218 màu khác nhau, nhưng tại một thời điểm thì chỉ thể hiện 256 màu khác nhau

Một số hàm của ngắt 10h (BIOS)

AH = 00h Thay đổi chế độ hiển thị

AL : chế độ hiển thị Nếu bit 7 bật thì màn hình không bị xóa khi thay đổi chế độ hiển thị

AL = 03h Chọn chế độ đồ họa 80x25, 16 màu

AH = 0Fh Lấy chế độ hiển thị hiện thời Kết quả:

AH : số cột

AL : chế độ hiển thị

BH : trang hiện thời

AH = 01h Thay đổi kích thước con trỏ.

CH : dòng quét đầu

CL : dòng quét cuối

AH = 02h Thay đổi vị trí con trỏ

DH : dòng

DL : cột

BH : trang

AH = 05h Thay đổi trang thể hiện

AL : trang

AH = 0Ah In ra kí tự tại vị trí con trỏ

BH : trang

AL : mã ASCII

CX : lặp bao nhiêu lần

AH = 09h In ra kí tự tại vị trí con trỏ, nhưng cho phép đặt thuộc tính cho kí tự

BH : trang

BL : thuộc tính

AL : mã ASCII

Trang 2

CX : lặp bao nhiêu lần

AH = 0Eh In ra kí tự tại vị trí con trỏ, dịch con trỏ sang vị trí tiếp theo.

BH : trang

AL : mã ASCII

AX = 4F02h In ra kí tự tại vị trí con trỏ, dịch con trỏ sang vị trí tiếp theo.

BX : chế độ đồ họa ( = 103h : chể độ SVGA 256 màu 800x600)

Nếu kết quả trả về trong AX khác với 004Fh thì hệ thống không thể chuyển sang SVGA

Tài liệu tham khảo

1 Nguyễn Minh Tuấn, Giáo trình hợp ngữ - Chương 10, ĐHKHTN, 2002

2 Randal Hyde, The art of assembly language programming – Chapter 23

3 Dương Anh Đức, Giáo trình đồ họa máy tính, ĐHKHTN, 1998

4 Dan Rollins, TechHelp v.6.0

Bài tập

Bài 1 ChangePage Chọn chế độ 03 Trên trang 0, ở tọa độ (8,10) viết dòng chữ “VIET NAM” màu

đỏ trên nền trắng Trên trang 1, ở tọa độ (12,7) viết dòng chữ “QUE HUONG TOI” màu vàng trên nền xanh Làm biến mất con trỏ Tạo vòng lặp chuyển qua lại giữa trang 0 và 1 cho đến khi một phím được nhấn

Bài 2 Vạch màu Khởi động chế độ 103h (SVGA) Bằng cách truy xuất trực tiếp vùng nhớ màn hình, hãy thể hiện 256 màu trong bảng màu mặc định bằng các vạch màu nằm cạnh nhau, mỗi vạch

độ rộng 3 điểm ảnh Sau khi nhấn phím bất kì, trở về chế độ 03 và kết thúc chương trình

Mở rộng

1 Trong bài tập 1, có nhận xét gì về tốc độ chuyển giữa hai trang ? Có cách nào để đạt được kết quả tương tự (hai dòng chữ thay nhau xuất hiện) mà tốc độ chuyển đổi nhanh hơn ?

2 Thay vì hai dòng chữ chớp tắt như bài tập 1, làm sao để thể hiện hai dòng chữ luân phiên tiến lại gần nhau, rồi lại lùi xa nhau, rồi lại gần nhau…

3 Tìm cách pha lại (định nghĩa lại) bảng màu, để sau khi nhấn Enter các vạch thể hiện trong bài tập 2 đột nhiên biến thành một dải màu thay đổi từ sáng trắng đến xám, đến đen Nhấn Enter lần nữa sẽ phục hồi lại dải màu như trước

4 Nghiên cứu một thuật toán vẽ đường thẳng và viết chương trình vẽ những đoạn thẳng tùy ý trên màn hình

Hướng dẫn

Bài 1

Dùng hàm 05 của ngắt 10h để thay đổi trang

Ví dụ:

mov al,0

Dùng hàm 02 để nhảy đến vị trí cần thiết

Ví dụ:

mov dh,8

Trang 3

mov bh,0

Để viết chữ có màu và dịch chuyển con trỏ, có thể gọi ngắt 2 lần như sau

Ví dụ:

printStA proc

cmp al,'$'

mov ah,09h

mov cx,1

mov ah,0eh

jmp printStA

Done:

ret

endp printStA

Để làm biến mất con trỏ, có thể dùng cách sau

Ví dụ:

mov cl,20h

mov ah,1

Để chuyển đổi giữa hai màn hình, có thể viết:

Ví dụ:

mov dl,0

mov dh,5

next:

Bài 2

Để chuyển giữa chế độ text và graphic, có thể dùng đoạn chương trình sau

Ví dụ:

SVGA_ON proc

push ax

push bx

mov ax,4f02h

Trang 4

pop ax

ret

endp SVGA_ON

SVGA_OFF proc

push ax

mov ax,0003h

ret

endp SVGA_OFF

Để in một điểm ảnh, có thể dùng cách sau:

Ví dụ:

push bx

mov bx,800

call SetPage

Write:

stosb

Ngày đăng: 29/10/2013, 02:15

TỪ KHÓA LIÊN QUAN

w