I. Giới thiệu
Ngày nay, với sự nhảy vọt của khoa học công nghệ nói chung
ngành công nghệ thông tin nói riêng, với những tính năng ưu việt, sự tiện
dụng ứng dụng rộng rãi trong mọi lĩnh vực, hoạt động của tin học trong
đời sống, yêu cầu chúng ta phải nắm vững các kiến thức cơ bản về máy vi
tính, tuy nhiên việc hiểu các ngôn ngữ bậc thấp để thể dễ dàng làm việc
tiếp xúc gần hơn với ngôn ngữ máy một điều rất quan trọng với những
người đã, đang sẽ trở thành Lập trình viên, đặc biệt những người hoạt
học vào các quá trình công nghệ.
Ngôn ngữ Assembler một ngôn ngữ bậc thấp, rất gần với ngôn ngữ
máy tất nhiên rất gần với phần cứng máy tính. Với đặc điểm như vậy nên
lập trình bằng ngôn ngữ Assembler những đặc thù riêng phần khác so
với ngôn ngữ bậc cao.
Sau một thời gian được thầy dẫn dắt hướng dẫn hết sức nhiệt tình,
nhóm 6 lớp 09B2 đã hiểu được cách viết một MACRO, một chương trình
con, các mô-đun liên kết,…để viết được một chương trình hoàn thiện. Sau
đây, nhóm 6 lớp 09B2 xin được gửi tới thầy bản báo cáo bài tập lớn, được
nhóm thực hiện trong thời gian qua.
2
II. tả
Yêu cầu: Viết chương trình thiết lập 1 màn hình giới thiệu(mode
40*25), màn hình các chức năng màn hình từng chức năng (mode 80*25)
thực hiện 4 chức năng:
1 .... Hiện một số nguyên ra dạng binary
2 .... Sắp xếp dãy số theo chiều giảm dần
3 .... Máy tính kRAM nào trên mainboard không?
4 ....Trở về màn hình giới thiệu.
Để giải quyết bài tập với yêu cầu trên ta sử dụng các MACRO, các
chương trình con, các mô-đun liên kết, các biến nhớ,…
III. tả phần thiết kế
Chương trình khi chạy gồm:
* Màn hình giới thiệu: gồm 3 xâu:
+ Xâu 1: Chữ màu trắng, kết thúc bằng “$”
Vien Dai hoc Mo Ha Noi
Khoa cong nghe thong tin
------------o0o-------------$
+ Xâu 2: Sử dụng BLINK, hiển thị chữ màu đỏ, nền xanh, nhấp nháy lên
màn hình: “BAI TAP LON”
+ Xâu 3: Chữ màu trắng, kết thúc bằng “$”
“Sinh viên thực hiện:
Ninh Van Binh
Nguyen Sy Danh
Dao Hoang Nam
Vu Duc Tuan
Lop:09B2
An Phim bat ki de tiep tuc
Con an ESC thi tro ve DOS $!”
3
* Màn hình chức năng:
Chỉ chứa 1 xâu: Chữ màu trắng, kết thúc bằng “$”
CAC CHUC NANG HIEN DANG BINARY,
SAP XEP DAY SO THEO CHIEU GIAM DAN
VA kRAM TREN MAINBOARD
------------------------------------------------------------
1 ... Hien mot so nguyen ra dang binary 16 bit
2 ... Sap xep day so theo chieu giam dan
3 ... May tinh co kRAM tren mainboard khong?
4 ... Tro ve man hinh gioi thieu
Hay chon: $”
Dùng cmp để vào các chức năng
Dùng HienString để hiện chương trình con.
4
IV. Lập trình các mô-đun
INCLUDE lib1.asm
.MODEL small ;code<64k, data<64k
.STACK 100h ;tinh theo byte
.DATA
GT1 db 13,10,' Vien Dai hoc Mo Ha Noi'
db 13,10,' Khoa cong nghe thong tin'
db 13,10,' ------------o0o-----------$'
GT2 db 'BAI TAP LON',0
GT3 db 13,10,13,10,13,10,' Cac sinh vien thuc hien:'
db 13,10,' 1. Ninh Van Binh'
db 13,10,' 2. Nguyen Sy Danh'
db 13,10,' 3. Dao Hoang Nam'
db 13,10,' 4. Vu Duc Tuan'
db 13,10,' Lop : 09b2'
db 13,10,13,10,13,10,' An phim bat ki de tiep tuc'
db 13,10,' Con ESC thi ve DOS$'
mode_cu db ?
;Khai bao bien cho man hinh chuc nang
cn db 13,10,' CAC CHUC NANG HIEN DANG BINARY,'
db 13,10,' SAP XEP DAY SO THEO CHIEU GIAM DAN'
db 13,10,' VA kRAM TREN MAINBOARD'
db 13,10,' ---------------***----------------'
db 13,10,13,10,' 1 ... Hien mot so nguyen ra dang binary 16 bit'
db 13,10,' 2 ... Sap xep day so theo chieu giam dan'
db 13,10,' 3 ... May tinh co kRAM tren mainboard khong?'
db 13,10,' 4 ... Tro ve man hinh gioi thieu'
5
db 13,10,13,10,' HAY CHON : $'
;Khai bao bien cho chuc nang hien 1 so nguyen sang dang binary
hb1 db 13,10,' Chuc nang hien dang binary'
db 13,10,' --------------------------'
db 13,10,13,10,' Vao so nguyen : $ '
hb2 db 13,10,13,10,' Dang binary la : $ '
tieptuc db 13,10,' Co tiep tuc CT (c/k) ? $'
;Khai bao bien cho chuc nang sap xep 1 day so theo chieu giam dan
M1 db 13,10,' Chuc nang sap xep day so theo chieu giam dan'
db 13,10,' --------------------------------------------'
db 13,10,13,10,' Hay vao so luong chu so : $ '
M2 db 13,10,' Hay vao day so : $'
M3 db 13,10,' a[$'
M4 db ']=$'
M5 db 13,10,' Cac so vua vao la : $'
M6 db ' $'
M7 db 13,10,' Day so da sap xep la : $'
M8 db 13,10,' Co tiep tuc CT (c/k) ? $'
i dw ?
slcs dw ?
index dw ?
a dw 100 dup (?)
;Khai bao bien cho chuc nang MT co bao nhieu kRAM tren mainboard
kR1 db 13,10,' MAY TINH CO kRAM TREN MAINBOARD
KHONG ?'
db 13,10,' ----------------------------------------'
db 13,10,13,10,' So luong kRAM co them tren mainboard la : $'
kR2 db ' 0 k$'
6
kR3 db ' 16 k$'
kR4 db '32 k$'
kR5 db '64 k$'
kR6 db 13,10,' An phim bat ky de ve man hinh chuc nang $'
.CODE
PS:
mov ax,@data
mov ds,ax
mov ah,0fh ; lay mode cu 80*25
int 10h
mov mode_cu,al; cat mode cu(al)->bien mode_cu
mov al,0 ; dat mode 40*25
mov ah,0
int 10h
HienString GT1
lea si,GT2
BLINK 8,7,10101100b
HienString GT3
mov ah,1 ; cho an 1 phim
int 21h
cmp al,27 ; ESC 27
jne CONTINUE
mov al,mode_cu; hoi phuc lai mode 80*25
mov ah,0
int 10h
mov ah,4ch ; ve DOS
int 21h
CONTINUE:
7
mov al,mode_cu; hoi phung mode 80*25
mov ah,0
int 10h
HienString cn
mov ah,1 ; cho 1 ky tu tu ban phim
int 21h
cmp al,'1'
jne Test_2
call HIENBNR
jmp CONTINUE
Test_2:
cmp al,'2'
jne Test_3
call SXG
jmp CONTINUE
Test_3:
cmp al,'3'
jne Test_4
call KRAM
jmp CONTINUE
Test_4:
cmp al,'4'
jne Test_5
call PS
Test_5:
jmp CONTINUE
; Chuong trinh con hien 1 so ra dang binary
HIENBNR PROC
8
push ax bx cx
L_HB1:
clrscr
HienString hb1
call VAO_SO_N
mov bx,ax
HienString hb2
mov cl,16
L_HB2:
xor al,al
shl bx,1
adc al,30h
mov ah,0eh
int 10h
loop L_HB2
mov al,'B'
mov ah,0eh
int 10h
HienString tieptuc
mov ah,1
int 21h
cmp al,'c'
jne Thoat_HB
jmp L_HB1
Thoat_HB:
pop cx bx ax
ret
HIENBNR ENDP
9
;Chuong trinh con sap xep day so theo thu tu giam dan
SXG PROC
push ax bx cx dx
T1:
clrscr
HienString M1
call VAO_SO_N
mov slcs,ax
mov index,ax
mov cx,ax
mov bx,offset a
HienString M2
mov i,0
T2:
HienString M3
mov ax,i
call HIEN_SO_N
HienString M4
call VAO_SO_N
mov [bx],ax
inc i
add bx,2
loop T2
HienString M5
call HIEN_DAY
dec index
T3:
mov cx,slcs
10
mov bx,offset a
dec cx
T4:
mov ax,[bx]
mov dx,[bx+2]
cmp ax,dx
jg T5
mov [bx],dx
mov [bx+2],ax
T5:
add bx,2
loop T4
dec index
jnz T3
HienString M7
call HIEN_DAY
HienString M8
mov ah,1
int 21h
cmp al,'c'
jne Thoat
jmp T1
Thoat:
pop dx cx bx ax
ret
SXG ENDP
HIEN_DAY PROC
push ax bx cx
11
mov cx,slcs
mov bx,offset a
HD:
mov ax,[bx]
call HIEN_SO_N
HienString M6
add bx,2
loop HD
pop cx bx ax
ret
HIEN_DAY ENDP
KRAM PROC
push ax
L_kRAM1:
clrscr
HienString kR1
int 11h
and al,0ch
shr al,1
shr al,1
jnz L_kRAM2
HienString kR2
jmp Exit_kRAM
L_kRAM2:
cmp al,1
jne L_kRAM3
HienString kR3
12
jmp Exit_kRAM
L_kRAM3:
cmp al,2
jne L_kRAM4
HienString kR4
jmp Exit_kRAM
L_kRAM4:
HienString kR5
Exit_kRAM:
HienString kR6
mov ah,1
int 21h
pop ax
ret
KRAM ENDP
INCLUDE lib2.asm
END PS
13
;-----------------------------------------------------
; MACRO HIỆN MỘT XÂU TỰ |
; KẾT THÚC BẰNG “$” RA MAN HINH |
;-----------------------------------------------------
HienString MACRO xau
push AX DX
mov DX,offset xau ; DX trỏ đến đầu xâu
mov AH,9 ; Chức năng hiện 1 xâu tự
int 21h ; (kết thúc bằng “$”) lên MH
pop DX AX
ENDM
;-----------------------------------------
; MACRO HIỆN 1 XÂU TỰ |
; MÀU SẮC, NHẤP NHÁY |
;------------------------------------------
BLINK MACRO x,y,tt
local B1,Exit_B
push si ax bx cx dx
mov dl,x
mov dh,y
mov ah,2
int 10h
B1:
mov al,[si]
and al,al
jz Exit_B
14
mov cx,1
mov bl,tt
mov ah,9
int 10h
inc dl
mov ah,2
int 10h
inc si
jmp B1
Exit_B
pop dx cx bx ax si
ENDM
V. Kết quả chạy
1. Màn hình giới thiệu
màn hình giới thiệu được đặt mode 40*25, bao gồm 3 xâu tự.
Xâu thứ nhất thứ ba kết thúc bằng “$” sử dụng MACRO
“Hienstring” để hiện xâu tự ra màn hình.
Xâu thứ hai sử dụng MACRO “BLINK” để hiện xâu “BAI TAP LON” ra
màn hình màu sắc với nền màu xanh, chữ màu đỏ, nhấp nháy.
Sau đó, màn hình dừng để chờ 1 tự được nhập vào từ bàn phím.
15
Sau khi nhập 1 tự bất từ bàn phím khác ESC (nếu nhấn ESC thì thoát ra
màn hình DOS) thì màn hình 40*25 được phục hồi về màn hình 80*25
hiển thị màn hình chức năng.
16
2. Màn hình chức năng
Màn hình chức năng chỉ 1 xâu kết thúc bằng ‘$’, sử dụng MACRO
“HienString” để hiện xâu đó ra màn hình.
Sau đó chờ 1 tự được nhập từ bàn phím, sử dụng lệnh “cmp” để so sánh
phím nhập vào với các số 1,2,3,4 theo thứ tự đó để nhảy tới các chương
trình con tương ứng.
17
3. MH thực hiện chức năng hiện 1 số ra dạng binary 16 bit
Nếu phím nhập vào bằng 1 thì gọi chương trình con “HIENBNR” để thực
hiện.
chương trình con “HIENBNR” ta thực hiện nhập một số nguyên bất
thông qua chương trình con “VAO_SO_N” MACRO “HienString” để
hiện kết quả ra màn hình.
18
4. MH thực hiện chức năng sắp xếp dãy số theo chiều giảm dần
Khi cmp al bằng số 2 thì chương trình con “SXG” được gọi để thực hiện.
Ban đầu sử dụng chương trình con “VAO_SO_N” “HIEN_SO_N” để
nhập vào số lượng chữ số giá trị từng số. Chương trình con
“HIEN_DAY” hiện dãy số vừa vào hiện dãy số đã sắp xếp.
19
5. MH thực hiện chức năng máy tính kRAM trên mainboard
không?
Nếu cmp al bằng 3 thì chương trình con “KRAM” được gọi để thực hiện.
Bit thứ ba thứ của byte địa chỉ 40h:10h của vùng nhớ biến BIOS
cho biết số lượng kRAM trên mainboard máy tính chúng ta đang dùng. Để
biết được số lượng kRAM trên mainboard ta phải tách 2 bit cho biết số
lượng kRAM qua lệnh and “al,0ch” 2 lần lệnh “shr al,1” để chuyển 2 bit
thứ ba thứ này về vị trí 0 1.
Thông qua lệnh nhảy jnz jne để biết giá trị các bit cờ qua đó biết được số
lượng kRAM trên mainboard.
Sau mỗi chương trình con, nhấn phím “c” để tiếp tục chương trình, còn nhấn
phím bất để quay về màn hình chức năng bằng cách sử dụng lệnh cmp al
với chữ “c”.
20

Preview text:

I. Giới thiệu
Ngày nay, với sự nhảy vọt của khoa học công nghệ nói chung và
ngành công nghệ thông tin nói riêng, với những tính năng ưu việt, sự tiện
dụng và ứng dụng rộng rãi trong mọi lĩnh vực, hoạt động của tin học trong
đời sống, yêu cầu chúng ta phải nắm vững các kiến thức cơ bản về máy vi
tính, tuy nhiên việc hiểu các ngôn ngữ bậc thấp để có thể dễ dàng làm việc
và tiếp xúc gần hơn với ngôn ngữ máy là một điều rất quan trọng với những
người đã, đang và sẽ trở thành Lập trình viên, đặc biệt là những người hoạt
động trong các lĩnh vực đo lường, điều khiển và những người ứng dụng tin
học vào các quá trình công nghệ.
Ngôn ngữ Assembler là một ngôn ngữ bậc thấp, rất gần với ngôn ngữ
máy và tất nhiên rất gần với phần cứng máy tính. Với đặc điểm như vậy nên
lập trình bằng ngôn ngữ Assembler có những đặc thù riêng có phần khác so với ngôn ngữ bậc cao.
Sau một thời gian được thầy dẫn dắt và hướng dẫn hết sức nhiệt tình,
nhóm 6 lớp 09B2 đã hiểu được cách viết một MACRO, một chương trình
con, các mô-đun liên kết,…để viết được một chương trình hoàn thiện. Sau
đây, nhóm 6 lớp 09B2 xin được gửi tới thầy bản báo cáo bài tập lớn, được
nhóm thực hiện trong thời gian qua. 2 II. Mô tả
Yêu cầu: Viết chương trình thiết lập 1 màn hình giới thiệu(mode
40*25), màn hình các chức năng và màn hình từng chức năng (mode 80*25) thực hiện 4 chức năng:
1 .... Hiện một số nguyên ra dạng binary
2 .... Sắp xếp dãy số theo chiều giảm dần
3 .... Máy tính có kRAM nào trên mainboard không?
4 ....Trở về màn hình giới thiệu.
Để giải quyết bài tập với yêu cầu trên ta sử dụng các MACRO, các
chương trình con, các mô-đun liên kết, các biến nhớ,… III.
Mô tả phần thiết kế
Chương trình khi chạy gồm:
* Màn hình giới thiệu: gồm 3 xâu:
+ Xâu 1: Chữ màu trắng, kết thúc bằng “$” “ Vien Dai hoc Mo Ha Noi Khoa cong nghe thong tin
------------o0o-------------$ ”
+ Xâu 2: Sử dụng BLINK, hiển thị chữ có màu đỏ, nền xanh, nhấp nháy lên màn hình: “BAI TAP LON”
+ Xâu 3: Chữ màu trắng, kết thúc bằng “$” “Sinh viên thực hiện: Ninh Van Binh Nguyen Sy Danh Dao Hoang Nam Vu Duc Tuan Lop:09B2 An Phim bat ki de tiep tuc
Con an ESC thi tro ve DOS $!” 3 * Màn hình chức năng:
Chỉ chứa 1 xâu: Chữ màu trắng, kết thúc bằng “$”
CAC CHUC NANG HIEN DANG BINARY,
SAP XEP DAY SO THEO CHIEU GIAM DAN VA kRAM TREN MAINBOARD
------------------------------------------------------------
1 ... Hien mot so nguyen ra dang binary 16 bit
2 ... Sap xep day so theo chieu giam dan
3 ... May tinh co kRAM tren mainboard khong?
4 ... Tro ve man hinh gioi thieu Hay chon: $”
Dùng cmp để vào các chức năng
Dùng HienString để hiện chương trình con. 4 IV.
Lập trình các mô-đun INCLUDE lib1.asm
.MODEL small ;code<64k, data<64k .STACK 100h ;tinh theo byte .DATA
GT1 db 13,10,' Vien Dai hoc Mo Ha Noi'
db 13,10,' Khoa cong nghe thong tin'
db 13,10,' ------------o0o-----------$' GT2 db 'BAI TAP LON',0
GT3 db 13,10,13,10,13,10,' Cac sinh vien thuc hien:' db 13,10,' 1. Ninh Van Binh' db 13,10,' 2. Nguyen Sy Danh' db 13,10,' 3. Dao Hoang Nam' db 13,10,' 4. Vu Duc Tuan' db 13,10,' Lop : 09b2'
db 13,10,13,10,13,10,' An phim bat ki de tiep tuc'
db 13,10,' Con ESC thi ve DOS$' mode_cu db ?
;Khai bao bien cho man hinh chuc nang
cn db 13,10,' CAC CHUC NANG HIEN DANG BINARY,'
db 13,10,' SAP XEP DAY SO THEO CHIEU GIAM DAN'
db 13,10,' VA kRAM TREN MAINBOARD'
db 13,10,' ---------------***----------------'
db 13,10,13,10,' 1 ... Hien mot so nguyen ra dang binary 16 bit'
db 13,10,' 2 ... Sap xep day so theo chieu giam dan'
db 13,10,' 3 ... May tinh co kRAM tren mainboard khong?'
db 13,10,' 4 ... Tro ve man hinh gioi thieu' 5
db 13,10,13,10,' HAY CHON : $'
;Khai bao bien cho chuc nang hien 1 so nguyen sang dang binary
hb1 db 13,10,' Chuc nang hien dang binary'
db 13,10,' --------------------------'
db 13,10,13,10,' Vao so nguyen : $ '
hb2 db 13,10,13,10,' Dang binary la : $ '
tieptuc db 13,10,' Co tiep tuc CT (c/k) ? $'
;Khai bao bien cho chuc nang sap xep 1 day so theo chieu giam dan
M1 db 13,10,' Chuc nang sap xep day so theo chieu giam dan'
db 13,10,' --------------------------------------------'
db 13,10,13,10,' Hay vao so luong chu so : $ '
M2 db 13,10,' Hay vao day so : $' M3 db 13,10,' a[$' M4 db ']=$'
M5 db 13,10,' Cac so vua vao la : $' M6 db ' $'
M7 db 13,10,' Day so da sap xep la : $'
M8 db 13,10,' Co tiep tuc CT (c/k) ? $' i dw ? slcs dw ? index dw ? a dw 100 dup (?)
;Khai bao bien cho chuc nang MT co bao nhieu kRAM tren mainboard
kR1 db 13,10,' MAY TINH CO kRAM TREN MAINBOARD KHONG ?'
db 13,10,' ----------------------------------------'
db 13,10,13,10,' So luong kRAM co them tren mainboard la : $' kR2 db ' 0 k$' 6 kR3 db ' 16 k$' kR4 db '32 k$' kR5 db '64 k$'
kR6 db 13,10,' An phim bat ky de ve man hinh chuc nang $' .CODE PS: mov ax,@data mov ds,ax
mov ah,0fh ; lay mode cu 80*25 int 10h
mov mode_cu,al; cat mode cu(al)->bien mode_cu mov al,0 ; dat mode 40*25 mov ah,0 int 10h HienString GT1 lea si,GT2 BLINK 8,7,10101100b HienString GT3 mov ah,1 ; cho an 1 phim int 21h cmp al,27 ; ESC 27 jne CONTINUE
mov al,mode_cu; hoi phuc lai mode 80*25 mov ah,0 int 10h mov ah,4ch ; ve DOS int 21h CONTINUE: 7
mov al,mode_cu; hoi phung mode 80*25 mov ah,0 int 10h HienString cn
mov ah,1 ; cho 1 ky tu tu ban phim int 21h cmp al,'1' jne Test_2 call HIENBNR jmp CONTINUE Test_2: cmp al,'2' jne Test_3 call SXG jmp CONTINUE Test_3: cmp al,'3' jne Test_4 call KRAM jmp CONTINUE Test_4: cmp al,'4' jne Test_5 call PS Test_5: jmp CONTINUE
; Chuong trinh con hien 1 so ra dang binary HIENBNR PROC 8 push ax bx cx L_HB1: clrscr HienString hb1 call VAO_SO_N mov bx,ax HienString hb2 mov cl,16 L_HB2: xor al,al shl bx,1 adc al,30h mov ah,0eh int 10h loop L_HB2 mov al,'B' mov ah,0eh int 10h HienString tieptuc mov ah,1 int 21h cmp al,'c' jne Thoat_HB jmp L_HB1 Thoat_HB: pop cx bx ax ret HIENBNR ENDP 9
;Chuong trinh con sap xep day so theo thu tu giam dan SXG PROC push ax bx cx dx T1: clrscr HienString M1 call VAO_SO_N mov slcs,ax mov index,ax mov cx,ax mov bx,offset a HienString M2 mov i,0 T2: HienString M3 mov ax,i call HIEN_SO_N HienString M4 call VAO_SO_N mov [bx],ax inc i add bx,2 loop T2 HienString M5 call HIEN_DAY dec index T3: mov cx,slcs 10 mov bx,offset a dec cx T4: mov ax,[bx] mov dx,[bx+2] cmp ax,dx jg T5 mov [bx],dx mov [bx+2],ax T5: add bx,2 loop T4 dec index jnz T3 HienString M7 call HIEN_DAY HienString M8 mov ah,1 int 21h cmp al,'c' jne Thoat jmp T1 Thoat: pop dx cx bx ax ret SXG ENDP HIEN_DAY PROC push ax bx cx 11 mov cx,slcs mov bx,offset a HD: mov ax,[bx] call HIEN_SO_N HienString M6 add bx,2 loop HD pop cx bx ax ret HIEN_DAY ENDP KRAM PROC push ax L_kRAM1: clrscr HienString kR1 int 11h and al,0ch shr al,1 shr al,1 jnz L_kRAM2 HienString kR2 jmp Exit_kRAM L_kRAM2: cmp al,1 jne L_kRAM3 HienString kR3 12 jmp Exit_kRAM L_kRAM3: cmp al,2 jne L_kRAM4 HienString kR4 jmp Exit_kRAM L_kRAM4: HienString kR5 Exit_kRAM: HienString kR6 mov ah,1 int 21h pop ax ret KRAM ENDP INCLUDE lib2.asm END PS 13
;-----------------------------------------------------
; MACRO HIỆN MỘT XÂU KÍ TỰ |
; KẾT THÚC BẰNG “$” RA MAN HINH |
;----------------------------------------------------- HienString MACRO xau push AX DX mov DX,offset xau ; DX trỏ đến đầu xâu mov AH,9
; Chức năng hiện 1 xâu kí tự int 21h
; (kết thúc bằng “$”) lên MH pop DX AX ENDM
;-----------------------------------------
; MACRO HIỆN 1 XÂU KÍ TỰ |
; CÓ MÀU SẮC, NHẤP NHÁY |
;------------------------------------------ BLINK MACRO x,y,tt local B1,Exit_B push si ax bx cx dx mov dl,x mov dh,y mov ah,2 int 10h B1: mov al,[si] and al,al jz Exit_B 14 mov cx,1 mov bl,tt mov ah,9 int 10h inc dl mov ah,2 int 10h inc si jmp B1 Exit_B pop dx cx bx ax si ENDM V. Kết quả chạy
1. Màn hình giới thiệu
Ở màn hình giới thiệu được đặt mode 40*25, và bao gồm 3 xâu kí tự.
Xâu thứ nhất và thứ ba kết thúc bằng “$” và sử dụng MACRO
“Hienstring” để hiện xâu kí tự ra màn hình.
Xâu thứ hai sử dụng MACRO “BLINK” để hiện xâu “BAI TAP LON” ra
màn hình có màu sắc với nền màu xanh, chữ màu đỏ, nhấp nháy.
Sau đó, màn hình dừng để chờ 1 kí tự được nhập vào từ bàn phím. 15
Sau khi nhập 1 kí tự bất kì từ bàn phím khác ESC (nếu nhấn ESC thì thoát ra
màn hình DOS) thì màn hình 40*25 được phục hồi về màn hình 80*25 và
hiển thị màn hình chức năng. 16
2. Màn hình chức năng
Màn hình chức năng chỉ có 1 xâu kết thúc bằng ‘$’, sử dụng MACRO
“HienString” để hiện xâu đó ra màn hình.
Sau đó chờ 1 kí tự được nhập từ bàn phím, sử dụng lệnh “cmp” để so sánh
phím nhập vào với các số 1,2,3,4 và theo thứ tự đó để nhảy tới các chương trình con tương ứng. 17
3. MH thực hiện chức năng hiện 1 số ra dạng binary 16 bit
Nếu phím nhập vào bằng 1 thì gọi chương trình con “HIENBNR” để thực hiện.
Ở chương trình con “HIENBNR” ta thực hiện nhập một số nguyên bất kì
thông qua chương trình con “VAO_SO_N” và MACRO “HienString” để
hiện kết quả ra màn hình. 18
4. MH thực hiện chức năng sắp xếp dãy số theo chiều giảm dần
Khi cmp al bằng số 2 thì chương trình con “SXG” được gọi để thực hiện.
Ban đầu sử dụng chương trình con “VAO_SO_N” và “HIEN_SO_N” để
nhập vào số lượng chữ số và giá trị từng số. Chương trình con
“HIEN_DAY” hiện dãy số vừa vào và hiện dãy số đã sắp xếp. 19
5. MH thực hiện chức năng máy tính có kRAM trên mainboard không?
Nếu cmp al bằng 3 thì chương trình con “KRAM” được gọi để thực hiện.
Bit thứ ba và thứ tư của byte có địa chỉ 40h:10h của vùng nhớ biến BIOS
cho biết số lượng kRAM trên mainboard máy tính chúng ta đang dùng. Để
biết được số lượng kRAM trên mainboard ta phải tách 2 bit cho biết số
lượng kRAM qua lệnh and “al,0ch” và 2 lần lệnh “shr al,1” để chuyển 2 bit
thứ ba và thứ tư này về vị trí 0 và 1.
Thông qua lệnh nhảy jnz và jne để biết giá trị các bit cờ qua đó biết được số lượng kRAM trên mainboard.
Sau mỗi chương trình con, nhấn phím “c” để tiếp tục chương trình, còn nhấn
phím bất kì để quay về màn hình chức năng bằng cách sử dụng lệnh cmp al với chữ “c”. 20