You are on page 1of 8

BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2

BÀI THỰC HÀNH 2


1. Chuẩn đầu ra.
Sử dụng Assembly.
Các chương trình điều khiển đơn giản.
Thay đổi một số thông số đơn giản
Tạo ra File thực thi dạng *.EXE(COM)

2. Chuẩn bị.
 Xem lại Bài thực hành 1.
 Đọc Chương 1 . Lập trình hệ thống.
 Tập lệnh ASM16.
(Ôn lại kiến thức này từ môn CTMT&HN).
 Kiến thức sử dụng Stack.
 Kiến thức điều khiển rẽ nhánh.
 Kiến thức điều khiển vòng lặp.

4. Kiến thức bổ trợ

 Mã ASCII phím ESC : 1bh


 Mã ASCII phím space (khoảng trắng) : 20h
 Xuống dòng : in liên tiếp 2 ký tự 0ah, 0dh
 Lệnh Assembly :
1. JMP : jmp đ/c (phạm vi 128Byte)
2. JZ : jz đ/c
3. LOOP : loop đ/c; CX chứa số lần lặp.
4. CMP : cmp gt8/16, gt8/16
5. PUSH : push tg16
6. POP : pop tg16
 Int 21h.
 Nhập 1 ký tự không hiện :
Inp.:
AH = 08h
Return: AL = character read
 In 1 chuỗi :
Inp.:
AH = 09h
DX = Đ/c chuỗi; kết thúc bằng dấu $
 Nhập 1 chuỗi :
Inp.:
AH = 0ah
DX = Đ/c Buffer.
 Int 10h.
 Xác định vị trí con trỏ :
Inp.:
AH = 02h
BH = 0
DH = row
Trang 1
BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2
Dl = col
 Cuộn màn hình :
Inp.:
AH = 06h/07h (cuộn lên/cuộn xuống)
AL = số dòng cuộn (AL=0 xóa màn hình)
BH = thuộc tính màn hình
CX = row,col (góc trên trái)
DX = row,col (góc dưới phải)
 Int 33h.
 Reset mouse :
Inp.:
AX = 0000.
 Hiện mouse :
Inp.:
AX = 0001.
 Ẩn mouse :
Inp.:
AX = 0002.
 Lấy tọa độ mouse :
Inp.:
AX = 0003.
Output.:
DX = row.
CX = col.

3. Phương tiện

Máy tính cài đặt Windows XP 32bit


Máy tính cài đặt Windows 7 32bit.
Microsost PC Virtual 2007 cài đặt MS DOS 6.22

5. Thời lượng: 5 tiết


6. Nội dung thực hành
Bài thực hành có hướng dẫn :
6.1 In ký tự vừa nhập cách nhau 1 khoảng trắng. Chương trình kết thúc khi bấm phím
ESC.
6.2 In ký tự vừa nhập ở dòng tiếp theo. Chương trình kết thúc khi bấm phím ESC.
6.3 Nhập ký tự không hiện ký tự nhập, in ký tự vừa nhập cách nhau 1 khoảng trắng.
Chương trình kết thúc khi bấm phím ESC.
6.4 In các ký tự có mã ASCII từ 20h đến FFh. Các ký tự cách nhau 1 khoảng trắng.
6.5 Nhập 1 câu từ bàn phím. In câu vừa nhập ra màn hình ở dòng tiếp theo. Chương
trình kết thúc khi bấm phím ESC.
6.6 Nhập 1 ký tự (không hiện ký tự nhập) và in ký tự đó ra màn hình sau câu thông báo
“Ký tự da nhap :” . Lặp lại nhiều lần; kết thúc chương trình bằng phím ESC.
6.7 Bấm phím h hiện mouse; Bấm phím a ẩn mouse. Lặp lại nhiều lần; kết thúc chương
trình bằng phím ESC.
6.8 Hiện tọa độ Mouse.
6.9. Xóa màn hình và đặt con trỏ tại góc trên trái màn hình.
6.10. Xóa màn hình. Điền kín ký tự X trong 1 khung hình chữ nhật ở vị trí bất kỳ trên
màn hình.
6. 11. In dãy số.

Trang 2
BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2
6. 12. In chuỗi giữa màn hình.
6. 13. In chuỗi sát góc trên phải.
6. 14. Chia màn hình theo chiều ngang.
6. 15. Chia màn hình theo chiều dọc.

6.1 In ký tự vừa nhập cách nhau 1 khoảng trắng.


Chương trình kết thúc khi bấm phím ESC.
6.1.1 Mô tả.
Nhập 1 ký tự.
In lại ký tự vừa nhập cách 1 khoảng trắng.
Chương trình lặp lại nhiều lần và kết thúc khi bấm phím ESC.
6.1.2 Thực hiện.
Nhập KTự (AH=1; INT 21)
KTra AL với 1B (cmp AL,1B)
True → KThúc (jz đ/c lệnh KThúc)
Giữ lại KTự nhập (push …)
In khoảng trắng (AH=2; DL=20; INT 21)
Lấy lại KTự nhập (pop …)
In KTự (AH=2; DL=KT nhập; INT 21)
In khoảng trắng (AH=2; DL=20; INT 21)
Quay lại đầu CT (jmp đ/c bắt đầu CT)
KThúc (int 20)

6.2 In ký tự vừa nhập ở dòng tiếp theo. Chương trình kết


thúc khi bấm phím ESC.
6.2.1 Mô tả.
Nhập 1 ký tự.
In lại ký tự vừa nhập ở dòng tiếp theo.
Chương trình lặp lại nhiều lần và kết thúc khi bấm phím ESC.
6.2.2 Thực hiện.
Nhập KTự (AH=1; INT 21)
KTra AL với 1B
True → KThúc
Giữ lại KTự nhập
Xuống dòng (AH=2; DL=0a; INT 21; DL=0d; INT 21)
Lấy lại KTự nhập.
in KTự (AH=2; DL=KT nhập; INT 21)
Xuống dòng (AH=2; DL=0a; INT 21; DL=0d; INT 21)
Quay lại đầu CT
KThúc

6.3 Nhập ký tự không hiện ký tự nhập, in ký tự vừa


nhập cách nhau 1 khoảng trắng. Chương trình kết
thúc khi bấm phím ESC.
6.3.1 Mô tả.
Nhập 1 ký tự, không hiện ký tự nhập.

Trang 3
BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2
In lại ký tự vừa nhập cách nhau 1 khoảng trắng.
Chương trình lặp lại nhiều lần và kết thúc khi bấm phím ESC.
6.3.2 Thực hiện.

Nhập KTự không hiện (AH=8 INT 21)


KTra AL với 1B
True → KThúc
in KTự (AH=2; DL=AL; INT 21)
In khoảng trắng (AH=2; DL=20; INT 21)
Quay lại đầu CT
KThúc
6.4 In các ký tự có mã ASCII từ 20h đến FFh. Các ký tự
cách nhau 1 khoảng trắng.
6.4.1 Mô tả.
In các ký tự có mã ASCII từ 20h đến ffh.
6.4.2 Thực hiện.

Xác định ký tự in đầu tiên (DL=20)


Lặp (CX= (ff – 20))
(1)In ký tự đầu tiên (AH=2 INT 21)
Giữ lại ký tự vừa in
In khoảng trắng (AH=2; DL=20; INT 21)
Lấy lại ký tự vừa in
Tăng DL
Loop(1)
KThúc

6.5 Nhập 1 câu từ bàn phím. In câu vừa nhập ra màn hình
ở dòng tiếp theo. Chương trình kết thúc khi bấm phím
ESC.
6.5.1 Mô tả.
Nhập 1 câu.
In lại câu vừa nhập ở dòng tiếp theo.
Chương trình lặp lại nhiều lần và kết thúc khi bấm phím ESC.
6.5.2 Thực hiện.

Nhập 1 câu (AH=0a; DX=đ/c nhập; INT 21)


Xuống dòng (AH=2; DL=0a; INT 21; DL=0d; INT 21)
In câu vừa nhập (AH=9; DX=đ/c nhập + 2; INT 21)
Xuống dòng (AH=2; DL=0a; INT 21; DL=0d; INT 21)
In câu thông báo : “Bam phim bat ky de tiep tuc, ESC de ket thuc …”
(AH=9; DX=đ/c câu thông báo; INT 21)
Nhập KTự không hiện (AH=8 INT 21)
KTra AL với 1B
True → KThúc
Xuống dòng (AH=2; DL=0a; INT 21; DL=0d; INT 21)
Quay lại đầu CT

Trang 4
BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2
KThúc

6.6 Nhập 1 ký tự (không hiện ký tự nhập) và in ký tự đó ra


màn hình sau câu thông báo “Ký tự da nhap :” . Lặp lại
nhiều lần; kết thúc chương trình bằng phím ESC.
6.6.1 Mô tả.
Nhập 1 ký tự, không hiện ký tự nhập.
In lại ký tự vừa nhập ở dòng tiếp theo sau câu thông báo “Ky Tu Da Nhap: “.
Chương trình lặp lại nhiều lần và kết thúc khi bấm phím ESC.
6.6.2 Thực hiện.

Nhập KTự không hiện (AH=8 INT 21)


KTra AL với 1B
True → KThúc
Giữ lại KTự nhập
In câu thông báo (AH=9; DX=đ/c ; INT 21)
Lấy lại KTự nhập.
in KT (AH=2; DL=KT nhập; INT 21)
Xuống dòng (AH=2; DL=0a; INT 21; DL=0d; INT 21)
Quay lại đầu CT.
KThúc

6.7 Bấm phím h hiện mouse; Bấm phím a ẩn mouse. Lặp


lại nhiều lần; kết thúc chương trình bằng phím ESC.
6.7.1 Mô tả.

Bấm phím h hiện Mouse.


Bấm phím a ẩn Mouse.
Chương trình lặp lại nhiều lần và kết thúc khi bấm phím ESC.
6.7.2 Thực hiện.

Reset Mouse (AX=0000; INT 33)


Nhập KTự không hiện (AH=8; INT 21)
KTra AL với 1B
True → KThúc
KTra AL với h (68h)
True → Hiện mouse
KTra AL với a (61h)
True → Ẩn mouse
Quay lại đầu CT.
Hiện Mouse (AX=0001; INT 33)
Quay lại đầu CT.
Ẩn Mouse (AX=0002; INT 33)
Quay lại đầu CT.
KThúc

Trang 5
BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2

6.8 Hiện tọa độ Mouse.


6.8.1 Mô tả.

Hiện tọa độ Mouse.

6.8.2 Thực hiện.

Reset Mouse (AX=0 INT 33)


Hiện Mouse (AX=0001; INT 33)
Lấy tọa độ Mouse (AX=0003; Int 33; Trả về DX=row; CX=col)
Giữ lại tọa độ Mouse (col; row)
Ghi nhận 2 giá trị lưu trong Stack (CX=2; PUSH CX)
Xác định vị trí in (24,64) (AH=2; BH=0; DX=1840=col; INT 10)
(4)Lấy lại tọa độ Mouse (lần 1: row; lần 2 : col) (POP AX(=row; col))
(1)Đổi số dạng Hex sang DEC (AX/10 (0a); DX=số hệ 10; CX=số chữ số hệ 10;)
Lưu DX vào Stack
Tăng CX
KTra AX=0
False → (1)
KTra CX=3
True → in số (2)
Đẩy DX=0 vào Stack
Tăng CX
JMP KTra CX=3
(2)In số
Chuẩn bị chức năng in KTự (AH=2)
(3)Lấy số từ Stack → DX
Đổi thành ASCII (ADD so,30)
In (INT 21)
Loop (3)
Lấy lại CX (POP CX)
Loop (4)
Quay lại đầu CT
KT
CODE :
13CF:0100 B80100 MOV AX,0001 13CF:011B 51 PUSH CX
13CF:0103 CD33 INT 33 13CF:011C BB0A MOV BX,000A
13CF:0105 B80300 MOV AX,0003 13CF:011F B90000 MOV CX,0000
13CF:0108 CD33 INT 33 13CF:0122 BA0000 MOV DX,0000
13CF:010A 51 PUSH CX 13CF:0125 F7F3 DIV BX
13CF:010B 52 PUSH DX 13CF:0127 52 PUSH DX
13CF:010C B90200 MOV CX,0002 13CF:0128 41 INC CX
13CF:010F 51 PUSH CX 13CF:0129 3D0000 CMP AX,0000
13CF:0110 B402 MOV AH,02 13CF:012C 75F4 JNZ 0122
13CF:0112 B700 MOV BH,00 13CF:012E 83F903 CMP CX,03
13CF:0114 BA4018 MOV DX,1840 13CF:0131 7407 JZ 013A
13CF:0117 CD10 INT 10 13CF:0133 BA0000 MOV DX,0000
13CF:0119 59 POP CX 13CF:0136 52 PUSH DX
13CF:011A 58 POP AX 13CF:0137 41 INC CX

Trang 6
BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2
13CF:0138 EBF4 JMP 012E 13CF:0144 B220 MOV DL,20
13CF:013A B402 MOV AH,02 13CF:0146 CD21 INT 21
13CF:013C 5A POP DX 13CF:0148 59 POP CX
13CF:013D 80C230 ADD DL,30 13CF:0149 E2CF LOOP 011A
13CF:0140 CD21 INT 21 13CF:014B EBB8 JMP 0105
13CF:0142 E2F8 LOOP 013C 13CF:014D CD20 INT 20

6.9. Xóa màn hình và đặt con trỏ tại góc trên trái màn
hình.
6.9.1 Mô tả.

Xóa màn hình.


Đặt con trỏ tại góc trên trái màn hình.
Thay đổi byte thuộc tính để đổi màu màn hình.

6.9.2 Thực hiện.

Xóa màn hình (AH=6; AL=0; BH=07; CX=0; DX=184F; INT 10)
Đặt con trỏ tại (0,0) (AH=2; BH=0; DH=0; DL=0; INT 10)
KThúc

6. 10. Xóa màn hình. Điền kín ký tự X trong 1 khung hình


chữ nhật ở vị trí bất kỳ trên
6.10.1 Mô tả.

Xóa màn hình.


Điền kín ký tự X trong 1 khung hình chữ nhật ở vị trí bất kỳ trên màn hình.
Thay đổi byte thuộc tính để đổi màu.

6.10.2 Thực hiện.

Xóa màn hình (AH=6; AL=0; BH=07; CX=0; DX=184F; INT 10)
Xác định điểm bắt đầu in (DH=y0; DL=x0)
Lặp theo dòng (CX=y1-y0+1)
(2) Xác định vị trí in (AH=2; BH=0; INT 10)
Lặp theo cột (CX=x1-x0+1) (y0,x0) (y0,x1)
(1) Int ký tự X (AH=2; DL=58; INT 21) (05,0a) (05,27)
Loop (1)
Tăng tọa độ dòng (DH=DH+1; DL=x0).
Loop (2)
KThúc (13,0a) (13,27)
(y1,x0) (y1,x1)

CODE :
1381:0100 B406 MOV AH,06 1381:0106 B90000 MOV CX,0000
1381:0102 B000 MOV AL,00 1381:0109 BA4F18 MOV DX,184F
1381:0104 B707 MOV BH,07 1381:010C CD10 INT 10

Trang 7
BÀI THỰC HÀNH HỆ ĐIỀU HÀNH 2
1381:010E B605 MOV DH,05 1381:0122 B258 MOV DL,58
1381:0110 B20A MOV DL,0A 1381:0124 CD21 INT 21
1381:0112 B90F00 MOV CX,000F 1381:0126 E2FA LOOP 0122
1381:0115 B402 MOV AH,02 1381:0128 5A POP DX
1381:0117 B700 MOV BH,00 1381:0129 FEC6 INC DH
1381:0119 CD10 INT 10 1381:012B B20A MOV DL,0A
1381:011B 51 PUSH CX 1381:012D 59 POP CX
1381:011C B91E00 MOV CX,001E 1381:012E E2E5 LOOP 0115
1381:011F B402 MOV AH,02 1381:0130 CD20 INT 20
1381:0121 52 PUSH DX

6. 11. In dãy số.


Mô tả.
- Xóa màn hình.
- In dãy số theo dạng: 00 01 02 … 99.

6. 12. In chuỗi giữa màn hình.


Mô tả.
- Xóa màn hình.
- In chuỗi “Truong DH SPKT” giữa màn hình.

6. 13. In chuỗi sát góc trên phải.


Mô tả.
- Xóa màn hình.
- In chuỗi “Truong DH SPKT” ở góc trên phải.

6. 14. Chia màn hình theo chiều ngang.


Mô tả.
- Xóa màn hình.
- Chia màn hình thanh 3 khung theo chiều ngay, mỗi khung in ở giữa chuỗi “Truong DH
SPKT”.

6. 15. Chia màn hình theo chiều dọc.


Mô tả.
- Xóa màn hình.
- Chia màn hình thanh 3 khung theo chiều dọc, mỗi khung in ở giữa chuỗi “Truong DH
SPKT”.

Trang 8

You might also like